From 90ec2a373852fa4848cf70ae1701f3dad835577a Mon Sep 17 00:00:00 2001 From: justin Date: Mon, 23 Dec 2024 16:29:10 +0000 Subject: [PATCH] Allow a spring and hardware to make weapons automatic --- src/Dodge/Creature.hs | 2 + src/Dodge/Data/ComposedItem.hs | 2 + src/Dodge/HeldUse.hs | 5 +- src/Dodge/Item/Grammar.hs | 28 +++++++-- src/Dodge/Item/InventoryColor.hs | 1 + tags | 104 ++++++++++++++++--------------- 6 files changed, 87 insertions(+), 55 deletions(-) diff --git a/src/Dodge/Creature.hs b/src/Dodge/Creature.hs index 511ccea63..839297b5e 100644 --- a/src/Dodge/Creature.hs +++ b/src/Dodge/Creature.hs @@ -252,6 +252,8 @@ inventoryX c = case c of [ battery , zoomScope , augmentedHUD + , makeTypeCraft SPRING + , makeTypeCraft HARDWARE , autoRifle , alteRifle , megaTinMag 10200 diff --git a/src/Dodge/Data/ComposedItem.hs b/src/Dodge/Data/ComposedItem.hs index 8a6ecd93f..5bf9745b3 100644 --- a/src/Dodge/Data/ComposedItem.hs +++ b/src/Dodge/Data/ComposedItem.hs @@ -24,6 +24,7 @@ data ComposeLinkType | RemoteScreenLink | AugmentedHUDLink | FunctionChangeLink + | MakeAutoLink deriving (Eq, Ord, Show, Read) data ItemStructuralFunction @@ -42,6 +43,7 @@ data ItemStructuralFunction | AmmoPayloadSF AmmoType | AmmoEffectSF AmmoType | FunctionChangeSF + | MakeAutoSF deriving (Eq, Ord, Show, Read) type ComposedItem = (Item, ItemStructuralFunction, LinkTest) diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index ec240bae3..fc00c99e9 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -49,10 +49,13 @@ type ChainEffect = hammerCheck :: ChainEffect hammerCheck f it cr w = case it ^? ldtValue . itUse . heldTriggerType of - Just HammerTrigger -> case w ^? input . mouseButtons . ix SDL.ButtonLeft of + Just HammerTrigger | nomakeauto + -> case w ^? input . mouseButtons . ix SDL.ButtonLeft of Just 0 -> f it cr w _ -> w _ -> f it cr w + where + nomakeauto = not . isJust $ lookup MakeAutoLink (it ^. ldtRight) -- | Applies a world effect after an item use cooldown check. useTimeCheck :: ChainEffect diff --git a/src/Dodge/Item/Grammar.hs b/src/Dodge/Item/Grammar.hs index 3d8476284..f8f6ab1cf 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -56,10 +56,11 @@ itemToBreakLists itm itmf = case (itm ^. itType, itmf) of (_, HeldPlatformSF) -> ( getAmmoLinks itm , [(WeaponTargetingSF, WeaponTargetingLink), (WeaponScopeSF, WeaponScopeLink)] + <> getAutoSpringLinks itm ) (_, GadgetPlatformSF) -> ( getAmmoLinks itm - , [(TriggerSF,TriggerLink),(WeaponTargetingSF, WeaponTargetingLink), (WeaponScopeSF, WeaponScopeLink)] + , [(TriggerSF, TriggerLink), (WeaponTargetingSF, WeaponTargetingLink), (WeaponScopeSF, WeaponScopeLink)] ) (_, AmmoMagSF{}) -> fromMaybe ([], []) $ do atype <- itm ^? itConsumables . magType @@ -78,6 +79,11 @@ itemToBreakLists itm itmf = case (itm ^. itType, itmf) of ([(AmmoMagSF ElectricalAmmo, AmmoInLink 0 ElectricalAmmo)], []) _ -> ([], []) +getAutoSpringLinks :: Item -> [(ItemStructuralFunction, ComposeLinkType)] +getAutoSpringLinks itm = case itm ^? itUse . heldTriggerType of + Just HammerTrigger -> [(MakeAutoSF, MakeAutoLink)] + _ -> [] + getAmmoLinks :: Item -> [(ItemStructuralFunction, ComposeLinkType)] getAmmoLinks itm = map @@ -90,9 +96,10 @@ itemToFunction itm = case itm ^. itType of HELD{} -> case itm ^? itUseCondition of Just MustBeHeld -> HeldPlatformSF _ -> GadgetPlatformSF - _ | Just amtype <- itm ^? itConsumables . magType - , Just _ <- itm ^? itLocation . ilEquipSite . _Just - -> AmmoMagSF amtype + _ + | Just amtype <- itm ^? itConsumables . magType + , Just _ <- itm ^? itLocation . ilEquipSite . _Just -> + AmmoMagSF amtype AMMOMAG{} -> maybe UncomposableIsolateSF AmmoMagSF $ itm ^? itConsumables . magType ATTACH REMOTESCREEN -> RemoteScreenSF ATTACH BULLETSYNTH -> AmmoModifierSF BulletAmmo @@ -114,6 +121,7 @@ basePCI itm = case _itType itm of itemBaseConnections :: Item -> LinkTest itemBaseConnections itm = case _itType itm of HELD LASER -> laserLinkTest itm + CRAFT SPRING -> springLinkTest itm _ -> uncurry useBreakL $ itemToBreakLists itm (itemToFunction itm) laserLinkTest :: Item -> LinkTest @@ -137,6 +145,18 @@ toLasgunUpdate itm = (\(par, _, _) -> (par, HeldPlatformSF, uncurry useBreakL $ itemToBreakLists itm HeldPlatformSF)) (\(chi, _, up) -> (chi, FunctionChangeSF, up)) +springLinkTest :: Item -> LinkTest +springLinkTest itm = LTest (const Nothing) $ + \ci -> case ci ^. _1 . itType of + CRAFT HARDWARE -> + Just + ( LUpdate + (ILink FunctionChangeLink orientAttachment) + (\(par, _, up) -> (par, MakeAutoSF, up)) + (\(chi, _, up) -> (chi, FunctionChangeSF, up)) + ) + _ -> Nothing + --itemLinkTestLeft :: Item -> PartiallyComposedItem -> Maybe LinkUpdate --itemLinkTestLeft itm = _tryLeftLink $ -- uncurry useBreakL $ itemToBreakLists itm diff --git a/src/Dodge/Item/InventoryColor.hs b/src/Dodge/Item/InventoryColor.hs index 279697965..333b0a71a 100644 --- a/src/Dodge/Item/InventoryColor.hs +++ b/src/Dodge/Item/InventoryColor.hs @@ -9,6 +9,7 @@ import Dodge.Data.ComposedItem itemInvColor :: ComposedItem -> Color itemInvColor ci = case ci ^. _2 of HeldPlatformSF -> white + MakeAutoSF -> white EquipmentPlatformSF -> yellow GadgetPlatformSF -> white TriggerSF -> yellow diff --git a/tags b/tags index 8f93c69cc..6f50faea0 100644 --- a/tags +++ b/tags @@ -57,19 +57,19 @@ Ambush src/Dodge/Data/ActionPlan.hs 178;" C Ammo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 6;" m Ammo src/Dodge/Item/Ammo.hs 1;" m AmmoEffectLink src/Dodge/Data/ComposedItem.hs 21;" C -AmmoEffectSF src/Dodge/Data/ComposedItem.hs 43;" C +AmmoEffectSF src/Dodge/Data/ComposedItem.hs 44;" C AmmoInLink src/Dodge/Data/ComposedItem.hs 16;" C AmmoMag src/Dodge/Data/Item.hs 34;" C -AmmoMagSF src/Dodge/Data/ComposedItem.hs 37;" C +AmmoMagSF src/Dodge/Data/ComposedItem.hs 38;" C AmmoMagType src/Dodge/Data/Item/Combine.hs 76;" t AmmoModLink src/Dodge/Data/ComposedItem.hs 18;" C -AmmoModifierSF src/Dodge/Data/ComposedItem.hs 40;" C +AmmoModifierSF src/Dodge/Data/ComposedItem.hs 41;" C AmmoParams src/Dodge/Data/Item/Use.hs 113;" t AmmoPayloadLink src/Dodge/Data/ComposedItem.hs 20;" C -AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 42;" C +AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 43;" C AmmoPerShot src/Dodge/Data/Item/Use.hs 162;" t AmmoTargetingLink src/Dodge/Data/ComposedItem.hs 19;" C -AmmoTargetingSF src/Dodge/Data/ComposedItem.hs 41;" C +AmmoTargetingSF src/Dodge/Data/ComposedItem.hs 42;" C AmmoType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 39;" t AnRoom src/Dodge/Annotation/Data.hs 18;" C AnTree src/Dodge/Annotation/Data.hs 19;" C @@ -101,7 +101,7 @@ Attention src/Dodge/Data/Creature/Perception.hs 60;" t AttentiveTo src/Dodge/Data/Creature/Perception.hs 61;" C Audition src/Dodge/Data/Creature/Perception.hs 47;" t AugmentedHUDLink src/Dodge/Data/ComposedItem.hs 25;" C -AugmentedHUDSF src/Dodge/Data/ComposedItem.hs 36;" C +AugmentedHUDSF src/Dodge/Data/ComposedItem.hs 37;" C AutoAI src/Dodge/Data/Creature/Misc.hs 56;" C AutoCrit src/Dodge/Creature/AutoCrit.hs 1;" m AutoDoorObstacle src/Dodge/Data/PathGraph.hs 51;" C @@ -340,7 +340,7 @@ Common src/Dodge/Zoning/Common.hs 1;" m Compile src/Shader/Compile.hs 1;" m Compose src/Dodge/Tree/Compose.hs 4;" m ComposeLinkType src/Dodge/Data/ComposedItem.hs 15;" t -ComposedItem src/Dodge/Data/ComposedItem.hs 47;" t +ComposedItem src/Dodge/Data/ComposedItem.hs 49;" t ComposedItem src/Dodge/Data/ComposedItem.hs 6;" m Composite src/Picture/Composite.hs 1;" m ComsSS src/Dodge/Data/Scenario.hs 98;" C @@ -642,7 +642,7 @@ Equipment src/Dodge/Default/Item/Use/Equipment.hs 1;" m Equipment src/Dodge/Equipment.hs 1;" m Equipment src/Dodge/Item/Equipment.hs 1;" m EquipmentAllocation src/Dodge/Data/RightButtonOptions.hs 18;" t -EquipmentPlatformSF src/Dodge/Data/ComposedItem.hs 31;" C +EquipmentPlatformSF src/Dodge/Data/ComposedItem.hs 32;" C Escape src/Dodge/Data/Scenario.hs 10;" C EscapeMenuOption src/Dodge/Data/Universe.hs 72;" t Essential src/Shape/Data.hs 34;" C @@ -736,13 +736,13 @@ FullShadowFidelity src/Shape/Data.hs 24;" C FullSize src/Dodge/Data/Item/Params.hs 31;" C FullyVisible src/Dodge/Data/CamouflageStatus.hs 12;" C FunctionChangeLink src/Dodge/Data/ComposedItem.hs 26;" C -FunctionChangeSF src/Dodge/Data/ComposedItem.hs 44;" C +FunctionChangeSF src/Dodge/Data/ComposedItem.hs 45;" C GEqC src/SameConstr.hs 20;" c GLASSSHARD src/Dodge/Data/Item/Combine.hs 37;" C GLHelp src/GLHelp.hs 1;" m GRAPECANNON src/Dodge/Data/Item/Combine.hs 126;" C GREEN src/Color/Data.hs 16;" C -GadgetPlatformSF src/Dodge/Data/ComposedItem.hs 32;" C +GadgetPlatformSF src/Dodge/Data/ComposedItem.hs 33;" C GameOverOptions src/Dodge/Data/Universe.hs 68;" C GameRoom src/Dodge/GameRoom.hs 15;" t GameRoom src/Dodge/GameRoom.hs 8;" m @@ -821,7 +821,7 @@ HeldDelay src/Dodge/Data/Item/HeldDelay.hs 6;" m HeldItemType src/Dodge/Data/Item/Combine.hs 115;" t HeldOffset src/Dodge/Item/HeldOffset.hs 1;" m HeldParams src/Dodge/Data/Item/Use.hs 80;" t -HeldPlatformSF src/Dodge/Data/ComposedItem.hs 30;" C +HeldPlatformSF src/Dodge/Data/ComposedItem.hs 31;" C HeldScroll src/Dodge/HeldScroll.hs 1;" m HeldUse src/Dodge/Data/Item/HeldUse.hs 6;" m HeldUse src/Dodge/HeldUse.hs 4;" m @@ -849,7 +849,7 @@ Huge src/Shape/Data.hs 28;" C Humanoid src/Dodge/Data/Creature/Misc.hs 76;" C Humanoid src/Dodge/Humanoid.hs 1;" m HumanoidAI src/Dodge/Data/Creature/Misc.hs 48;" t -ILink src/Dodge/Data/ComposedItem.hs 49;" C +ILink src/Dodge/Data/ComposedItem.hs 51;" C IMSS src/Dodge/Data/SelectionList.hs 36;" t INVISIBILITYEQUIPMENT src/Dodge/Data/Item/Combine.hs 95;" C IRONBAR src/Dodge/Data/Item/Combine.hs 56;" C @@ -932,12 +932,12 @@ Item src/Dodge/Default/Item.hs 1;" m Item src/Dodge/Item.hs 3;" m ItemClust src/Dodge/Combine/Graph.hs 20;" C ItemDimension src/Dodge/Data/Item/Misc.hs 13;" t -ItemLink src/Dodge/Data/ComposedItem.hs 49;" t +ItemLink src/Dodge/Data/ComposedItem.hs 51;" t ItemLocation src/Dodge/Data/Item/Location.hs 28;" t ItemParams src/Dodge/Data/Item/Params.hs 13;" t ItemParams src/Dodge/Tesla/ItemParams.hs 1;" m ItemScrollTimeFlow src/Dodge/Data/World.hs 62;" C -ItemStructuralFunction src/Dodge/Data/ComposedItem.hs 29;" t +ItemStructuralFunction src/Dodge/Data/ComposedItem.hs 30;" t ItemTargeting src/Dodge/Data/Item.hs 55;" t ItemType src/Dodge/Data/Item/Combine.hs 15;" t ItemUse src/Dodge/Data/Item/Use.hs 35;" t @@ -958,7 +958,7 @@ LAUNCHER src/Dodge/Data/Item/Combine.hs 147;" C LAUNCHERX src/Dodge/Data/Item/Combine.hs 148;" C LDT src/Dodge/Data/DoubleTree.hs 40;" C LDTBottomNode src/Dodge/Data/DoubleTree.hs 28;" C -LDTComb src/Dodge/Item/Grammar.hs 144;" t +LDTComb src/Dodge/Item/Grammar.hs 164;" t LDTMidAboveNode src/Dodge/Data/DoubleTree.hs 26;" C LDTMidBelowNode src/Dodge/Data/DoubleTree.hs 27;" C LDTRootNode src/Dodge/Data/DoubleTree.hs 24;" C @@ -969,8 +969,8 @@ LIGHTER src/Dodge/Data/Item/Combine.hs 43;" C LIGHTSENSOR src/Dodge/Data/Item/Combine.hs 57;" C LS src/Dodge/Data/LightSource.hs 23;" C LSParam src/Dodge/Data/LightSource.hs 16;" t -LTest src/Dodge/Data/ComposedItem.hs 54;" C -LUpdate src/Dodge/Data/ComposedItem.hs 59;" C +LTest src/Dodge/Data/ComposedItem.hs 56;" C +LUpdate src/Dodge/Data/ComposedItem.hs 61;" C LWorld src/Dodge/Data/LWorld.hs 97;" t LWorld src/Dodge/Data/LWorld.hs 6;" m LabLink src/Dodge/Data/Room.hs 45;" C @@ -1027,8 +1027,8 @@ LimitedWater src/Dodge/Data/Scenario.hs 40;" C LinearShockwave src/Dodge/Data/LinearShockwave.hs 13;" t LinearShockwave src/Dodge/Data/LinearShockwave.hs 6;" m Link src/Dodge/Room/Link.hs 6;" m -LinkTest src/Dodge/Data/ComposedItem.hs 54;" t -LinkUpdate src/Dodge/Data/ComposedItem.hs 59;" t +LinkTest src/Dodge/Data/ComposedItem.hs 56;" t +LinkUpdate src/Dodge/Data/ComposedItem.hs 61;" t List src/Dodge/Combine/List.hs 1;" m List src/Dodge/Render/List.hs 3;" m ListDisplayParams src/Dodge/Data/SelectionList.hs 13;" t @@ -1106,6 +1106,8 @@ MagnetUpdate src/Dodge/Data/Magnet.hs 13;" t MagnetUpdateTimer src/Dodge/Data/Magnet.hs 13;" C Main appDodge/Main.hs 1;" m Make src/Dodge/Corpse/Make.hs 1;" m +MakeAutoLink src/Dodge/Data/ComposedItem.hs 27;" C +MakeAutoSF src/Dodge/Data/ComposedItem.hs 46;" C MakeDefaultCorpse src/Dodge/Data/Creature.hs 75;" C MakeSound src/Dodge/Data/ActionPlan.hs 43;" C MakeStartCloudAt src/Dodge/Data/WorldEffect.hs 30;" C @@ -1572,7 +1574,7 @@ Reload src/Dodge/Data/ActionPlan.hs 190;" C ReloadStatus src/Dodge/Data/Item/Use/Consumption.hs 20;" t RemoteDirectionPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 32;" C RemoteScreenLink src/Dodge/Data/ComposedItem.hs 24;" C -RemoteScreenSF src/Dodge/Data/ComposedItem.hs 38;" C +RemoteScreenSF src/Dodge/Data/ComposedItem.hs 39;" C RemoveEquipment src/Dodge/Data/RightButtonOptions.hs 36;" C RemoveShieldWall src/Dodge/Data/Item/Effect.hs 23;" C Remove_LOS src/Dodge/Data/Config.hs 77;" C @@ -1957,7 +1959,7 @@ Triangulate src/Geometry/Triangulate.hs 3;" m Trie src/SimpleTrie.hs 9;" t TriggerDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 1;" m TriggerLink src/Dodge/Data/ComposedItem.hs 17;" C -TriggerSF src/Dodge/Data/ComposedItem.hs 35;" C +TriggerSF src/Dodge/Data/ComposedItem.hs 36;" C TriggerType src/Dodge/Data/Item/Use.hs 68;" t TriggerType src/Dodge/Item/Weapon/TriggerType.hs 6;" m TurbineBaySS src/Dodge/Data/Scenario.hs 110;" C @@ -1977,7 +1979,7 @@ TwoHandUnder src/Dodge/Data/Item/Use.hs 189;" C Type src/Dodge/Data/Damage/Type.hs 6;" m Type src/Dodge/Terminal/Type.hs 1;" m Typical src/Shape/Data.hs 36;" C -UncomposableIsolateSF src/Dodge/Data/ComposedItem.hs 39;" C +UncomposableIsolateSF src/Dodge/Data/ComposedItem.hs 40;" C UnderGround src/Dodge/Data/Scenario.hs 78;" C UnderRoof src/Dodge/Data/Scenario.hs 79;" C UnderSea src/Dodge/Data/Scenario.hs 77;" C @@ -2109,9 +2111,9 @@ WdWdNegateTrig src/Dodge/Data/WorldEffect.hs 32;" C WdYouPos src/Dodge/Data/WorldEffect.hs 40;" C Weapon src/Dodge/Item/Weapon.hs 2;" m WeaponScopeLink src/Dodge/Data/ComposedItem.hs 22;" C -WeaponScopeSF src/Dodge/Data/ComposedItem.hs 33;" C +WeaponScopeSF src/Dodge/Data/ComposedItem.hs 34;" C WeaponTargetingLink src/Dodge/Data/ComposedItem.hs 23;" C -WeaponTargetingSF src/Dodge/Data/ComposedItem.hs 34;" C +WeaponTargetingSF src/Dodge/Data/ComposedItem.hs 35;" C Weapons src/Dodge/Item/Held/Weapons.hs 1;" m West src/Dodge/Data/CardinalPoint.hs 7;" C West8 src/Dodge/Data/CardinalPoint.hs 17;" C @@ -2563,8 +2565,8 @@ _hudElement src/Dodge/Data/HUD.hs 46;" f _humanoidAI src/Dodge/Data/Creature/Misc.hs 80;" f _iaLoaded src/Dodge/Data/Item/Use/Consumption.hs 22;" f _iaMax src/Dodge/Data/Item/Use/Consumption.hs 21;" f -_iatOrient src/Dodge/Data/ComposedItem.hs 51;" f -_iatType src/Dodge/Data/ComposedItem.hs 50;" f +_iatOrient src/Dodge/Data/ComposedItem.hs 53;" f +_iatType src/Dodge/Data/ComposedItem.hs 52;" f _ibtAmmoMag src/Dodge/Data/Item/Combine.hs 21;" f _ibtAttach src/Dodge/Data/Item/Combine.hs 20;" f _ibtBulletMod src/Dodge/Data/Item/Combine.hs 23;" f @@ -2662,9 +2664,9 @@ _lsID src/Dodge/Data/LightSource.hs 24;" f _lsParam src/Dodge/Data/LightSource.hs 25;" f _lsPos src/Dodge/Data/LightSource.hs 17;" f _lsRad src/Dodge/Data/LightSource.hs 18;" f -_luChildUpdate src/Dodge/Data/ComposedItem.hs 62;" f -_luLinkType src/Dodge/Data/ComposedItem.hs 60;" f -_luParentUpdate src/Dodge/Data/ComposedItem.hs 61;" f +_luChildUpdate src/Dodge/Data/ComposedItem.hs 64;" f +_luLinkType src/Dodge/Data/ComposedItem.hs 62;" f +_luParentUpdate src/Dodge/Data/ComposedItem.hs 63;" f _lwID src/Dodge/Data/LinearShockwave.hs 15;" f _lwPoints src/Dodge/Data/LinearShockwave.hs 16;" f _lwPos src/Dodge/Data/LinearShockwave.hs 14;" f @@ -3139,8 +3141,8 @@ _tractorBeams src/Dodge/Data/LWorld.hs 119;" f _trieChildren src/SimpleTrie.hs 11;" f _trieMVal src/SimpleTrie.hs 10;" f _triggers src/Dodge/Data/LWorld.hs 128;" f -_tryLeftLink src/Dodge/Data/ComposedItem.hs 55;" f -_tryRightLink src/Dodge/Data/ComposedItem.hs 56;" f +_tryLeftLink src/Dodge/Data/ComposedItem.hs 57;" f +_tryRightLink src/Dodge/Data/ComposedItem.hs 58;" f _ttDeathEffect src/Dodge/Data/Terminal.hs 84;" f _ttTriggerID src/Dodge/Data/Terminal.hs 83;" f _tuDir src/Dodge/Data/Machine.hs 61;" f @@ -3322,7 +3324,7 @@ airlockDoubleDoor src/Dodge/Room/Airlock.hs 54;" f airlockSimple src/Dodge/Room/Airlock.hs 66;" f airlockZ src/Dodge/Room/Airlock.hs 91;" f allHotkeys src/Dodge/Creature/YourControl.hs 60;" f -allInvLocs src/Dodge/Item/Grammar.hs 225;" f +allInvLocs src/Dodge/Item/Grammar.hs 245;" f allVisibleWalls src/Dodge/Base/Collide.hs 131;" f alongSegBy src/Geometry.hs 43;" f alteRifle src/Dodge/Item/Held/Cane.hs 65;" f @@ -3426,7 +3428,7 @@ baseBlockPane src/Dodge/Placement/Instance/Wall.hs 86;" f baseCaneShape src/Dodge/Item/Draw/SPic.hs 294;" f baseDebris src/Dodge/Block/Debris.hs 122;" f baseFloorTileSize src/Tile.hs 45;" f -basePCI src/Dodge/Item/Grammar.hs 110;" f +basePCI src/Dodge/Item/Grammar.hs 117;" f baseRifleShape src/Dodge/Item/Draw/SPic.hs 297;" f baseRodShape src/Dodge/Item/Draw/SPic.hs 381;" f baseSMGShape src/Dodge/Item/Draw/SPic.hs 364;" f @@ -4336,9 +4338,10 @@ geometryQuickCheckTests test/Spec.hs 55;" f geometryTests test/Spec.hs 17;" f geometryUnitTests test/Spec.hs 22;" f geqConstr src/SameConstr.hs 21;" f -getAmmoLinks src/Dodge/Item/Grammar.hs 81;" f +getAmmoLinks src/Dodge/Item/Grammar.hs 87;" f getArguments src/Dodge/Update/Scroll.hs 215;" f getArguments' src/Dodge/Update/Scroll.hs 203;" f +getAutoSpringLinks src/Dodge/Item/Grammar.hs 82;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulletTrajectory src/Dodge/HeldUse.hs 430;" f getBulletType src/Dodge/HeldUse.hs 404;" f @@ -4535,16 +4538,16 @@ intersectSegsSeg src/Geometry/Intersect.hs 232;" f intervalList src/Geometry.hs 329;" f interweave src/Justify.hs 17;" f intsToPos src/Dodge/Room/Modify/Girder.hs 160;" f -invAdj src/Dodge/Item/Grammar.hs 206;" f +invAdj src/Dodge/Item/Grammar.hs 226;" f invCursorParams src/Dodge/ListDisplayParams.hs 36;" f invDP src/Dodge/ListDisplayParams.hs 30;" f invDimColor src/Dodge/DisplayInventory.hs 220;" f invHead src/Dodge/Render/HUD.hs 391;" f invItemLocUpdate src/Dodge/Creature/State.hs 179;" f -invLDT src/Dodge/Item/Grammar.hs 186;" f +invLDT src/Dodge/Item/Grammar.hs 206;" f invRootItemEffs src/Dodge/Creature/State.hs 172;" f -invRootMap src/Dodge/Item/Grammar.hs 195;" f -invRootTrees src/Dodge/Item/Grammar.hs 216;" f +invRootMap src/Dodge/Item/Grammar.hs 215;" f +invRootTrees src/Dodge/Item/Grammar.hs 236;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 22;" f invShiftPointBy src/Dodge/ShiftPoint.hs 8;" f invSideEff src/Dodge/Creature/State.hs 166;" f @@ -4588,7 +4591,7 @@ isoMatrix src/MatrixHelper.hs 30;" f isotriBWH src/Geometry/Polygon.hs 20;" f itDim src/Dodge/Item/InvSize.hs 20;" f itInvHeight src/Dodge/Item/InvSize.hs 11;" f -itemBaseConnections src/Dodge/Item/Grammar.hs 114;" f +itemBaseConnections src/Dodge/Item/Grammar.hs 121;" f itemBaseName src/Dodge/Item/Display.hs 50;" f itemBlips src/Dodge/RadarSweep.hs 75;" f itemCombinations src/Dodge/Combine/Combinations.hs 55;" f @@ -4611,7 +4614,7 @@ itemSPic src/Dodge/Item/Draw/SPic.hs 34;" f itemScroll src/Dodge/Update/Scroll.hs 66;" f itemString src/Dodge/Item/Display.hs 47;" f itemToBreakLists src/Dodge/Item/Grammar.hs 50;" f -itemToFunction src/Dodge/Item/Grammar.hs 87;" f +itemToFunction src/Dodge/Item/Grammar.hs 93;" f itemTreeSPic src/Dodge/Item/Draw/SPic.hs 22;" f itemUpdate src/Dodge/Creature/State.hs 429;" f iterateUntil src/MonadHelp.hs 23;" f @@ -4622,7 +4625,7 @@ itmSpaceInfo src/Dodge/Item/Info.hs 18;" f itmUsageInfo src/Dodge/Item/Info.hs 185;" f jShape src/Dodge/Placement/Instance/LightSource.hs 85;" f jaggedShape src/Dodge/Block/Debris.hs 191;" f -joinItemsInList src/Dodge/Item/Grammar.hs 176;" f +joinItemsInList src/Dodge/Item/Grammar.hs 196;" f jps0' src/Dodge/LevelGen/PlacementHelper.hs 60;" f jps0PushPS src/Dodge/LevelGen/PlacementHelper.hs 63;" f jsps src/Dodge/LevelGen/PlacementHelper.hs 36;" f @@ -4655,7 +4658,7 @@ lasTunnel src/Dodge/Room/LasTurret.hs 123;" f lasTunnelRunPast src/Dodge/Room/LasTurret.hs 164;" f lasTurret src/Dodge/Placement/Instance/Turret.hs 23;" f laser src/Dodge/Item/Held/BatteryGuns.hs 48;" f -laserLinkTest src/Dodge/Item/Grammar.hs 119;" f +laserLinkTest src/Dodge/Item/Grammar.hs 127;" f lastMap src/Dodge/DoubleTree.hs 174;" f launcher src/Dodge/Item/Held/Launcher.hs 12;" f launcherCrit src/Dodge/Creature/LauncherCrit.hs 12;" f @@ -4673,9 +4676,9 @@ ldtToIM src/Dodge/DoubleTree.hs 143;" f ldtToIndentList src/Dodge/DoubleTree.hs 146;" f ldtToLoc src/Dodge/DoubleTree.hs 187;" f left src/DoubleStack.hs 16;" f -leftIsParentCombine src/Dodge/Item/Grammar.hs 146;" f +leftIsParentCombine src/Dodge/Item/Grammar.hs 166;" f leftPad src/Padding.hs 14;" f -leftRightCombine src/Dodge/Item/Grammar.hs 160;" f +leftRightCombine src/Dodge/Item/Grammar.hs 180;" f legsSPic src/Dodge/Item/Draw/SPic.hs 454;" f liShape src/Dodge/Placement/Instance/LightSource.hs 98;" f light src/Color.hs 104;" f @@ -4703,8 +4706,8 @@ listCursorChooseBorderScale src/Dodge/Render/List.hs 135;" f listGuard src/Dodge/Creature/ReaderUpdate.hs 188;" f listSelectionColorPicture src/Dodge/DisplayInventory.hs 346;" f litCorridor90 src/Dodge/Room/RoadBlock.hs 26;" f -llleft src/Dodge/Item/Grammar.hs 122;" f -llright src/Dodge/Item/Grammar.hs 128;" f +llleft src/Dodge/Item/Grammar.hs 130;" f +llright src/Dodge/Item/Grammar.hs 136;" f lmt src/MatrixHelper.hs 43;" f lnkBothAnd src/Dodge/Room/Procedural.hs 121;" f lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 380;" f @@ -5400,7 +5403,7 @@ rezText' src/Dodge/Story.hs 17;" f rhombus src/Polyhedra.hs 72;" f rifle src/Dodge/Item/Held/Cane.hs 55;" f right src/DoubleStack.hs 16;" f -rightIsParentCombine src/Dodge/Item/Grammar.hs 153;" f +rightIsParentCombine src/Dodge/Item/Grammar.hs 173;" f rightPad src/Padding.hs 22;" f rightPadNoSquash src/Padding.hs 26;" f rlPosDir src/Dodge/RoomLink.hs 94;" f @@ -5742,6 +5745,7 @@ spreadCenter src/Dodge/Base.hs 165;" f spreadFromCenter src/Dodge/Base.hs 154;" f spreadGunCrit src/Dodge/Creature/SpreadGunCrit.hs 12;" f spreadOut src/Dodge/Creature/Boid.hs 157;" f +springLinkTest src/Dodge/Item/Grammar.hs 148;" f sps src/Dodge/LevelGen/PlacementHelper.hs 30;" f sps0 src/Dodge/LevelGen/PlacementHelper.hs 42;" f square src/Geometry/Polygon.hs 46;" f @@ -5767,7 +5771,7 @@ ssfold src/FoldableHelp.hs 105;" f stackPicturesAt src/Dodge/Render/List.hs 98;" f stackPicturesAtOff src/Dodge/Render/List.hs 101;" f stackText src/Picture/Base.hs 188;" f -stackedInventory src/Dodge/Creature.hs 284;" f +stackedInventory src/Dodge/Creature.hs 286;" f startCr src/Dodge/Creature.hs 91;" f startCrafts src/Dodge/Room/Start.hs 92;" f startDrag src/Dodge/Update/Input/InGame.hs 256;" f @@ -5854,7 +5858,7 @@ teslaParams src/Dodge/Item/Held/BatteryGuns.hs 37;" f teslaParams src/Dodge/Tesla/ItemParams.hs 6;" f testCrossWalls src/Dodge/Room/Path.hs 47;" f testEvent src/Dodge/Event/Test.hs 10;" f -testInventory src/Dodge/Creature.hs 265;" f +testInventory src/Dodge/Creature.hs 267;" f testStringInit src/Dodge/TestString.hs 28;" f text src/Picture/Base.hs 193;" f textGrad src/Picture/Text.hs 5;" f @@ -5899,7 +5903,7 @@ toClosestMultiple src/HelpNum.hs 3;" f toColor8 src/Color.hs 148;" f toFloatVAs src/Shader/Compile.hs 211;" f toLabel src/Dodge/Cleat.hs 16;" f -toLasgunUpdate src/Dodge/Item/Grammar.hs 133;" f +toLasgunUpdate src/Dodge/Item/Grammar.hs 141;" f toMultiset src/Multiset.hs 64;" f toOnward src/Dodge/Tree/Compose.hs 101;" f toTopLeft src/Dodge/Render/List.hs 219;" f