diff --git a/src/Dodge/Block/Debris.hs b/src/Dodge/Block/Debris.hs index 29b2a84e8..5e36014ab 100644 --- a/src/Dodge/Block/Debris.hs +++ b/src/Dodge/Block/Debris.hs @@ -7,6 +7,7 @@ module Dodge.Block.Debris ( makeDebrisDirected, ) where +import Dodge.ShiftPoint import Color import Data.Foldable import qualified Data.IntSet as IS @@ -24,7 +25,8 @@ import Shape makeDoorDebris :: Door -> World -> World makeDoorDebris dr w = w & makeDebris mt col p where - p = uncurry midPoint (_drPos dr) + p2a = lerpP2A (dr ^. drZeroPos) (dr ^. drOnePos) (dr ^. drLerp) + p = centroid . fmap fst $ (dr ^. drFootPrint) & each . each %~ shiftPointBy p2a (mt, col) = fromMaybe (Stone, greyN 0.5) $ do wlids <- w ^? cWorld . lWorld . doors . ix (_drID dr) . drWallIDs (wlid, _) <- IS.minView wlids diff --git a/src/Dodge/Data/Door.hs b/src/Dodge/Data/Door.hs index c03f427cc..382323e39 100644 --- a/src/Dodge/Data/Door.hs +++ b/src/Dodge/Data/Door.hs @@ -18,8 +18,8 @@ import Dodge.Data.WorldEffect import Geometry.Data import qualified Data.IntMap.Strict as IM -data DoorStatus = DoorOpen | DoorClosed | DoorHalfway | DoorInt Int - deriving Eq +--data DoorStatus = DoorOpen | DoorClosed | DoorHalfway | DoorInt Int +-- deriving Eq data PushSource = PushesItself @@ -30,12 +30,8 @@ data PushSource data Door = Door { _drID :: Int , _drWallIDs :: IS.IntSet - , _drStatus :: DoorStatus , _drTrigger :: WdBl , _drMech :: DrWdWd - , _drPos :: (Point2, Point2) - , _drOpenPos :: (Point2, Point2) - , _drClosePos :: (Point2, Point2) , _drZeroPos :: (Point2,Float) , _drOnePos :: (Point2,Float) , _drLerp :: Float @@ -51,6 +47,6 @@ data Door = Door } makeLenses ''Door -deriveJSON defaultOptions ''DoorStatus +--deriveJSON defaultOptions ''DoorStatus deriveJSON defaultOptions ''PushSource deriveJSON defaultOptions ''Door diff --git a/src/Dodge/Default/Door.hs b/src/Dodge/Default/Door.hs index 49a57acdc..e68c6f37e 100644 --- a/src/Dodge/Default/Door.hs +++ b/src/Dodge/Default/Door.hs @@ -31,12 +31,12 @@ defaultDoor = Door { _drID = 0 , _drWallIDs = mempty - , _drStatus = DoorClosed +-- , _drStatus = DoorClosed , _drTrigger = WdBlConst False , _drMech = DrWdId - , _drPos = (0, 0) - , _drOpenPos = (0, 0) - , _drClosePos = (0, 0) +-- , _drPos = (0, 0) +-- , _drOpenPos = (0, 0) +-- , _drClosePos = (0, 0) , _drZeroPos = (0,0) , _drOnePos = (0,0) , _drLerp = 0 diff --git a/src/Dodge/DrWdWd.hs b/src/Dodge/DrWdWd.hs index a28d2acac..6807caf0d 100644 --- a/src/Dodge/DrWdWd.hs +++ b/src/Dodge/DrWdWd.hs @@ -1,15 +1,13 @@ module Dodge.DrWdWd (doDrWdWd) where -import Dodge.Wall.Move -import Dodge.ShiftPoint -import Linear -import Data.IntMap.Merge.Strict import Control.Lens +import Data.Maybe import Dodge.Block.Debris import Dodge.Data.World +import Dodge.ShiftPoint import Dodge.SoundLogic +import Dodge.Wall.Move import Dodge.WorldBool -import Geometry doDrWdWd :: DrWdWd -> Door -> World -> World doDrWdWd dww = case dww of @@ -18,20 +16,15 @@ doDrWdWd dww = case dww of DoorLerp -> doorLerp doorLerp :: Door -> World -> World -doorLerp dr w = case newlerp of - Just x -> - w' x --- & cWorld . lWorld . walls %~ merge dropMissing preserveMissing f --- (wlposs x) - & moveUpdate +doorLerp dr w = fromMaybe w $ do + x <- newlerp + return $ + f x + & playSound x & cWorld . lWorld . doors . ix drid . drLerp .~ x - Nothing -> w where - w' = ifoldl' (\i v p -> moveWallID i p v) w . wlposs --- f = zipWithMatched $ \_ l wl -> wl & wlLine .~ l - (zp,za) = dr^. drZeroPos - (yp,ya) = dr^. drOnePos - p2a x = (zp + x *^ (yp - zp) , za + x * diffAngles ya za) + f = ifoldl' (flip . moveWallID) w . wlposs + p2a = lerpP2A (dr ^. drZeroPos) (dr ^. drOnePos) wlposs x = (dr ^. drFootPrint) & each . each %~ shiftPointBy (p2a x) clerp = dr ^. drLerp newlerp @@ -39,21 +32,10 @@ doorLerp dr w = case newlerp of | clerp > 0 && not toOpen = Just . max 0 $ clerp - speed | otherwise = Nothing toOpen = doWdBl (_drTrigger dr) w --- mvDir --- | toOpen && _drStatus dr == DoorOpen = Nothing -- Not sure why necessary --- | toOpen && dist dpos dop > 0.5 = Just $ vecBetweenSpeed speed dpos dop --- | dist dpos dcp > 0.5 = Just $ vecBetweenSpeed speed dpos dcp --- | otherwise = Nothing speed = _drSpeed dr drid = _drID dr - moveUpdate = playSound . setStatus - playSound - | _drPushedBy dr == PushesItself = soundContinue (WallSound drid) dpos slideDoorS (Just 1) + playSound x + | _drPushedBy dr == PushesItself = + soundContinue (WallSound drid) (fst $ p2a x) slideDoorS (Just 1) | otherwise = id - dpos = snd $ _drPos dr - dop = snd $ _drOpenPos dr - dcp = snd $ _drClosePos dr - setStatus - | dist dpos dop < 1 = cWorld . lWorld . doors . ix drid . drStatus .~ DoorOpen - | dist dpos dcp < 1 = cWorld . lWorld . doors . ix drid . drStatus .~ DoorClosed - | otherwise = cWorld . lWorld . doors . ix drid . drStatus .~ DoorHalfway +-- dpos = snd $ _drPos dr diff --git a/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs b/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs index 17646fa01..75cf15744 100644 --- a/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs +++ b/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs @@ -37,13 +37,8 @@ plDoor col eo cond l p1 p2 gw = (drid, over gwWorld addWalls $ gw & gwWorld . cW defaultDoor { _drID = drid , _drWallIDs = IS.fromList wlids - , _drStatus = DoorInt 0 , _drTrigger = cond - --, _drMech = DrWdMechanismStepwise nsteps wlids pss , _drMech = DoorLerp --- , _drPos = head pss --- , _drOpenPos = head pss --- , _drClosePos = last pss , _drZeroPos = p1 , _drOnePos = p2 , _drLerp = 0 @@ -102,12 +97,7 @@ plSlideDoor dr wl eo shiftOffset a b gw = dr { _drID = drid , _drWallIDs = IS.fromList wlids - , _drStatus = DoorClosed --- , _drMech = DoorMechanism , _drMech = DoorLerp - , _drPos = (a, b) - , _drOpenPos = (shiftLeft a, shiftLeft b) - , _drClosePos = (a, b) , _drZeroPos = (a, 0) , _drOnePos = (shiftLeft a, 0) , _drLerp = 0 diff --git a/src/Dodge/ShiftPoint.hs b/src/Dodge/ShiftPoint.hs index 5c61b7a2b..a1068d039 100644 --- a/src/Dodge/ShiftPoint.hs +++ b/src/Dodge/ShiftPoint.hs @@ -3,6 +3,7 @@ module Dodge.ShiftPoint where import Geometry +import Linear shiftPointBy :: Point2A -> Point2 -> Point2 shiftPointBy (pos, rot) !p = pos +.+ rotateV rot p @@ -10,6 +11,9 @@ shiftPointBy (pos, rot) !p = pos +.+ rotateV rot p compP2A :: Point2A -> Point2A -> Point2A compP2A (p1,r1) (p2,r2) = (p1 +.+ rotateV r1 p2, r1 + r2) +lerpP2A :: Point2A -> Point2A -> Float -> Point2A +lerpP2A (p1,a1) (p2,a2) x = (p1 + x *^ (p2 - p1), a1 + x * diffAngles a2 a1) + invShiftPointBy :: (Point2, Float) -> Point2 -> Point2 invShiftPointBy (p1, r) p2 = rotateV (- r) $ p2 -.- p1 diff --git a/src/Dodge/Wall/Move.hs b/src/Dodge/Wall/Move.hs index b9542285c..c0ba64243 100644 --- a/src/Dodge/Wall/Move.hs +++ b/src/Dodge/Wall/Move.hs @@ -3,15 +3,9 @@ module Dodge.Wall.Move ( moveWallID, moveWallIDUnsafe, - moveWall, - moveWallIDToward, - translateWallID, - mvPs, ) where import Control.Lens -import Data.Maybe -import Dodge.Base import Dodge.Data.World import Dodge.Wall.Zone import Geometry @@ -33,28 +27,3 @@ moveWall wlid wl wlline w = & insertWallInZones newwl where newwl = wl{_wlLine = wlline} - -translateWallID :: Int -> Point2 -> World -> World -translateWallID wlid p w = fromMaybe w $ do - oldwl <- w ^? cWorld . lWorld . walls . ix wlid - let newwl = oldwl & wlLine . each +~ p - return $ - w - & cWorld . lWorld . walls . ix wlid .~ newwl - & deleteWallFromZones oldwl - & insertWallInZones newwl - -moveWallIDToward :: Int -> Float -> (Point2, Point2) -> World -> World -moveWallIDToward wlid speed ep w = moveWall wlid wl newwlline w - where - --wl = _walls (_cWorld w) IM.! wlid - wl = w ^?! cWorld . lWorld . walls . ix wlid - newwlline = mvPs speed ep (_wlLine wl) - -mvP :: Float -> Point2 -> Point2 -> Point2 -{-# INLINE mvP #-} -mvP !speed !ep !p = mvPointTowardAtSpeed speed ep p - -mvPs :: Float -> (Point2, Point2) -> (Point2, Point2) -> (Point2, Point2) -{-# INLINE mvPs #-} -mvPs !speed (!ex, !ey) (!sx, !sy) = (mvP speed ex sx, mvP speed ey sy) diff --git a/src/Dodge/WdP2f.hs b/src/Dodge/WdP2f.hs index 72b631585..d4f0686b5 100644 --- a/src/Dodge/WdP2f.hs +++ b/src/Dodge/WdP2f.hs @@ -1,15 +1,15 @@ {-# OPTIONS -Wno-incomplete-uni-patterns #-} module Dodge.WdP2f (doWdP2f) where +import Dodge.ShiftPoint import Control.Lens import Dodge.Data.World import Geometry.Data -import Geometry.Vector -- # OPTIONS -Wno-incomplete-uni-patterns #-} doWdP2f :: WdP2f -> World -> (Point2, Float) doWdP2f x = case x of WdP2f0 -> const (0, 0) WdP2fDoorPosition drid -> \w -> - let Just (a, b) = w ^? cWorld . lWorld . doors . ix drid . drPos - in (b, argV (a -.- b)) + let dr = w ^?! cWorld . lWorld . doors . ix drid + in lerpP2A (dr ^. drZeroPos) (dr ^. drOnePos) (dr ^. drLerp) diff --git a/src/Dodge/WorldBool.hs b/src/Dodge/WorldBool.hs index aa5d0021a..2af417bff 100644 --- a/src/Dodge/WorldBool.hs +++ b/src/Dodge/WorldBool.hs @@ -13,7 +13,8 @@ doWdBl wb w = case wb of WdTrig i -> fromMaybe False $ w ^? cWorld . lWorld . triggers . ix i WdBlDoorMoving i -> fromMaybe False $ do dr <- w ^? cWorld . lWorld . doors . ix i - return (DoorHalfway == _drStatus dr) + --return (DoorHalfway == _drStatus dr) + return (0 /= _drLerp dr && 1 /= _drLerp dr) WdBlCrFilterNearPoint r p t -> any (crNearPoint r p) (IM.filter (doCrBl t) (w ^. cWorld . lWorld . creatures)) WdBlBtOn btid -> w ^?! cWorld . lWorld . buttons . ix btid . btEvent . btOn -- unsafe WdBlNegate x -> not $ doWdBl x w diff --git a/tags b/tags index 1b8517822..9e907a618 100644 --- a/tags +++ b/tags @@ -350,21 +350,14 @@ DoReplicate src/Dodge/Data/ActionPlan.hs 106;" C DoReplicatePartial src/Dodge/Data/ActionPlan.hs 110;" C DockingBaySS src/Dodge/Data/Scenario.hs 92;" C Door src/Dodge/Data/Door.hs 30;" t -DoorClosed src/Dodge/Data/Door.hs 21;" C -DoorHalfway src/Dodge/Data/Door.hs 21;" C -DoorInt src/Dodge/Data/Door.hs 21;" C -DoorLerp src/Dodge/Data/WorldEffect.hs 70;" C -DoorMechanism src/Dodge/Data/WorldEffect.hs 69;" C +DoorLerp src/Dodge/Data/WorldEffect.hs 66;" C DoorObstacle src/Dodge/Data/PathGraph.hs 50;" C -DoorOpen src/Dodge/Data/Door.hs 21;" C DoorPart src/Dodge/Data/Wall/Structure.hs 12;" C -DoorStatus src/Dodge/Data/Door.hs 21;" t DoubleRes src/Dodge/Data/Config.hs 98;" C DoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 14;" t -DrWdId src/Dodge/Data/WorldEffect.hs 66;" C -DrWdMakeDoorDebris src/Dodge/Data/WorldEffect.hs 67;" C -DrWdMechanismStepwise src/Dodge/Data/WorldEffect.hs 68;" C -DrWdWd src/Dodge/Data/WorldEffect.hs 65;" t +DrWdId src/Dodge/Data/WorldEffect.hs 64;" C +DrWdMakeDoorDebris src/Dodge/Data/WorldEffect.hs 65;" C +DrWdWd src/Dodge/Data/WorldEffect.hs 63;" t DrawForceField src/Dodge/Data/Wall.hs 45;" C DrawnWall src/Dodge/Data/Wall.hs 41;" C DroneAmmo src/Dodge/Data/AmmoType.hs 10;" C @@ -1480,9 +1473,9 @@ WdCrSafeDistFromTarget src/Dodge/Data/CreatureEffect.hs 17;" C WdCrTrue src/Dodge/Data/CreatureEffect.hs 13;" C WdP2 src/Dodge/Data/WorldEffect.hs 38;" t WdP2Const src/Dodge/Data/WorldEffect.hs 39;" C -WdP2f src/Dodge/Data/WorldEffect.hs 60;" t -WdP2f0 src/Dodge/Data/WorldEffect.hs 61;" C -WdP2fDoorPosition src/Dodge/Data/WorldEffect.hs 62;" C +WdP2f src/Dodge/Data/WorldEffect.hs 59;" t +WdP2f0 src/Dodge/Data/WorldEffect.hs 60;" C +WdP2fDoorPosition src/Dodge/Data/WorldEffect.hs 61;" C WdTrig src/Dodge/Data/WorldEffect.hs 51;" C WdWd src/Dodge/Data/WorldEffect.hs 20;" t WdWdBurstFireRepetition src/Dodge/Data/WorldEffect.hs 34;" C @@ -1765,7 +1758,6 @@ _doReplicateAction src/Dodge/Data/ActionPlan.hs 113;" f _doReplicateTimes src/Dodge/Data/ActionPlan.hs 107;" f _doReplicateTimes src/Dodge/Data/ActionPlan.hs 112;" f _doors src/Dodge/Data/LWorld.hs 118;" f -_drClosePos src/Dodge/Data/Door.hs 38;" f _drDeath src/Dodge/Data/Door.hs 44;" f _drFootPrint src/Dodge/Data/Door.hs 42;" f _drHP src/Dodge/Data/Door.hs 43;" f @@ -1775,12 +1767,9 @@ _drMech src/Dodge/Data/Door.hs 35;" f _drMounts src/Dodge/Data/Door.hs 48;" f _drObstacleType src/Dodge/Data/Door.hs 50;" f _drOnePos src/Dodge/Data/Door.hs 40;" f -_drOpenPos src/Dodge/Data/Door.hs 37;" f -_drPos src/Dodge/Data/Door.hs 36;" f _drPushedBy src/Dodge/Data/Door.hs 46;" f _drPushes src/Dodge/Data/Door.hs 47;" f _drSpeed src/Dodge/Data/Door.hs 45;" f -_drStatus src/Dodge/Data/Door.hs 33;" f _drTrigger src/Dodge/Data/Door.hs 34;" f _drWallIDs src/Dodge/Data/Door.hs 32;" f _drZeroPos src/Dodge/Data/Door.hs 39;" f @@ -2559,13 +2548,13 @@ aimDelaySweep src/Dodge/Render/Picture.hs 287;" f aimStanceInfo src/Dodge/Item/Info.hs 243;" f aimTurn src/Dodge/Creature/YourControl.hs 181;" f airlock src/Dodge/Room/Airlock.hs 23;" f -airlock0 src/Dodge/Room/Airlock.hs 67;" f -airlock90 src/Dodge/Room/Airlock.hs 179;" f -airlockCrystal src/Dodge/Room/Airlock.hs 221;" f -airlockDoor src/Dodge/Room/Airlock.hs 94;" f -airlockDoubleDoor src/Dodge/Room/Airlock.hs 97;" f -airlockSimple src/Dodge/Room/Airlock.hs 109;" f -airlockZ src/Dodge/Room/Airlock.hs 141;" f +airlock0 src/Dodge/Room/Airlock.hs 71;" f +airlock90 src/Dodge/Room/Airlock.hs 208;" f +airlockCrystal src/Dodge/Room/Airlock.hs 253;" f +airlockDoor src/Dodge/Room/Airlock.hs 98;" f +airlockDoubleDoor src/Dodge/Room/Airlock.hs 101;" f +airlockSimple src/Dodge/Room/Airlock.hs 117;" f +airlockZ src/Dodge/Room/Airlock.hs 159;" f allVisibleWalls src/Dodge/Base/Collide.hs 225;" f alongSegBy src/Geometry.hs 40;" f alteRifle src/Dodge/Item/Held/Cane.hs 22;" f @@ -2763,7 +2752,7 @@ 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 buzzS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 702;" f -cChasm src/Dodge/Room/Tutorial.hs 115;" f +cChasm src/Dodge/Room/Tutorial.hs 121;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f @@ -2798,7 +2787,7 @@ chaseCritInternal src/Dodge/Humanoid.hs 7;" f chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 120;" f chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 32;" f chaseCritVocalization src/Dodge/Creature/ChaseCrit.hs 36;" f -chasmSimpleMaze src/Dodge/Room/Tutorial.hs 182;" f +chasmSimpleMaze src/Dodge/Room/Tutorial.hs 188;" f chasmTest src/Dodge/Creature/Update.hs 132;" f chasmWallToSurface src/Dodge/Base/Collide.hs 120;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f @@ -2904,7 +2893,7 @@ combineTree src/Dodge/Tree/Compose.hs 67;" f commandColor src/Dodge/Terminal.hs 114;" f commonPrefix src/Dodge/Debug/Terminal.hs 149;" f comp src/Quaternion.hs 61;" f -compP2A src/Dodge/ShiftPoint.hs 10;" f +compP2A src/Dodge/ShiftPoint.hs 11;" f compactDraw src/Dodge/LevelGen.hs 94;" f compactDraw' src/Dodge/LevelGen.hs 105;" f compactDrawTree src/Dodge/LevelGen.hs 88;" f @@ -3221,7 +3210,7 @@ doDebugTestF12 src/Dodge/Update/Input/DebugTest.hs 84;" f doDebugTestF6 src/Dodge/Update/Input/DebugTest.hs 41;" f doDebugTestF7 src/Dodge/Update/Input/DebugTest.hs 51;" f doDebugTestF8 src/Dodge/Update/Input/DebugTest.hs 59;" f -doDrWdWd src/Dodge/DrWdWd.hs 19;" f +doDrWdWd src/Dodge/DrWdWd.hs 14;" f doDrag src/Dodge/Update/Input/InGame.hs 127;" f doDrawing src/Dodge/Render.hs 34;" f doDrawing' src/Dodge/Render.hs 45;" f @@ -3258,15 +3247,13 @@ doTmWdWd src/Dodge/WorldEffect.hs 89;" f doWallRotate src/Dodge/Update/Camera.hs 220;" f doWdBl src/Dodge/WorldBool.hs 10;" f doWdCrBl src/Dodge/CreatureEffect.hs 18;" f -doWdP2f src/Dodge/WdP2f.hs 12;" f +doWdP2f src/Dodge/WdP2f.hs 10;" f doWdWd src/Dodge/WorldEffect.hs 28;" f doWorldEvents src/Dodge/Update.hs 428;" f doWorldPos src/Dodge/WorldPos.hs 10;" f door src/Dodge/Room/Door.hs 14;" f doorBetween src/Dodge/Placement/Instance/Door.hs 39;" f -doorLerp src/Dodge/DrWdWd.hs 58;" f -doorMechanism src/Dodge/DrWdWd.hs 28;" f -doorMechanismStepwise src/Dodge/DrWdWd.hs 103;" f +doorLerp src/Dodge/DrWdWd.hs 20;" f dotV src/Geometry/Vector.hs 76;" f dotV3 src/Geometry/Vector3D.hs 119;" f doubleCorridorBarrels src/Dodge/Room/Room.hs 276;" f @@ -3552,7 +3539,7 @@ floorItemSPic src/Dodge/Render/ShapePicture.hs 120;" f floorWire src/Dodge/Wire.hs 13;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 558;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 554;" f -foldMTRS src/Dodge/Room/Tutorial.hs 60;" f +foldMTRS src/Dodge/Room/Tutorial.hs 66;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 110;" f followImpulse src/Dodge/Creature/Impulse.hs 24;" f @@ -3613,8 +3600,8 @@ getCloseObj src/Dodge/Update/Input/InGame.hs 533;" f getCommand src/Dodge/Terminal.hs 52;" f getCommands src/Dodge/Terminal.hs 49;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f -getCrsFromRooms src/Dodge/Room/Tutorial.hs 331;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 318;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 337;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 324;" f getDebugMouseOver src/Dodge/Update.hs 376;" f getDistortions src/Dodge/Render.hs 435;" f getEdgesCrossing src/Dodge/Path.hs 43;" f @@ -3631,7 +3618,7 @@ getNodePos src/Dodge/Path.hs 40;" f getPJStabiliser src/Dodge/HeldUse.hs 1251;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f -getRoomsFromInts src/Dodge/Room/Tutorial.hs 314;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 320;" f getRootItemBounds src/Dodge/Render/HUD.hs 100;" f getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f @@ -3828,7 +3815,7 @@ invRootMap src/Dodge/Item/Grammar.hs 226;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 32;" f invSetSelection src/Dodge/Inventory.hs 180;" f invSetSelectionPos src/Dodge/Inventory.hs 188;" f -invShiftPointBy src/Dodge/ShiftPoint.hs 13;" f +invShiftPointBy src/Dodge/ShiftPoint.hs 17;" f invSize src/Dodge/Inventory/CheckSlots.hs 33;" f inventoryX src/Dodge/Creature.hs 113;" f inverseSelNumPos src/Dodge/SelectionSections.hs 193;" f @@ -3945,7 +3932,7 @@ keyCardRunPastRand src/Dodge/LockAndKey.hs 36;" f keyPic src/Dodge/Item/Draw/SPic.hs 459;" f keyholeCorridor src/Dodge/Room/Corridor.hs 39;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 638;" f -lChasm src/Dodge/Room/Tutorial.hs 124;" f +lChasm src/Dodge/Room/Tutorial.hs 130;" f lConnect src/Dodge/Render/Connectors.hs 42;" f lConnectMulti src/Dodge/Render/Connectors.hs 46;" f lShape src/Dodge/Placement/Instance/LightSource.hs 90;" f @@ -3987,6 +3974,7 @@ leftPad src/Padding.hs 15;" f leftRightCombine src/Dodge/Item/Grammar.hs 197;" f leftWristPQ src/Dodge/Creature/HandPos.hs 81;" f legsSPic src/Dodge/Item/Draw/SPic.hs 468;" f +lerpP2A src/Dodge/ShiftPoint.hs 14;" f liShape src/Dodge/Placement/Instance/LightSource.hs 112;" f light src/Color.hs 104;" f lightSensByDoor src/Dodge/Room/LasTurret.hs 51;" f @@ -4195,7 +4183,7 @@ mglCreate src/GLHelp.hs 8;" f mglDelete src/GLHelp.hs 14;" f midBarDecoration src/Dodge/Placement/TopDecoration.hs 16;" f midBounds src/Dodge/Room/Foreground.hs 151;" f -midChasm src/Dodge/Room/Tutorial.hs 145;" f +midChasm src/Dodge/Room/Tutorial.hs 151;" f midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4240,10 +4228,9 @@ moveRoomBy src/Dodge/Room/Link.hs 53;" f moveShockwave src/Dodge/Shockwave/Update.hs 13;" f moveStuckGrenade src/Dodge/Projectile/Update.hs 196;" f moveToSideNthOutLink src/Dodge/Room/Warning.hs 69;" f -moveWall src/Dodge/Wall/Move.hs 29;" f -moveWallID src/Dodge/Wall/Move.hs 24;" f -moveWallIDToward src/Dodge/Wall/Move.hs 47;" f -moveWallIDUnsafe src/Dodge/Wall/Move.hs 19;" 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 moveZoomCamera src/Dodge/Update/Camera.hs 87;" f mtTopLabels src/Dodge/Tree/Compose.hs 50;" f mtUnderLabels src/Dodge/Tree/Compose.hs 53;" f @@ -4262,13 +4249,11 @@ mvCr src/Dodge/Placement/PlaceSpot.hs 196;" f mvFS src/Dodge/Placement/PlaceSpot.hs 203;" f mvGust src/Dodge/Update.hs 784;" f mvLS src/Dodge/Placement/PlaceSpot.hs 275;" f -mvP src/Dodge/Wall/Move.hs 54;" f mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f mvPointMeleeTarg src/Dodge/Creature/Boid.hs 327;" f mvPointToward src/Dodge/Base.hs 136;" f mvPointTowardAtSpeed src/Dodge/Base.hs 105;" f mvProp src/Dodge/Placement/PlaceSpot.hs 190;" f -mvPs src/Dodge/Wall/Move.hs 58;" f myIntersectLineLine src/Geometry/Intersect.hs 198;" f myIntersectSegSeg src/Geometry/Intersect.hs 176;" f myParams src/Dodge/Combine/Graph.hs 101;" f @@ -4491,8 +4476,8 @@ pokeWall src/Shader/Poke.hs 78;" f pokeWallsWindows src/Shader/Poke.hs 50;" f poly3 src/Picture/Base.hs 84;" f poly3Col src/Picture/Base.hs 88;" f -polyChasm src/Dodge/Room/Tutorial.hs 166;" f -polyChasmC src/Dodge/Room/Tutorial.hs 175;" f +polyChasm src/Dodge/Room/Tutorial.hs 172;" f +polyChasmC src/Dodge/Room/Tutorial.hs 181;" f polyCirc src/Shape.hs 46;" f polyCircx src/Shape.hs 51;" f polyCornerDist src/Geometry/Polygon.hs 61;" f @@ -4680,7 +4665,7 @@ removeAimPosture src/Dodge/Creature/YourControl.hs 159;" f removeAmmoFromMag src/Dodge/HeldUse.hs 907;" f removeDot src/ShortShow.hs 44;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f -removeLights src/Dodge/Room/Tutorial.hs 231;" f +removeLights src/Dodge/Room/Tutorial.hs 237;" f removeShieldWall src/Dodge/Item/BackgroundEffect.hs 58;" f removeWallsInPolygon src/Dodge/LevelGen/StaticWalls.hs 182;" f renderDataResizeUpdate src/Preload/Update.hs 26;" f @@ -4859,7 +4844,7 @@ sensorReqToString src/Dodge/Machine/Update.hs 197;" f sensorRoom src/Dodge/Room/SensorDoor.hs 26;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 46;" f sensorSPic src/Dodge/Machine/Draw.hs 81;" f -sensorTut src/Dodge/Room/Tutorial.hs 340;" f +sensorTut src/Dodge/Room/Tutorial.hs 346;" f sensorTypeDamages src/Dodge/Machine/Update.hs 234;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 81;" f @@ -4886,7 +4871,7 @@ setOutLinks src/Dodge/RoomLink.hs 50;" f setOutLinksByType src/Dodge/RoomLink.hs 75;" f setOutLinksPD src/Dodge/RoomLink.hs 95;" f setRBCreatureTargeting src/Dodge/Creature/State.hs 290;" f -setRoomInt src/Dodge/Room/Tutorial.hs 67;" f +setRoomInt src/Dodge/Room/Tutorial.hs 73;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 337;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 87;" f setShaderSource src/Shader/Compile.hs 290;" f @@ -4896,7 +4881,7 @@ setTargetMv src/Dodge/Creature/ReaderUpdate.hs 82;" f setTile src/Dodge/Layout.hs 70;" f setTiles src/Dodge/Layout.hs 67;" f setToggle src/Dodge/Prop/Update.hs 44;" f -setTreeInts src/Dodge/Room/Tutorial.hs 74;" f +setTreeInts src/Dodge/Room/Tutorial.hs 80;" f setViewDistance src/Dodge/Update/Camera.hs 236;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f setViewport src/Dodge/Render.hs 440;" f @@ -4948,8 +4933,8 @@ shiftLinkBy src/Dodge/Room/Link.hs 87;" f shiftPSBy src/Dodge/Placement/Shift.hs 12;" f shiftPathBy src/Dodge/Room/Link.hs 92;" f shiftPlacement src/Dodge/Placement/Shift.hs 21;" f -shiftPoint3By src/Dodge/ShiftPoint.hs 16;" f -shiftPointBy src/Dodge/ShiftPoint.hs 7;" f +shiftPoint3By src/Dodge/ShiftPoint.hs 20;" f +shiftPointBy src/Dodge/ShiftPoint.hs 8;" f shiftPosDirBy src/Dodge/Room/Link.hs 84;" f shiftRelativeToPS src/Dodge/Placement/Shift.hs 18;" f shiftRoomBy src/Dodge/Room/Link.hs 37;" f @@ -5294,7 +5279,6 @@ translateToLeftHand src/Dodge/Creature/HandPos.hs 78;" f translateToLeftLeg src/Dodge/Creature/HandPos.hs 97;" f translateToRightHand src/Dodge/Creature/HandPos.hs 54;" f translateToRightLeg src/Dodge/Creature/HandPos.hs 112;" f -translateWallID src/Dodge/Wall/Move.hs 37;" f translateXY src/Polyhedra.hs 26;" f trapezionBWHW src/Geometry/Polygon.hs 26;" f treeAttachDeep src/TreeHelp.hs 193;" f @@ -5335,12 +5319,12 @@ turnTo src/Dodge/Movement/Turn.hs 8;" f turret src/Dodge/Placement/Instance/Turret.hs 37;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 21;" f tutAnoTree src/Dodge/Room/Tutorial.hs 41;" f -tutDrop src/Dodge/Room/Tutorial.hs 79;" f -tutHub src/Dodge/Room/Tutorial.hs 238;" f -tutLight src/Dodge/Room/Tutorial.hs 203;" f -tutRezBox src/Dodge/Room/Tutorial.hs 351;" f +tutDrop src/Dodge/Room/Tutorial.hs 85;" f +tutHub src/Dodge/Room/Tutorial.hs 244;" f +tutLight src/Dodge/Room/Tutorial.hs 209;" f +tutRezBox src/Dodge/Room/Tutorial.hs 357;" f tutRoomTree src/Dodge/Floor.hs 21;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 375;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 381;" f tweenAngles src/Geometry/Vector.hs 190;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 81;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 29;" f @@ -5653,7 +5637,7 @@ yourInv src/Dodge/Base/You.hs 28;" f yourRootItem src/Dodge/Base/You.hs 22;" f yourSelectedItem src/Dodge/Base/You.hs 16;" f yourStatsInfo src/Dodge/Creature/Info.hs 27;" f -zChasm src/Dodge/Room/Tutorial.hs 133;" f +zChasm src/Dodge/Room/Tutorial.hs 139;" f zConnect src/Dodge/Render/Connectors.hs 17;" f zConnectCol src/Dodge/Render/Connectors.hs 28;" f zConnectColMidX src/Dodge/Render/Connectors.hs 31;" f