From a464d4dc38f2200e7ae7672c01f35b94fee3bad2 Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 22 Jan 2026 21:19:40 +0000 Subject: [PATCH] Improve wrist forcefield positioning Not perfect for left wrist when aiming two handed twist weapons --- src/Dodge/Creature/Impulse/UseItem.hs | 2 +- src/Dodge/Debug.hs | 2 +- src/Dodge/Equipment.hs | 63 ---------- src/Dodge/Euse.hs | 114 ++++++++++++++---- src/Dodge/Inventory.hs | 2 +- src/Dodge/ListDisplayParams.hs | 2 +- src/Dodge/Update.hs | 3 +- tags | 164 +++++++++++++------------- 8 files changed, 178 insertions(+), 174 deletions(-) delete mode 100644 src/Dodge/Equipment.hs diff --git a/src/Dodge/Creature/Impulse/UseItem.hs b/src/Dodge/Creature/Impulse/UseItem.hs index 6514a4d97..820ff5eb6 100644 --- a/src/Dodge/Creature/Impulse/UseItem.hs +++ b/src/Dodge/Creature/Impulse/UseItem.hs @@ -2,6 +2,7 @@ module Dodge.Creature.Impulse.UseItem (useItem) where +import Dodge.Euse import NewInt import Control.Lens import Data.Maybe @@ -9,7 +10,6 @@ import Dodge.Data.ComposedItem import Dodge.Data.DoubleTree import Dodge.Data.World import Dodge.DoubleTree -import Dodge.Equipment import Dodge.HeldUse import Dodge.Inventory import Dodge.Item.Grammar diff --git a/src/Dodge/Debug.hs b/src/Dodge/Debug.hs index 7446db330..3ca3be67a 100644 --- a/src/Dodge/Debug.hs +++ b/src/Dodge/Debug.hs @@ -258,7 +258,7 @@ showMuzzlePositions u = fold $ do ^? ix invid . _2 return . color red $ setLayer DebugLayer $ reduceLocDT (f cr) loc where - f cr loc = foldMap g $ map (muzzlePos loc cr) (itemMuzzles $ loc ^. locDT . dtValue . _1) + f cr loc = foldMap (g . muzzlePos loc cr) (itemMuzzles $ loc ^. locDT . dtValue . _1) where g :: Point3Q -> Picture g pq = translate3 (pq ^. _1) $ crossPic 5 diff --git a/src/Dodge/Equipment.hs b/src/Dodge/Equipment.hs deleted file mode 100644 index 71c14b4bb..000000000 --- a/src/Dodge/Equipment.hs +++ /dev/null @@ -1,63 +0,0 @@ -module Dodge.Equipment ( - effectOnRemove, - effectOnEquip, -) where - -import Control.Lens -import Dodge.Creature.HandPos -import Dodge.Data.World -import Dodge.Item.Location -import Dodge.Wall.Delete -import Dodge.Wall.ForceField -import Dodge.Wall.Move -import Geometry -import qualified IntMapHelp as IM -import Linear -import NewInt - -effectOnRemove :: Item -> Creature -> World -> World -effectOnRemove itm = case itm ^. itType of - EQUIP WRISTARMOUR -> onRemoveWristShield itm - _ -> const id - -onRemoveWristShield :: Item -> Creature -> World -> World -onRemoveWristShield itm _ = - (pointerToItem itm . itParams .~ NoParams) - . maybe id deleteWallID (itm ^? itParams . itParamID) - -effectOnEquip :: Item -> Creature -> World -> World -effectOnEquip itm = case itm ^. itType of - EQUIP WRISTARMOUR -> onEquipWristShield itm - _ -> const id - -onEquipWristShield :: Item -> Creature -> World -> World -onEquipWristShield itm cr w = - w - & pointerToItem itm . itParams .~ ItemParamID i - & cWorld . lWorld . walls . at i ?~ forceField{_wlID = i} - & setWristShieldPos - ( itm & itParams .~ ItemParamID{_itParamID = i} - ) - cr - where - i = IM.newKey (w ^. cWorld . lWorld . walls) - -setWristShieldPos :: Item -> Creature -> World -> World -setWristShieldPos itm cr w = w & moveWallIDUnsafe i wlline - where - i = _itParamID $ _itParams itm - wlline = (f (V3 (-10) 7 0), f (V3 10 7 0)) - handtrans = case w - ^? cWorld - . lWorld - . items - . ix (itm ^. itID . unNInt) - . itLocation - . ilEquipSite - . _Just of - Just x -> translateToES cr x -- . g - _ -> undefined - -- g - -- | twists cr = (+.+.+ V3 (-5) 10 0) - -- | otherwise = id - f = (+.+ cr ^. crPos . _xy) . stripZ . rotate3 (_crDir cr) . handtrans diff --git a/src/Dodge/Euse.hs b/src/Dodge/Euse.hs index a3ce9a297..e0dc4669e 100644 --- a/src/Dodge/Euse.hs +++ b/src/Dodge/Euse.hs @@ -1,22 +1,25 @@ -module Dodge.Euse (equipBackgroundEffect) where +module Dodge.Euse ( + equipBackgroundEffect, + effectOnRemove, + effectOnEquip, +) where import Dodge.Creature.HandPos -import Dodge.Creature.Test import Dodge.Data.ComposedItem import Dodge.Data.DoubleTree import Dodge.Data.Equipment.Misc import Dodge.Data.World +import Dodge.Item.Location +import Dodge.Wall.Delete +import Dodge.Wall.ForceField import Dodge.Wall.Move import Geometry +import qualified IntMapHelp as IM import LensHelp import Linear +import NewInt -equipBackgroundEffect :: - LocationDT OItem -> - Creature -> - EquipSite -> - World -> - World +equipBackgroundEffect :: LocationDT OItem -> Creature -> EquipSite -> World -> World equipBackgroundEffect loc cr = case eo of EQUIP (MAGSHIELD mt) -> const $ useMagShield mt itm cr EQUIP WRISTARMOUR -> setWristShieldPos itm cr @@ -29,28 +32,31 @@ equipBackgroundEffect loc cr = case eo of -- this should probably drain energy useMagShield :: MagnetBuBu -> Item -> Creature -> World -> World useMagShield mt _ cr w = - w & cWorld . lWorld . magnets + w + & cWorld + . lWorld + . magnets .:~ Magnet { _mgPos = cr ^. crPos . _xy , _mgField = mt } -setWristShieldPos :: Item -> Creature -> EquipSite -> World -> World -setWristShieldPos itm cr x = moveWallIDUnsafe i wlline - where - i = _itParamID $ _itParams itm - wlline = (f (V3 (-10) 7 0), f (V3 10 7 0)) - handtrans = case x of - OnLeftWrist -> \cr' -> translatePointToLeftHand cr' . g - _ -> translatePointToRightHand - g - | twists cr = (+.+.+ V3 (-5) 10 0) - | otherwise = id - f = (+.+ cr ^. crPos . _xy) . stripZ . rotate3 (_crDir cr) . handtrans cr +--setWristShieldPos :: Item -> Creature -> EquipSite -> World -> World +--setWristShieldPos itm cr x = moveWallIDUnsafe i wlline +-- where +-- i = _itParamID $ _itParams itm +-- wlline = (f (V3 (-10) 7 0), f (V3 10 7 0)) +-- handtrans = case x of +-- OnLeftWrist -> \cr' -> translatePointToLeftHand cr' . g +-- _ -> translatePointToRightHand +-- g +-- | twists cr = (+.+.+ V3 (-5) 10 0) +-- | otherwise = id +-- f = (+.+ cr ^. crPos . _xy) . stripZ . rotate3 (_crDir cr) . handtrans cr -- TODO the reflection should be controled by the particle ---shieldWallDamage :: Damage -> Wall -> Int -> World -> World ---shieldWallDamage dm _ crid w = case _dmType dm of +-- shieldWallDamage :: Damage -> Wall -> Int -> World -> World +-- shieldWallDamage dm _ crid w = case _dmType dm of ---- Lasering -> w -- _ | isMovementDam dm -> w & creatures . ix crid . crState . crDamage .:~ dm -- _ -> w @@ -58,7 +64,9 @@ setWristShieldPos itm cr x = moveWallIDUnsafe i wlline createHeadLamp :: Item -> Creature -> World -> World createHeadLamp _ cr w = w - & cWorld . lWorld . lights + & cWorld + . lWorld + . lights .:~ LSParam ( _crPos cr +.+.+ rotate3 @@ -67,3 +75,61 @@ createHeadLamp _ cr w = ) 200 0.7 + +effectOnRemove :: Item -> Creature -> World -> World +effectOnRemove itm = case itm ^. itType of + EQUIP WRISTARMOUR -> onRemoveWristShield itm + _ -> const id + +onRemoveWristShield :: Item -> Creature -> World -> World +onRemoveWristShield itm _ = + (pointerToItem itm . itParams .~ NoParams) + . maybe id deleteWallID (itm ^? itParams . itParamID) + +effectOnEquip :: Item -> Creature -> World -> World +effectOnEquip itm = case itm ^. itType of + EQUIP WRISTARMOUR -> onEquipWristShield itm + _ -> const id + +onEquipWristShield :: Item -> Creature -> World -> World +onEquipWristShield itm cr w = + w + & pointerToItem itm + . itParams + .~ ItemParamID i + & cWorld + . lWorld + . walls + . at i + ?~ forceField{_wlID = i} + & setWristShieldPos + ( itm & itParams .~ ItemParamID{_itParamID = i} + ) + cr esite + where + i = IM.newKey (w ^. cWorld . lWorld . walls) + esite = w ^?! cWorld . lWorld . items . ix (itm ^. itID . unNInt) . itLocation . ilEquipSite . _Just + +setWristShieldPos :: Item -> Creature -> EquipSite -> World -> World +setWristShieldPos itm cr esite w = w & moveWallIDUnsafe i wlline + where + i = _itParamID $ _itParams itm + wlline = (f (V3 (-10) y 0), f (V3 10 y 0)) + y = case esite of + OnLeftWrist -> 7 + OnRightWrist -> -7 + _ -> error "setWristShieldPos esite is not a wrist" + handtrans = case w + ^? cWorld + . lWorld + . items + . ix (itm ^. itID . unNInt) + . itLocation + . ilEquipSite + . _Just of + Just x -> translateToES cr x -- . g + _ -> undefined + -- g + -- | twists cr = (+.+.+ V3 (-5) 10 0) + -- | otherwise = id + f = (+.+ cr ^. crPos . _xy) . stripZ . rotate3 (_crDir cr) . handtrans diff --git a/src/Dodge/Inventory.hs b/src/Dodge/Inventory.hs index a759f485e..0c528ffb4 100644 --- a/src/Dodge/Inventory.hs +++ b/src/Dodge/Inventory.hs @@ -16,13 +16,13 @@ module Dodge.Inventory ( destroyAllInvItems, ) where +import Dodge.Euse import Linear import Data.Function import Data.Maybe import Dodge.Base import Dodge.Data.SelectionList import Dodge.Data.World -import Dodge.Equipment import Dodge.Inventory.Location import Dodge.Inventory.RBList import Dodge.Inventory.Swap diff --git a/src/Dodge/ListDisplayParams.hs b/src/Dodge/ListDisplayParams.hs index faf533445..b23766596 100644 --- a/src/Dodge/ListDisplayParams.hs +++ b/src/Dodge/ListDisplayParams.hs @@ -38,7 +38,7 @@ invCursorParams w = BoundCurs $ case w ^? hud . subInventory of Just CombineInventory{} -> [] _ | ButtonRight `M.member` _mouseButtons (_input w) - && (null $ w ^? rbState . opSel) -> + && null (w ^? rbState . opSel) -> [North, South, East, West] _ -> [North, South, West] diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index a3c7ea9cd..812e64404 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -258,8 +258,8 @@ functionalUpdate = . over (uvWorld . cWorld . lWorld) updateMagnets . over uvWorld (cWorld . lWorld . lClock +~ 1) . over uvWorld updateDistortions - . over uvWorld pushYouOutFromWalls . over uvWorld updateCreatureSoundPositions + . over uvWorld pushYouOutFromWalls . over uvWorld updateCreatureStrides . colCrsWalls . over uvWorld simpleCrSprings @@ -327,6 +327,7 @@ muzzleWallCheck w cr = fromMaybe cr $ do ^? ix invid . _2 let ps = reduceLocDT f loc ^.. each . _1 . _xy cp = cr ^. crPos . _xy +-- cop = cr ^. crOldPos . _xy r <- boundPointsRect (cp : ps) let wls = uncurry wlsNearRect r w & filter (not . _wlTouchThrough) vs = mapMaybe (g cp wls) ps diff --git a/tags b/tags index d5b11630c..6a14a86ec 100644 --- a/tags +++ b/tags @@ -2557,7 +2557,7 @@ addToTrunk src/TreeHelp.hs 157;" f addWarningTerminal src/Dodge/Room/Warning.hs 81;" f addZ src/Geometry/Vector3D.hs 89;" f adjustIMZone src/Dodge/Base.hs 81;" f -advanceScrollAmount src/Dodge/Update.hs 453;" f +advanceScrollAmount src/Dodge/Update.hs 454;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 33;" f aimDelaySweep src/Dodge/Render/Picture.hs 285;" f aimStanceInfo src/Dodge/Item/Info.hs 243;" f @@ -2688,9 +2688,9 @@ basicCrShape src/Dodge/Creature/Picture.hs 36;" f basicItemDisplay src/Dodge/Item/Display.hs 23;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMuzFlare src/Dodge/HeldUse.hs 713;" f -battery src/Dodge/Item/Ammo.hs 58;" f +battery src/Dodge/Item/Ammo.hs 59;" f batteryPack src/Dodge/Item/Equipment.hs 38;" f -beltMag src/Dodge/Item/Ammo.hs 36;" f +beltMag src/Dodge/Item/Ammo.hs 37;" f bfsThenReturn src/Dodge/Creature/ReaderUpdate.hs 226;" f bgateCalc src/Dodge/Inventory/SelectionList.hs 115;" f bgunSound src/Dodge/HeldUse.hs 517;" f @@ -2757,7 +2757,7 @@ bulletBeltBracer src/Dodge/Item/Equipment.hs 56;" f bulletBeltPack src/Dodge/Item/Equipment.hs 50;" f bulletModule src/Dodge/Item/Scope.hs 122;" f bulletPayloadModule src/Dodge/Item/Scope.hs 137;" f -bulletSynthesizer src/Dodge/Item/Ammo.hs 80;" f +bulletSynthesizer src/Dodge/Item/Ammo.hs 81;" f bulletWeapons src/Dodge/Combine/Combinations.hs 248;" f burstRifle src/Dodge/Item/Held/Cane.hs 30;" f buttonFlip src/Dodge/Button/Event.hs 17;" f @@ -2770,7 +2770,7 @@ calcTexCoord src/Tile.hs 19;" f canSee src/Dodge/Base/Collide.hs 328;" f canSeeIndirect src/Dodge/Base/Collide.hs 335;" f cancelExamineInventory src/Dodge/Item/BackgroundEffect.hs 23;" f -capacitor src/Dodge/Item/Ammo.hs 65;" f +capacitor src/Dodge/Item/Ammo.hs 66;" f card8Vec src/Dodge/Base/CardinalPoint.hs 17;" f cardList src/Dodge/Base/CardinalPoint.hs 7;" f cardVec src/Dodge/Base/CardinalPoint.hs 10;" f @@ -2804,17 +2804,17 @@ checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkConnection src/Dodge/Inventory/Swap.hs 66;" f checkDeath src/Dodge/Creature/Update.hs 73;" f checkDeath' src/Dodge/Creature/Update.hs 76;" f -checkEndGame src/Dodge/Update.hs 806;" f +checkEndGame src/Dodge/Update.hs 807;" 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 365;" f +checkTermDist src/Dodge/Update.hs 366;" 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 -chemFuelPouch src/Dodge/Item/Ammo.hs 72;" f +chemFuelPouch src/Dodge/Item/Ammo.hs 73;" f chestPQ src/Dodge/Creature/HandPos.hs 125;" f chooseCursorBorders src/Dodge/Render/List.hs 141;" f chooseEquipPosition src/Dodge/Inventory/RBList.hs 41;" f @@ -2932,7 +2932,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 916;" f +crCrSpring src/Dodge/Update.hs 917;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 62;" f crDeathSounds src/Dodge/Creature/Vocalization.hs 44;" f crDexterity src/Dodge/Creature/Statistics.hs 19;" f @@ -2964,7 +2964,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 913;" f +crSpring src/Dodge/Update.hs 914;" f crStratConMatches src/Dodge/Creature/Test.hs 80;" f crStrength src/Dodge/Creature/Statistics.hs 29;" f crUpdate src/Dodge/Creature/Update.hs 66;" f @@ -2979,7 +2979,7 @@ craftItemSPic src/Dodge/Item/Draw/SPic.hs 40;" f crankSlowS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 597;" f createForceField src/Dodge/ForceField.hs 7;" f createGas src/Dodge/Gas.hs 10;" f -createHeadLamp src/Dodge/Euse.hs 58;" f +createHeadLamp src/Dodge/Euse.hs 68;" f createItemYou src/Dodge/Inventory/Add.hs 62;" f createLightMap src/Render.hs 26;" f createProjectile src/Dodge/HeldUse.hs 1271;" f @@ -3180,7 +3180,7 @@ displayFrameTicks src/Dodge/Render/Picture.hs 50;" f displayFreeSlots src/Dodge/DisplayInventory.hs 196;" f displayIndents src/Dodge/DisplayInventory.hs 110;" f displayPulse src/Dodge/Inventory/SelectionList.hs 176;" f -displayTerminalLineString src/Dodge/Update.hs 518;" f +displayTerminalLineString src/Dodge/Update.hs 519;" f dist src/Geometry/Vector.hs 185;" f dist3 src/Geometry/Vector3D.hs 101;" f distributeAmmoToItem src/Dodge/WorldEffect.hs 152;" f @@ -3259,7 +3259,7 @@ 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 462;" f +doWorldEvents src/Dodge/Update.hs 463;" 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 @@ -3427,8 +3427,8 @@ ebEffect src/Dodge/EnergyBall.hs 45;" f ebFlicker src/Dodge/EnergyBall.hs 70;" f ebtToDamage src/Dodge/EnergyBall.hs 93;" f edgeToPic src/Dodge/Debug/Picture.hs 417;" f -effectOnEquip src/Dodge/Equipment.hs 28;" f -effectOnRemove src/Dodge/Equipment.hs 18;" f +effectOnEquip src/Dodge/Euse.hs 91;" f +effectOnRemove src/Dodge/Euse.hs 81;" f eitType src/Dodge/Data/EquipType.hs 15;" f ejectS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 837;" f elecCrackleS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 821;" f @@ -3451,7 +3451,7 @@ eqPosText src/Dodge/Equipment/Text.hs 5;" f eqTypeToSites src/Dodge/Inventory/RBList.hs 77;" f equipAllocString src/Dodge/Render/HUD.hs 316;" f equipAttachPos src/Dodge/Item/Draw.hs 30;" f -equipBackgroundEffect src/Dodge/Euse.hs 14;" f +equipBackgroundEffect src/Dodge/Euse.hs 23;" f equipInfo src/Dodge/Item/Info.hs 141;" f equipItemSPic src/Dodge/Item/Draw/SPic.hs 158;" f equipPosition src/Dodge/Item/Draw.hs 38;" f @@ -3575,7 +3575,7 @@ gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f gameRoomsFromRooms src/Dodge/Layout.hs 149;" f gameplayMenu src/Dodge/Menu.hs 152;" f gameplayMenuOptions src/Dodge/Menu.hs 155;" f -gasEffect src/Dodge/Update.hs 831;" f +gasEffect src/Dodge/Update.hs 832;" f gasType src/Dodge/HeldUse.hs 1110;" f gassesNearPoint src/Dodge/Zoning/Cloud.hs 12;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 23;" f @@ -3601,7 +3601,7 @@ getCommands src/Dodge/Terminal.hs 58;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f getCrsFromRooms src/Dodge/Room/Tutorial.hs 351;" f getCrsFromRooms' src/Dodge/Room/Tutorial.hs 338;" f -getDebugMouseOver src/Dodge/Update.hs 423;" f +getDebugMouseOver src/Dodge/Update.hs 424;" f getDistortions src/Dodge/Render.hs 443;" f getEdgesCrossing src/Dodge/Path.hs 37;" f getGrenadeHitEffect src/Dodge/HeldUse.hs 1259;" f @@ -3612,7 +3612,7 @@ getLaserDamage src/Dodge/HeldUse.hs 707;" f getLaserPhaseV src/Dodge/HeldUse.hs 704;" f getLinksOfType src/Dodge/RoomLink.hs 41;" f getMaxLinesTM src/Dodge/Terminal/Type.hs 6;" f -getMenuMouseContext src/Dodge/Update.hs 435;" f +getMenuMouseContext src/Dodge/Update.hs 436;" f getNodePos src/Dodge/Path.hs 34;" f getPJStabiliser src/Dodge/HeldUse.hs 1246;" f getPretty src/AesonHelp.hs 8;" f @@ -3629,7 +3629,7 @@ getVolleyBurst src/Dodge/HeldUse.hs 128;" f getWallPathing src/Dodge/Wall/Pathing.hs 7;" f getWallSPic src/Dodge/Render/Walls.hs 61;" f getWindowSize src/Dodge/WindowSize.hs 6;" f -gimbal src/Dodge/Item/Scope.hs 166;" f +gimbal src/Dodge/Item/Scope.hs 164;" f girder src/Dodge/Room/Foreground.hs 206;" f girderV src/Dodge/Room/Foreground.hs 177;" f girderV' src/Dodge/Room/Foreground.hs 153;" f @@ -3668,7 +3668,7 @@ gut3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 683;" f gut4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 695;" f gut5S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 673;" f gut6S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 721;" f -gyroscope src/Dodge/Item/Scope.hs 172;" f +gyroscope src/Dodge/Item/Scope.hs 170;" f hackBoldText src/Picture/Base.hs 193;" f hackDropShadow src/Picture/Base.hs 196;" f hackInvertText src/Picture/Base.hs 189;" f @@ -3848,7 +3848,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 443;" f +isOverTerminalScreen src/Dodge/Update.hs 444;" f isPulseLaser src/Dodge/IsPulseLaser.hs 10;" f isPutID src/Dodge/Placement/Instance/Wall.hs 108;" f isRHS src/Geometry/LHS.hs 32;" f @@ -4148,8 +4148,8 @@ mcShootLaser src/Dodge/HeldUse.hs 1157;" f mcTypeUpdate src/Dodge/Machine/Update.hs 33;" f mcUseHeld src/Dodge/HeldUse.hs 1081;" f mcUseItem src/Dodge/Machine/Update.hs 111;" f -megaBattery src/Dodge/Item/Ammo.hs 52;" f -megaShellMag src/Dodge/Item/Ammo.hs 42;" f +megaBattery src/Dodge/Item/Ammo.hs 53;" f +megaShellMag src/Dodge/Item/Ammo.hs 43;" f megaTinMag src/Dodge/Item/Ammo.hs 20;" f meleeHeadingMove src/Dodge/Creature/Boid.hs 295;" f memoBoxEdgeIndices src/Shader/Poke.hs 352;" f @@ -4243,7 +4243,7 @@ muzzleWallCheck src/Dodge/Update.hs 323;" 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 822;" f +mvGust src/Dodge/Update.hs 823;" f mvLS src/Dodge/Placement/PlaceSpot.hs 219;" f mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f mvPointMeleeTarg src/Dodge/Creature/Boid.hs 327;" f @@ -4295,8 +4295,8 @@ numTraversable src/TreeHelp.hs 184;" f obstacleColor src/Dodge/Debug/Picture.hs 264;" f obstructPathsCrossing src/Dodge/Path.hs 120;" f oldMachineBootS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 635;" f -onEquipWristShield src/Dodge/Equipment.hs 33;" f -onRemoveWristShield src/Dodge/Equipment.hs 23;" f +onEquipWristShield src/Dodge/Euse.hs 96;" f +onRemoveWristShield src/Dodge/Euse.hs 86;" f onXY src/Geometry/Vector3D.hs 130;" f oneH src/Dodge/Creature/Test.hs 96;" f openConsole src/Dodge/Update.hs 139;" f @@ -4355,7 +4355,7 @@ pauseMenu src/Dodge/Menu.hs 57;" f pauseMenuOptions src/Dodge/Menu.hs 64;" f pauseSound src/Dodge/SoundLogic.hs 42;" f pauseTime src/Dodge/Update.hs 196;" f -pbFlicker src/Dodge/Update.hs 503;" f +pbFlicker src/Dodge/Update.hs 504;" 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 @@ -4562,7 +4562,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 902;" f +radiusSpring src/Dodge/Update.hs 903;" 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 @@ -4584,7 +4584,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 678;" f +randWallReflect src/Dodge/Update.hs 679;" f randomChallenges src/Dodge/Room/Start.hs 63;" f randomCompass src/Dodge/Layout.hs 60;" f randomFourCornerRoom src/Dodge/Room/Procedural.hs 246;" f @@ -4846,7 +4846,7 @@ 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 537;" f +setOldPos src/Dodge/Update.hs 538;" f setOutLinks src/Dodge/RoomLink.hs 50;" f setOutLinksByType src/Dodge/RoomLink.hs 75;" f setOutLinksPD src/Dodge/RoomLink.hs 95;" f @@ -4866,8 +4866,8 @@ setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f setViewport src/Dodge/Render.hs 448;" f setVol src/Dodge/Config.hs 47;" f setWindowColor src/Dodge/Render/Walls.hs 32;" f -setWristShieldPos src/Dodge/Equipment.hs 45;" f -setWristShieldPos src/Dodge/Euse.hs 38;" f +setWristShieldPos src/Dodge/Euse.hs 48;" f +setWristShieldPos' src/Dodge/Euse.hs 108;" f setupConLoop src/Loop.hs 103;" f setupConLoop' src/Loop.hs 193;" f setupFramebuffer2GivenStencil src/Framebuffer/Setup.hs 46;" f @@ -4888,7 +4888,7 @@ shellExplosionCheck src/Dodge/Projectile/Update.hs 50;" f shellHitCreature src/Dodge/Projectile/Update.hs 84;" f shellHitFloor src/Dodge/Projectile/Update.hs 98;" f shellHitWall src/Dodge/Projectile/Update.hs 60;" f -shellMag src/Dodge/Item/Ammo.hs 45;" f +shellMag src/Dodge/Item/Ammo.hs 46;" f shellModule src/Dodge/Item/Scope.hs 128;" f shellShape src/Dodge/Projectile/Draw.hs 35;" f shieldWall src/Dodge/Item/BackgroundEffect.hs 91;" f @@ -4947,7 +4947,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 907;" f +simpleCrSprings src/Dodge/Update.hs 908;" f simpleTermMessage src/Dodge/Terminal.hs 275;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 757;" f sineRaisePitchTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 793;" f @@ -4977,7 +4977,7 @@ slideDoorS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 629;" f slideWindow src/ListHelp.hs 81;" f slowDoorRoom src/Dodge/Room/LongDoor.hs 140;" f slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 157;" f -smallBattery src/Dodge/Item/Ammo.hs 55;" f +smallBattery src/Dodge/Item/Ammo.hs 56;" f smallBranch src/Dodge/Tree/GenerateStructure.hs 32;" f smallChaseCrit src/Dodge/Creature/ChaseCrit.hs 14;" f smallDrawTree src/Dodge/LevelGen.hs 91;" f @@ -4989,7 +4989,7 @@ smallPillar src/Dodge/Room/Pillar.hs 37;" f smallRoom src/Dodge/Room/RunPast.hs 31;" f smallSnailInt2 src/Dodge/Path.hs 81;" f smg src/Dodge/Item/Held/Stick.hs 30;" f -smokeReducer src/Dodge/Item/Scope.hs 184;" f +smokeReducer src/Dodge/Item/Scope.hs 182;" f snailAround src/Dodge/Path.hs 78;" f snapToGrid src/Dodge/Path.hs 129;" f sndV2 src/Geometry/Data.hs 73;" f @@ -5325,7 +5325,7 @@ twoStepSlowS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 649;" f ubyteSize src/Shader/Parameters.hs 13;" f ugateCalc src/Dodge/Inventory/SelectionList.hs 109;" f uncurryV src/Geometry/Data.hs 66;" f -underBarrelSlot src/Dodge/Item/Scope.hs 178;" f +underBarrelSlot src/Dodge/Item/Scope.hs 176;" f unfoldrMID src/MonadHelp.hs 33;" f unigate src/Dodge/Item/Scope.hs 108;" f unitVectorAtAngle src/Geometry/Vector.hs 101;" f @@ -5341,7 +5341,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 352;" f +updateAimPos src/Dodge/Update.hs 353;" f updateAllNodes src/TreeHelp.hs 86;" f updateArc src/Dodge/Tesla.hs 44;" f updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 484;" f @@ -5351,48 +5351,48 @@ updateBaseWheelEvent src/Dodge/Update/Scroll.hs 30;" 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 600;" f +updateBullets src/Dodge/Update.hs 601;" f updateCamera src/Dodge/Update/Camera.hs 31;" f updateCloseObjects src/Dodge/Inventory.hs 115;" f -updateCloud src/Dodge/Update.hs 835;" f -updateClouds src/Dodge/Update.hs 704;" f +updateCloud src/Dodge/Update.hs 836;" f +updateClouds src/Dodge/Update.hs 705;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 40;" f updateCombineSections src/Dodge/DisplayInventory.hs 47;" f updateCreature src/Dodge/Creature/Update.hs 35;" f updateCreature' src/Dodge/Creature/Update.hs 44;" f -updateCreatureGroups src/Dodge/Update.hs 572;" f -updateCreatureSoundPositions src/Dodge/Update.hs 551;" f -updateCreatureStride src/Dodge/Update.hs 346;" f -updateCreatureStrides src/Dodge/Update.hs 343;" f -updateDebris src/Dodge/Update.hs 607;" f +updateCreatureGroups src/Dodge/Update.hs 573;" f +updateCreatureSoundPositions src/Dodge/Update.hs 552;" f +updateCreatureStride src/Dodge/Update.hs 347;" f +updateCreatureStrides src/Dodge/Update.hs 344;" f +updateDebris src/Dodge/Update.hs 608;" f updateDebrisChunk src/Dodge/Prop/Moving.hs 16;" f updateDebugMessageOffset src/Dodge/Update.hs 103;" f -updateDelayedEvents src/Dodge/Update.hs 936;" f +updateDelayedEvents src/Dodge/Update.hs 937;" f updateDisplaySections src/Dodge/DisplayInventory.hs 116;" f updateDistortion src/Dodge/Distortion.hs 8;" f -updateDistortions src/Dodge/Update.hs 593;" f +updateDistortions src/Dodge/Update.hs 594;" f updateDoor src/Dodge/Door.hs 22;" f -updateDoors src/Dodge/Update.hs 357;" f -updateDust src/Dodge/Update.hs 882;" f -updateDusts src/Dodge/Update.hs 710;" f +updateDoors src/Dodge/Update.hs 358;" f +updateDust src/Dodge/Update.hs 883;" f +updateDusts src/Dodge/Update.hs 711;" 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 695;" f +updateEnergyBalls src/Dodge/Update.hs 696;" 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 692;" f +updateFlames src/Dodge/Update.hs 693;" 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 857;" f -updateGasses src/Dodge/Update.hs 707;" f -updateGusts src/Dodge/Update.hs 819;" f -updateIMl src/Dodge/Update.hs 566;" f -updateIMl' src/Dodge/Update.hs 569;" f +updateGas src/Dodge/Update.hs 858;" f +updateGasses src/Dodge/Update.hs 708;" f +updateGusts src/Dodge/Update.hs 820;" f +updateIMl src/Dodge/Update.hs 567;" f +updateIMl' src/Dodge/Update.hs 570;" 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 @@ -5405,32 +5405,32 @@ 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 469;" f +updateLasers src/Dodge/Update.hs 470;" 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 25;" f -updateMagnets src/Dodge/Update.hs 360;" f +updateMagnets src/Dodge/Update.hs 361;" f updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 204;" f -updateMouseContext src/Dodge/Update.hs 373;" f -updateMouseContextGame src/Dodge/Update.hs 378;" f +updateMouseContext src/Dodge/Update.hs 374;" f +updateMouseContextGame src/Dodge/Update.hs 379;" 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 584;" f -updateObjMapMaybe src/Dodge/Update.hs 577;" f -updatePastWorlds src/Dodge/Update.hs 458;" f +updateObjCatMaybes src/Dodge/Update.hs 585;" f +updateObjMapMaybe src/Dodge/Update.hs 578;" f +updatePastWorlds src/Dodge/Update.hs 459;" f updatePreload src/Preload/Update.hs 21;" f updateProjectile src/Dodge/Projectile/Update.hs 26;" f updatePulse src/Dodge/Creature/Update.hs 137;" f -updatePulseBall src/Dodge/Update.hs 483;" f -updatePulseLaser src/Dodge/Update.hs 647;" f -updatePulseLasers src/Dodge/Update.hs 478;" f +updatePulseBall src/Dodge/Update.hs 484;" f +updatePulseLaser src/Dodge/Update.hs 648;" f +updatePulseLasers src/Dodge/Update.hs 479;" f updateRBList src/Dodge/Inventory/RBList.hs 22;" f updateRadarBlip src/Dodge/RadarBlip.hs 11;" f -updateRadarBlips src/Dodge/Update.hs 596;" f +updateRadarBlips src/Dodge/Update.hs 597;" f updateRadarSweep src/Dodge/RadarSweep.hs 40;" f -updateRadarSweeps src/Dodge/Update.hs 698;" f +updateRadarSweeps src/Dodge/Update.hs 699;" f updateRandNode src/TreeHelp.hs 109;" f updateRenderSplit appDodge/Main.hs 104;" f updateRightParentSF src/Dodge/Item/Grammar.hs 181;" f @@ -5440,17 +5440,17 @@ updateScrollTestValue src/Dodge/ScrollValue.hs 6;" 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 689;" f +updateShockwaves src/Dodge/Update.hs 690;" 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 701;" f -updateTerminal src/Dodge/Update.hs 521;" f -updateTeslaArc src/Dodge/Update.hs 617;" f -updateTeslaArcs src/Dodge/Update.hs 614;" f +updateSparks src/Dodge/Update.hs 702;" f +updateTerminal src/Dodge/Update.hs 522;" f +updateTeslaArc src/Dodge/Update.hs 618;" f +updateTeslaArcs src/Dodge/Update.hs 615;" f updateTractorBeam src/Dodge/TractorBeam/Update.hs 9;" f -updateTractorBeams src/Dodge/Update.hs 686;" f +updateTractorBeams src/Dodge/Update.hs 687;" f updateTurret src/Dodge/Machine/Update.hs 56;" f updateUniverse src/Dodge/Update.hs 82;" f updateUniverseFirst src/Dodge/Update.hs 93;" f @@ -5461,7 +5461,7 @@ 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 21;" f -updateWheelEvents src/Dodge/Update.hs 448;" f +updateWheelEvents src/Dodge/Update.hs 449;" f updateWorldEventFlag src/Dodge/Update.hs 128;" f updateWorldEventFlags src/Dodge/Update.hs 116;" f upperBody src/Dodge/Creature/Picture.hs 121;" f @@ -5490,7 +5490,7 @@ useItem src/Dodge/Creature/Impulse/UseItem.hs 19;" f useItemLoc src/Dodge/Creature/Impulse/UseItem.hs 26;" f useLnkRoomPos src/Dodge/PlacementSpot.hs 255;" f useLoadedAmmo src/Dodge/HeldUse.hs 723;" f -useMagShield src/Dodge/Euse.hs 30;" f +useMagShield src/Dodge/Euse.hs 40;" f useNormalCamera src/Dodge/Camera.hs 6;" f usePayload src/Dodge/Payload.hs 18;" f useRewindGun src/Dodge/HeldUse.hs 1337;" f @@ -5636,11 +5636,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 510;" f +zoneClouds src/Dodge/Update.hs 511;" f zoneCreature src/Dodge/Zoning/Creature.hs 56;" f -zoneCreatures src/Dodge/Update.hs 547;" f +zoneCreatures src/Dodge/Update.hs 548;" f zoneDust src/Dodge/Zoning/Cloud.hs 57;" f -zoneDusts src/Dodge/Update.hs 515;" f +zoneDusts src/Dodge/Update.hs 516;" 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