From 259325f81f4fdf17b699f9fe64b955beaa44129a Mon Sep 17 00:00:00 2001 From: justin Date: Mon, 27 Apr 2026 22:23:39 +0100 Subject: [PATCH] Improve creature turning wrt inertia --- src/Dodge/Creature/ChaseCrit.hs | 2 +- src/Dodge/Creature/Impulse.hs | 2 +- src/Dodge/Creature/Impulse/Movement.hs | 22 ++ src/Dodge/Creature/State/WalkCycle.hs | 4 +- src/Dodge/Creature/Test.hs | 17 +- src/Dodge/Creature/Update.hs | 18 +- src/Dodge/Data/Creature/Misc.hs | 1 + src/Dodge/TestString.hs | 6 +- src/Dodge/Update.hs | 2 +- tags | 292 +++++++++++++------------ 10 files changed, 206 insertions(+), 160 deletions(-) diff --git a/src/Dodge/Creature/ChaseCrit.hs b/src/Dodge/Creature/ChaseCrit.hs index adb394dfd..a49ab4806 100644 --- a/src/Dodge/Creature/ChaseCrit.hs +++ b/src/Dodge/Creature/ChaseCrit.hs @@ -91,7 +91,7 @@ beeCrit = defaultCreature & crName .~ "beeCrit" & crHP .~ HP 100 - & crType .~ BeeCrit 0 Nothing 0 0 + & crType .~ BeeCrit 0 Nothing 0 0 0 & crFaction .~ ColorFaction yellow & crStance . carriage .~ Flying 15 diff --git a/src/Dodge/Creature/Impulse.hs b/src/Dodge/Creature/Impulse.hs index fd7d2a168..f35711965 100644 --- a/src/Dodge/Creature/Impulse.hs +++ b/src/Dodge/Creature/Impulse.hs @@ -74,7 +74,7 @@ followImpulse cid w = \case MvForward -> crup $ crMvForward' (w ^. cWorld . lWorld) MvTurnToward p -> crup $ - creatureTurnToward p (turnRad $ safeAngleVV (p -.- cpos) (unitVectorAtAngle cdir)) + mvTurnToward p (turnRad $ safeAngleVV (p -.- cpos) (unitVectorAtAngle cdir)) where clens = cWorld . lWorld . creatures . ix cid cr = w ^?! cWorld . lWorld . creatures . ix cid diff --git a/src/Dodge/Creature/Impulse/Movement.hs b/src/Dodge/Creature/Impulse/Movement.hs index 77745ba17..3c1653ffc 100644 --- a/src/Dodge/Creature/Impulse/Movement.hs +++ b/src/Dodge/Creature/Impulse/Movement.hs @@ -8,8 +8,10 @@ module Dodge.Creature.Impulse.Movement ( crMvForward, crMvForward', creatureTurnTo, + mvTurnToward, ) where +import Dodge.Creature.State.WalkCycle import Dodge.Creature.MoveType import Linear import Control.Lens @@ -117,3 +119,23 @@ creatureTurnToward p turnSpeed cr where vToTarg = p -.- cr ^. crPos . _xy dirToTarget = argV vToTarg + +mvTurnToward :: Point2 -> Float -> Creature -> Creature +mvTurnToward p' turnSpeed cr + | vToTarg == V2 0 0 = cr -- this should deal with the angleVV error +-- | errorAngleVV 3 vToTarg (unitVectorAtAngle (_crDir cr)) <= turnSpeed = + | angleVV vToTarg (unitVectorAtAngle (_crDir cr)) <= turnSpeed = + cr & crDir .~ dirToTarget + | isLeftOfA (normalizeAngle dirToTarget) (normalizeAngle $ _crDir cr) = cr & crDir +~ turnSpeed + | otherwise = cr & crDir -~ turnSpeed + where + -- when flying, inertia is high enough that overturning can be usefull + p | Flying {} <- cr ^. crStance . carriage + = let v = flyInertia cr *^ (cr ^. crOldPos . _xy - cr ^. crOldOldPos . _xy) + -- u = normalize $ vNormal $ p' - cxy + --in p' - dot v u *^ u + in p' - v + | otherwise = p' + cxy = cr ^. crPos . _xy + vToTarg = p -.- cr ^. crPos . _xy + dirToTarget = argV vToTarg diff --git a/src/Dodge/Creature/State/WalkCycle.hs b/src/Dodge/Creature/State/WalkCycle.hs index 1fd23af07..55e0368d5 100644 --- a/src/Dodge/Creature/State/WalkCycle.hs +++ b/src/Dodge/Creature/State/WalkCycle.hs @@ -1,7 +1,9 @@ {-# LANGUAGE LambdaCase #-} module Dodge.Creature.State.WalkCycle (updateCarriage - ,compressionScale) where + ,compressionScale + , flyInertia + ) where import qualified Quaternion as Q import Dodge.Creature.Radius diff --git a/src/Dodge/Creature/Test.hs b/src/Dodge/Creature/Test.hs index 2e321cde9..57fa47317 100644 --- a/src/Dodge/Creature/Test.hs +++ b/src/Dodge/Creature/Test.hs @@ -133,12 +133,19 @@ isAnimate :: Creature -> Bool {-# INLINE isAnimate #-} isAnimate cr = case _crActionPlan cr of Inanimate -> False - SlimeIntelligence -> False + SlimeIntelligence -> True ActionPlan{} -> True hasAutoDoorBody :: Creature -> Bool -hasAutoDoorBody cr = case cr ^. crHP of - HP {} -> True - CrIsCorpse {} -> True - CrDestroyed {} -> False +hasAutoDoorBody cr = crittype && notdestroyed + where + notdestroyed = case cr ^. crHP of + HP {} -> True + CrIsCorpse {} -> True + CrDestroyed {} -> False + crittype = case cr ^. crType of + SlimeCrit {} -> False + BeeCrit {} -> False + HiveCrit {} -> False + _ -> True diff --git a/src/Dodge/Creature/Update.hs b/src/Dodge/Creature/Update.hs index 31204e55c..0a620f03c 100644 --- a/src/Dodge/Creature/Update.hs +++ b/src/Dodge/Creature/Update.hs @@ -3,9 +3,10 @@ module Dodge.Creature.Update (updateCreature) where --import Dodge.WorldEvent.ThingsHit +import Dodge.Creature.Radius +import Dodge.Creature.MoveType import Dodge.Base.Collide import Data.List (sortOn) -import Dodge.Creature.Radius import Dodge.Zoning.Creature import Dodge.Creature.ChaseCrit import Dodge.Creature.Damage @@ -96,7 +97,7 @@ updateHiveCrit cr cid w & tocr . crType . hiveGestation %~ (max 0 . subtract 1) | otherwise = w where - nbees = 10 + nbees = 50 tocr = cWorld . lWorld . creatures . ix cid nid = IM.newKey $ w ^. cWorld . lWorld . creatures ncr = beeCrit & crPos .~ (cr ^. crPos + (0 & _xy +~ 25)) @@ -117,11 +118,24 @@ updateBeeCrit cr updateAggroBee :: Creature -> Int -> World -> World updateAggroBee cr cid w + | Mounted{} <- cr ^. crStance . carriage = w & tocr . crStance . carriage .~ Flying 0 + | Just tcr <- listToMaybe . sortOn (distance cxy . (^. crPos . _xy)) . IM.elems . IM.filter istarget $ crsNearCirc cxy 100 w + , distance (tcr ^. crPos . _xy) (cr ^. crPos . _xy) < crRad (cr ^. crType) + crRad (tcr ^. crType) + 1 + , nearZeroAngle (argV (tcr ^. crPos . _xy - cr ^. crPos . _xy) - cr ^. crDir) < pi / 2 + , 0 <- cr ^?! crType . meleeCooldown + = w & tocr . crPos .~ (cr ^. crOldPos & _xy -~ 5 *^ unitVectorAtAngle (cr ^. crDir)) + & tocr . crType . startStopMv .~ (cr ^?! to crMvType . mvPulseTime) + & cWorld . lWorld . creatures . ix (tcr ^. crID) . crDamage + .:~ Blunt 50 (cxy + crRad (cr ^. crType) *^ vdir) vdir (CrMeleeO (cr ^. crID)) + & tocr . crType . meleeCooldown .~ 20 | Just tcr <- listToMaybe . sortOn (distance cxy . (^. crPos . _xy)) . IM.elems . IM.filter istarget $ crsNearCirc cxy 100 w = w & tocr . crActionPlan . apStrategy .~ CloseToMelee (tcr ^. crID) & tocr . crActionPlan . apAction .~ PathTo (tcr ^. crPos . _xy) NoAction + & tocr . crType . meleeCooldown %~ (max 0 . subtract 1) | otherwise = w & tocr . crType . beeAggro -~ 1 & tocr . crActionPlan . apStrategy .~ Search + & tocr . crType . meleeCooldown %~ (max 0 . subtract 1) where + vdir = unitVectorAtAngle (cr ^. crDir) cxy = cr ^. crPos . _xy tocr = cWorld . lWorld . creatures . ix cid istarget tcr = tcr ^. crID == 0 diff --git a/src/Dodge/Data/Creature/Misc.hs b/src/Dodge/Data/Creature/Misc.hs index 01d440a4d..ab5b1ada0 100644 --- a/src/Dodge/Data/Creature/Misc.hs +++ b/src/Dodge/Data/Creature/Misc.hs @@ -85,6 +85,7 @@ data CreatureType , _beeHive :: Maybe Int , _startStopMv :: Int , _beeAggro :: Int + , _meleeCooldown :: Int } | HiveCrit { _hiveChildren :: IS.IntSet diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index e345f9806..f44e17e1a 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -35,6 +35,7 @@ import NewInt import RandomHelp import qualified SDL import ShortShow +import qualified Data.IntSet as IS tocrs :: (IM.IntMap Creature -> Const (Endo [String]) (IM.IntMap Creature)) @@ -42,10 +43,7 @@ tocrs :: (IM.IntMap Creature tocrs = uvWorld . cWorld . lWorld . creatures testStringInit :: Universe -> [String] -testStringInit u = u ^.. tocrs . ix 2 . crType . hiveChildren . to show - <> u ^.. tocrs . ix 3 . crStance . carriage . to show - <> u ^.. tocrs . ix 3 . crDir . to show - <> u ^.. tocrs . ix 3 . crActionPlan . apAction . to show +testStringInit u = u ^.. tocrs . ix 2 . crType . hiveChildren . to IS.size . to show -- u ^.. tocrs . ix 1 . crPos . _xy . to show -- <> u ^.. tocrs . ix 1 . crType . slimeCompression . to show -- <> u ^.. tocrs . ix 1 . crType . slimeCompression . to norm . to show diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index 7ef0f3d18..14e9e92f4 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -785,7 +785,7 @@ updateBeePheremone bp | x <- bp ^. bpTimer , x <= 0 = Nothing | otherwise = Just $ bp & bpTimer -~ 1 - & bpVel *~ 0.95 + & bpVel *~ 0.90 & bpPos +~ (bp ^. bpVel) updateDusts :: World -> World diff --git a/tags b/tags index 4520e32ba..5b3d8a061 100644 --- a/tags +++ b/tags @@ -385,12 +385,12 @@ ElectricSensor src/Dodge/Data/Machine/Sensor.hs 14;" C ElectricSpark src/Dodge/Data/Spark.hs 19;" C Electrical src/Dodge/Data/Damage.hs 24;" C ElectricalAmmo src/Dodge/Data/AmmoType.hs 12;" C -ElectricalBall src/Dodge/Data/EnergyBall/Type.hs 14;" C +ElectricalBall src/Dodge/Data/EnergyBall/Type.hs 13;" C Electronics src/Dodge/Data/Material.hs 18;" C EllShad src/Picture/Data.hs 34;" C EncircleFlock src/Dodge/Data/Creature/State.hs 15;" C EnergyBall src/Dodge/Data/EnergyBall.hs 16;" t -EnergyBallType src/Dodge/Data/EnergyBall/Type.hs 11;" t +EnergyBallType src/Dodge/Data/EnergyBall/Type.hs 10;" t EnergyGeneratorSS src/Dodge/Data/Scenario.hs 109;" C EngineSS src/Dodge/Data/Scenario.hs 88;" C Enterrement src/Dodge/Data/Damage.hs 27;" C @@ -408,7 +408,7 @@ Explore src/Dodge/Data/Scenario.hs 4;" C Explosion src/Dodge/Data/SoundOrigin.hs 39;" C ExplosionPayload src/Dodge/Data/Payload.hs 9;" C Explosive src/Dodge/Data/Damage.hs 25;" C -ExplosiveBall src/Dodge/Data/EnergyBall/Type.hs 15;" C +ExplosiveBall src/Dodge/Data/EnergyBall/Type.hs 14;" C ExplosiveBarrel src/Dodge/Data/Creature/Misc.hs 112;" C ExplosivePutty src/Dodge/Data/AmmoType.hs 16;" C ExtraMenuOption src/Dodge/Data/Universe.hs 76;" t @@ -438,12 +438,12 @@ FlIt src/Dodge/Data/FloorItem.hs 11;" C Flame src/Dodge/Data/Flame.hs 12;" t FlameBeamCombine src/Dodge/Data/Beam.hs 37;" C FlameSound src/Dodge/Data/SoundOrigin.hs 29;" C -FlameletBall src/Dodge/Data/EnergyBall/Type.hs 13;" C +FlameletBall src/Dodge/Data/EnergyBall/Type.hs 12;" C Flamer src/Dodge/Data/SoundOrigin.hs 27;" C Flaming src/Dodge/Data/Damage.hs 21;" C Flank src/Dodge/Data/ActionPlan.hs 135;" C FlareType src/Dodge/Data/Muzzle.hs 28;" t -FlashBall src/Dodge/Data/EnergyBall/Type.hs 16;" C +FlashBall src/Dodge/Data/EnergyBall/Type.hs 15;" C Flashing src/Dodge/Data/Damage.hs 23;" C FlatFaces src/Shape/Data.hs 12;" C FlatShieldParams src/Dodge/Data/Item/Params.hs 14;" C @@ -589,7 +589,7 @@ InRealWorld src/Dodge/Data/Scenario.hs 18;" C InSimulation src/Dodge/Data/Scenario.hs 20;" C InVoid src/Dodge/Data/Item/Location.hs 39;" C Inanimate src/Dodge/Data/ActionPlan.hs 15;" C -IncendiaryBall src/Dodge/Data/EnergyBall/Type.hs 12;" C +IncendiaryBall src/Dodge/Data/EnergyBall/Type.hs 11;" C Inertial src/Dodge/Data/Damage.hs 28;" C InheritFloor src/Data/Tile.hs 12;" C Input src/Dodge/Data/Input.hs 33;" t @@ -711,7 +711,7 @@ MODBlockedString src/Dodge/Data/Universe.hs 106;" C MODString src/Dodge/Data/Universe.hs 105;" C MODStringOption src/Dodge/Data/Universe.hs 107;" C MOTOR src/Dodge/Data/Item/Combine.hs 64;" C -MPO src/Dodge/Base/Collide.hs 109;" t +MPO src/Dodge/Base/Collide.hs 110;" t MTRS src/Dodge/Data/MTRS.hs 6;" t MTree src/Dodge/Data/MetaTree.hs 12;" C Machine src/Dodge/Data/Machine.hs 30;" t @@ -1049,9 +1049,9 @@ ProximityRequirement src/Dodge/Data/Machine/Sensor.hs 33;" t ProximitySensor src/Dodge/Data/Machine/Sensor.hs 24;" t ProximitySensorType src/Dodge/Data/Machine/Sensor.hs 29;" t Pulse src/Dodge/Data/Creature/Misc.hs 41;" t -PulseBall src/Dodge/Data/PulseLaser.hs 23;" t +PulseBall src/Dodge/Data/PulseLaser.hs 22;" t PulseBallSF src/Dodge/Data/ComposedItem.hs 46;" C -PulseLaser src/Dodge/Data/PulseLaser.hs 13;" t +PulseLaser src/Dodge/Data/PulseLaser.hs 12;" t PulseLaserSF src/Dodge/Data/ComposedItem.hs 43;" C PulseStatus src/Dodge/Data/Creature/Misc.hs 41;" C PumpSF src/Dodge/Data/ComposedItem.hs 49;" C @@ -1620,7 +1620,8 @@ _bounceTolerance src/Dodge/Data/Projectile.hs 48;" f _bpColor src/Dodge/Data/Button.hs 17;" f _bpEff src/Dodge/Data/Button.hs 16;" f _bpPos src/Dodge/Data/Cloud.hs 48;" f -_bpTimer src/Dodge/Data/Cloud.hs 49;" f +_bpTimer src/Dodge/Data/Cloud.hs 50;" f +_bpVel src/Dodge/Data/Cloud.hs 49;" f _bsColor1 src/Dodge/Data/Button.hs 22;" f _bsColor2 src/Dodge/Data/Button.hs 23;" f _btEvent src/Dodge/Data/Button.hs 32;" f @@ -1832,7 +1833,7 @@ _dtLeft src/Dodge/Data/DoubleTree.hs 16;" f _dtRight src/Dodge/Data/DoubleTree.hs 16;" f _dtValue src/Dodge/Data/DoubleTree.hs 16;" f _dusts src/Dodge/Data/LWorld.hs 100;" f -_ebID src/Dodge/Data/EnergyBall/Type.hs 14;" f +_ebID src/Dodge/Data/EnergyBall/Type.hs 13;" f _ebOrigin src/Dodge/Data/EnergyBall.hs 21;" f _ebPos src/Dodge/Data/EnergyBall.hs 18;" f _ebTimer src/Dodge/Data/EnergyBall.hs 19;" f @@ -1841,7 +1842,7 @@ _ebVel src/Dodge/Data/EnergyBall.hs 17;" f _emoMenuOption src/Dodge/Data/Universe.hs 77;" f _energyBalls src/Dodge/Data/LWorld.hs 109;" f _fallRot src/Dodge/Data/Creature/Stance.hs 29;" f -_fbSize src/Dodge/Data/EnergyBall/Type.hs 13;" f +_fbSize src/Dodge/Data/EnergyBall/Type.hs 12;" f _fboBase src/Data/Preload/Render.hs 35;" f _fboBloom src/Data/Preload/Render.hs 38;" f _fboCloud src/Data/Preload/Render.hs 36;" f @@ -2228,17 +2229,17 @@ _putWidth src/Dodge/Data/GenWorld.hs 49;" f _pwPoly src/Dodge/Data/GenWorld.hs 53;" f _pwWall src/Dodge/Data/GenWorld.hs 53;" f _pyFaces src/Polyhedra/Data.hs 14;" f -_pzDamage src/Dodge/Data/PulseLaser.hs 17;" f -_pzDir src/Dodge/Data/PulseLaser.hs 16;" f -_pzOrigin src/Dodge/Data/PulseLaser.hs 19;" f -_pzPhaseV src/Dodge/Data/PulseLaser.hs 14;" f -_pzPos src/Dodge/Data/PulseLaser.hs 15;" f -_pzTimer src/Dodge/Data/PulseLaser.hs 18;" f -_pzbID src/Dodge/Data/PulseLaser.hs 27;" f -_pzbOrigin src/Dodge/Data/PulseLaser.hs 28;" f -_pzbPos src/Dodge/Data/PulseLaser.hs 25;" f -_pzbTimer src/Dodge/Data/PulseLaser.hs 26;" f -_pzbVel src/Dodge/Data/PulseLaser.hs 24;" f +_pzDamage src/Dodge/Data/PulseLaser.hs 16;" f +_pzDir src/Dodge/Data/PulseLaser.hs 15;" f +_pzOrigin src/Dodge/Data/PulseLaser.hs 18;" f +_pzPhaseV src/Dodge/Data/PulseLaser.hs 13;" f +_pzPos src/Dodge/Data/PulseLaser.hs 14;" f +_pzTimer src/Dodge/Data/PulseLaser.hs 17;" f +_pzbID src/Dodge/Data/PulseLaser.hs 26;" f +_pzbOrigin src/Dodge/Data/PulseLaser.hs 27;" f +_pzbPos src/Dodge/Data/PulseLaser.hs 24;" f +_pzbTimer src/Dodge/Data/PulseLaser.hs 25;" f +_pzbVel src/Dodge/Data/PulseLaser.hs 23;" f _rCommands src/Dodge/Terminal.hs 165;" f _rFootPos src/Dodge/Data/Creature/Misc.hs 67;" f _radarBlips src/Dodge/Data/LWorld.hs 112;" f @@ -2659,7 +2660,7 @@ airlockCrystal src/Dodge/Room/Airlock.hs 251;" f airlockDoubleDoor src/Dodge/Room/Airlock.hs 104;" f airlockSimple src/Dodge/Room/Airlock.hs 129;" f airlockZ src/Dodge/Room/Airlock.hs 166;" f -allVisibleWalls src/Dodge/Base/Collide.hs 247;" f +allVisibleWalls src/Dodge/Base/Collide.hs 249;" f alongSegBy src/Geometry.hs 40;" f alteRifle src/Dodge/Item/Held/Cane.hs 22;" f alteRifleAmmoOrient src/Dodge/Item/Orientation.hs 51;" f @@ -2677,7 +2678,7 @@ angleVV src/Geometry/Vector.hs 58;" f angleVV3 src/Geometry/Vector3D.hs 123;" f angleVVTests test/Spec.hs 67;" f anyUnusedSpot src/Dodge/PlacementSpot.hs 68;" f -anythingHitCirc src/Dodge/Base/Collide.hs 355;" f +anythingHitCirc src/Dodge/Base/Collide.hs 357;" f apply src/Quaternion.hs 78;" f applyCME src/Dodge/HeldUse.hs 397;" f applyClip src/Dodge/Debug.hs 176;" f @@ -2687,7 +2688,6 @@ applyGravityPU src/Dodge/Projectile/Update.hs 41;" f applyIndividualDamage src/Dodge/Creature/Damage.hs 18;" f applyInvLock src/Dodge/HeldUse.hs 455;" f applyMagnetsToBul src/Dodge/Bullet.hs 32;" f -applyPastDamages src/Dodge/Creature/State.hs 49;" f applyPosition src/Sound.hs 113;" f applyRecoil src/Dodge/HeldUse.hs 486;" f applyResFactor src/Dodge/Data/Config.hs 126;" f @@ -2829,7 +2829,7 @@ boolOption src/Dodge/Menu/OptionType.hs 12;" f bossKeyItems src/Dodge/LockAndKey.hs 13;" f bossRoom src/Dodge/Room/Boss.hs 55;" f bounceDir src/Dodge/Bullet.hs 111;" f -bouncePoint src/Dodge/Base/Collide.hs 99;" f +bouncePoint src/Dodge/Base/Collide.hs 100;" f bounceSound src/Dodge/Projectile/Update.hs 74;" f boundPoints src/Bound.hs 9;" f boundPointsRect src/Bound.hs 23;" f @@ -2862,14 +2862,14 @@ buttonFlip src/Dodge/Button/Event.hs 18;" f buzz1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 892;" f buzzS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 638;" f byNthLink src/Dodge/Room/Warning.hs 44;" f -cChasm src/Dodge/Room/Tutorial.hs 172;" f +cChasm src/Dodge/Room/Tutorial.hs 174;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f calcTexCoord src/Tile.hs 19;" f -canSee src/Dodge/Base/Collide.hs 341;" f -canSeeIndirect src/Dodge/Base/Collide.hs 348;" f -canSpring src/Dodge/Update.hs 1005;" f +canSee src/Dodge/Base/Collide.hs 343;" f +canSeeIndirect src/Dodge/Base/Collide.hs 350;" f +canSpring src/Dodge/Update.hs 1001;" f cancelExamineInventory src/Dodge/Item/BackgroundEffect.hs 23;" f capacitor src/Dodge/Item/Ammo.hs 67;" f card8Vec src/Dodge/Base/CardinalPoint.hs 32;" f @@ -2901,15 +2901,15 @@ chaseCritInternal src/Dodge/Humanoid.hs 12;" f chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 194;" f chaseUpperBody src/Dodge/Creature/Picture.hs 174;" f chasmRotate src/Dodge/Creature/State/WalkCycle.hs 142;" f -chasmSimpleMaze src/Dodge/Room/Tutorial.hs 409;" f -chasmSpitTerminal src/Dodge/Room/Tutorial.hs 342;" f +chasmSimpleMaze src/Dodge/Room/Tutorial.hs 411;" f +chasmSpitTerminal src/Dodge/Room/Tutorial.hs 344;" f chasmTestCliffPush src/Dodge/Creature/State/WalkCycle.hs 124;" f -chasmWallToSurface src/Dodge/Base/Collide.hs 132;" f +chasmWallToSurface src/Dodge/Base/Collide.hs 133;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkConnection src/Dodge/Inventory/Swap.hs 66;" f checkDeath src/Dodge/Creature/Update.hs 343;" f checkDeath' src/Dodge/Creature/Update.hs 346;" f -checkEndGame src/Dodge/Update.hs 891;" f +checkEndGame src/Dodge/Update.hs 887;" f checkErrorGL src/Shader/Compile.hs 86;" f checkFBO src/Framebuffer/Check.hs 6;" f checkGLError src/GLHelp.hs 17;" f @@ -2926,12 +2926,12 @@ chooseEquipPosition src/Dodge/Inventory/RBList.hs 41;" f chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 171;" f chooseFreeSite src/Dodge/Inventory/RBList.hs 47;" f chooseMovementLtAuto src/Dodge/CreatureEffect.hs 78;" f -circHitWall src/Dodge/Base/Collide.hs 260;" f +circHitWall src/Dodge/Base/Collide.hs 262;" f circInPolygon src/Geometry/Polygon.hs 110;" f -circOnAnyCr src/Dodge/Base/Collide.hs 305;" f +circOnAnyCr src/Dodge/Base/Collide.hs 307;" f circOnSeg src/Geometry.hs 101;" f circOnSegNoEndpoints src/Geometry.hs 91;" f -circOnSomeWall src/Dodge/Base/Collide.hs 299;" f +circOnSomeWall src/Dodge/Base/Collide.hs 301;" f circSegsInside src/Dodge/Creature/State/WalkCycle.hs 110;" f circSegsInside' src/Dodge/Creature/State/WalkCycle.hs 99;" f circle src/Picture/Base.hs 172;" f @@ -2975,18 +2975,18 @@ colCrWall src/Dodge/WallCreatureCollisions.hs 27;" f colCrsWalls src/Dodge/WallCreatureCollisions.hs 19;" f collectDamageTypes src/Dodge/Damage.hs 54;" f collectInvItems src/Dodge/Inventory.hs 205;" f -collide3 src/Dodge/Base/Collide.hs 141;" f -collide3Chasm src/Dodge/Base/Collide.hs 125;" f -collide3Chasms src/Dodge/Base/Collide.hs 117;" f -collide3Creature src/Dodge/Base/Collide.hs 174;" f -collide3Floors src/Dodge/Base/Collide.hs 155;" f -collide3Wall src/Dodge/Base/Collide.hs 169;" f -collide3Walls src/Dodge/Base/Collide.hs 150;" f -collide3WallsFloor src/Dodge/Base/Collide.hs 111;" f -collideCircWalls src/Dodge/Base/Collide.hs 272;" f -collidePoint src/Dodge/Base/Collide.hs 56;" f -collidePointTestFilter src/Dodge/Base/Collide.hs 210;" f -collidePointWallsFilter src/Dodge/Base/Collide.hs 224;" f +collide3 src/Dodge/Base/Collide.hs 142;" f +collide3Chasm src/Dodge/Base/Collide.hs 126;" f +collide3Chasms src/Dodge/Base/Collide.hs 118;" f +collide3Creature src/Dodge/Base/Collide.hs 175;" f +collide3Floors src/Dodge/Base/Collide.hs 156;" f +collide3Wall src/Dodge/Base/Collide.hs 170;" f +collide3Walls src/Dodge/Base/Collide.hs 151;" f +collide3WallsFloor src/Dodge/Base/Collide.hs 112;" f +collideCircWalls src/Dodge/Base/Collide.hs 274;" f +collidePoint src/Dodge/Base/Collide.hs 57;" f +collidePointTestFilter src/Dodge/Base/Collide.hs 212;" f +collidePointWallsFilter src/Dodge/Base/Collide.hs 226;" f color src/Picture/Base.hs 100;" f colorLamp src/Dodge/Creature/Lamp.hs 10;" f colorSH src/Shape.hs 239;" f @@ -3026,14 +3026,14 @@ convexHull src/Geometry/Polygon.hs 150;" f convexHullSafe src/Geometry/Polygon.hs 172;" f convexPolysOverlap src/Geometry/ConvexPoly.hs 48;" f convexPolysOverlapWitness src/Geometry/ConvexPoly.hs 55;" f -coolMachinePistol src/Dodge/Creature/State.hs 107;" f -coolMinigun src/Dodge/Creature/State.hs 100;" f +coolMachinePistol src/Dodge/Creature/State.hs 130;" f +coolMinigun src/Dodge/Creature/State.hs 123;" f copier src/Dodge/Item/Scope.hs 94;" f -copierItemUpdate src/Dodge/Creature/State.hs 136;" f +copierItemUpdate src/Dodge/Creature/State.hs 159;" f copyItemToFloor src/Dodge/FloorItem.hs 14;" f corDoor src/Dodge/Room/Room.hs 411;" f cornerList src/Preload/Render.hs 236;" f -corpseOrGib src/Dodge/Creature/Update.hs 388;" f +corpseOrGib src/Dodge/Creature/Update.hs 389;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 135;" f corridorN src/Dodge/Room/Corridor.hs 58;" f @@ -3043,7 +3043,7 @@ crAwayFromPost src/Dodge/Creature/Test.hs 83;" f crBlips src/Dodge/RadarSweep.hs 88;" f crCamouflage src/Dodge/Creature/Picture.hs 79;" f crCanSeeCr src/Dodge/Creature/Test.hs 50;" f -crCrSpring src/Dodge/Update.hs 1012;" f +crCrSpring src/Dodge/Update.hs 1008;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 68;" f crDeathEffects src/Dodge/Creature/Update.hs 367;" f crDeathSounds src/Dodge/Creature/Vocalization.hs 40;" f @@ -3052,7 +3052,7 @@ crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 39;" f crDisplayVigilance src/Dodge/Creature/Picture/Awareness.hs 53;" f crHasTarget src/Dodge/Creature/Test.hs 63;" f crHasTargetLOS src/Dodge/Creature/Test.hs 66;" f -crHeight src/Dodge/Base/Collide.hs 187;" f +crHeight src/Dodge/Base/Collide.hs 188;" f crHit src/Dodge/WorldEvent/ThingsHit.hs 167;" f crIXsNearCirc src/Dodge/Zoning/Creature.hs 33;" f crIXsNearPoint src/Dodge/Zoning/Creature.hs 15;" f @@ -3075,13 +3075,14 @@ crMvType src/Dodge/Creature/MoveType.hs 7;" f crNearPoint src/Dodge/Creature/Test.hs 129;" f crNumFreeSlots src/Dodge/Inventory/CheckSlots.hs 25;" f crOnSeg src/Dodge/WorldEvent/ThingsHit.hs 244;" f +crPainEffect src/Dodge/Creature/State.hs 50;" f crPathing src/Dodge/Creature/Action.hs 128;" f crRad src/Dodge/Creature/Radius.hs 7;" f crRightHandWall src/Dodge/Creature/HandPos.hs 76;" f crSafeDistFromTarg src/Dodge/Creature/Test.hs 72;" f crSetRoots src/Dodge/Inventory/Location.hs 56;" f crShape src/Dodge/Creature/Shape.hs 8;" f -crSpring src/Dodge/Update.hs 1000;" f +crSpring src/Dodge/Update.hs 996;" f crStratConMatches src/Dodge/Creature/Test.hs 78;" f crStrength src/Dodge/Creature/Statistics.hs 30;" f crUpdate src/Dodge/Creature/Update.hs 336;" f @@ -3099,7 +3100,7 @@ crabCorpse src/Dodge/Creature/Picture.hs 316;" f crabCrit src/Dodge/Creature/ChaseCrit.hs 42;" f crabCritInternal src/Dodge/Humanoid.hs 29;" f crabFeet src/Dodge/Creature/Picture.hs 226;" f -crabRoom src/Dodge/Room/Tutorial.hs 463;" f +crabRoom src/Dodge/Room/Tutorial.hs 465;" f crabUpperBody src/Dodge/Creature/Picture.hs 150;" f craftInfo src/Dodge/Item/Info.hs 168;" f craftItemSPic src/Dodge/Item/Draw/SPic.hs 41;" f @@ -3109,8 +3110,8 @@ createGas src/Dodge/Gas.hs 10;" f createHeadLamp src/Dodge/Euse.hs 64;" f createItemYou src/Dodge/Inventory/Add.hs 62;" f createLightMap src/Render.hs 26;" f -createProjectile src/Dodge/HeldUse.hs 1304;" f -createProjectileR src/Dodge/HeldUse.hs 1253;" f +createProjectile src/Dodge/HeldUse.hs 1305;" f +createProjectileR src/Dodge/HeldUse.hs 1254;" f createShell src/Dodge/Projectile/Create.hs 21;" f createShieldWall src/Dodge/Item/BackgroundEffect.hs 53;" f createUnusedLinkPos src/Dodge/Tree/Shift.hs 130;" f @@ -3304,7 +3305,7 @@ detV src/Geometry/Vector.hs 102;" f detector src/Dodge/Item/Held/Utility.hs 27;" f detectorColor src/Dodge/Item/Draw/SPic.hs 436;" f detectorInfo src/Dodge/Item/Info.hs 224;" f -determineProjectileTracking src/Dodge/HeldUse.hs 1224;" f +determineProjectileTracking src/Dodge/HeldUse.hs 1225;" f diagonalLinesRect src/Dodge/Room/Foreground.hs 52;" f did src/Dodge/Item/InvSize.hs 54;" f diffAngles src/Geometry.hs 205;" f @@ -3334,11 +3335,11 @@ divideLineExact src/Geometry.hs 276;" f divideLineOddNumPoints src/Geometry.hs 261;" f dmType src/Dodge/Damage.hs 38;" f doAimTwist src/Dodge/Creature/YourControl.hs 132;" f -doAnyEquipmentEffect src/Dodge/Creature/State.hs 146;" f +doAnyEquipmentEffect src/Dodge/Creature/State.hs 169;" f doBackspace src/Dodge/Update/Input/Text.hs 31;" f doBarrelSpin src/Dodge/Projectile/Update.hs 169;" f doBlBl src/Dodge/BlBl.hs 5;" f -doBounce src/Dodge/Base/Collide.hs 80;" f +doBounce src/Dodge/Base/Collide.hs 81;" f doButtonEvent src/Dodge/Button/Event.hs 9;" f doConLoop src/Loop.hs 138;" f doConLoop' src/Loop.hs 230;" f @@ -3347,7 +3348,7 @@ doCrBl src/Dodge/CreatureEffect.hs 30;" f doCrGroupUpdate src/Dodge/CrGroupUpdate.hs 5;" f doCrImp src/Dodge/CreatureEffect.hs 13;" f doCrWdAc src/Dodge/CreatureEffect.hs 48;" f -doDamage src/Dodge/Creature/State.hs 43;" f +doDamage src/Dodge/Creature/State.hs 44;" f doDeathToggle src/Dodge/WorldEffect.hs 99;" f doDeathTriggers src/Dodge/WorldEffect.hs 92;" f doDebugGet src/Dodge/Debug.hs 145;" f @@ -3366,7 +3367,7 @@ doDrag src/Dodge/Update/Input/InGame.hs 148;" f doDrawing src/Dodge/Render.hs 33;" f doDrawing' src/Dodge/Render.hs 44;" f doFloatFloat src/Dodge/FloatFunction.hs 5;" f -doGenFloat src/Dodge/HeldUse.hs 1185;" f +doGenFloat src/Dodge/HeldUse.hs 1186;" f doGravityPU src/Dodge/Projectile/Update.hs 35;" f doHeldUseEffect src/Dodge/HeldUse.hs 379;" f doInPlacements src/Dodge/Layout.hs 106;" f @@ -3415,7 +3416,7 @@ doublePair src/Geometry.hs 162;" f doublePairSet src/Geometry.hs 166;" f doubleTreeToIndentList src/Dodge/DoubleTree.hs 28;" f doubleV2 src/Geometry.hs 169;" f -drawARHUD src/Dodge/Creature/State.hs 198;" f +drawARHUD src/Dodge/Creature/State.hs 221;" f drawAimSweep src/Dodge/Render/Picture.hs 298;" f drawAllShadows src/Dodge/Shadows.hs 5;" f drawAnySelectionBox src/Dodge/Render/Picture.hs 132;" f @@ -3551,8 +3552,8 @@ drawZone src/Dodge/Debug/Picture.hs 152;" f drawZoneCirc src/Dodge/Debug/Picture.hs 293;" f drawZoneCol src/Dodge/Debug/Picture.hs 149;" f drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 286;" f -dropAll src/Dodge/Creature/Update.hs 426;" f -dropInventoryPath src/Dodge/HeldUse.hs 1379;" f +dropAll src/Dodge/Creature/Update.hs 427;" f +dropInventoryPath src/Dodge/HeldUse.hs 1380;" f dropItem src/Dodge/Creature/Action.hs 178;" f dropper src/Dodge/Item/Scope.hs 82;" f drumMag src/Dodge/Item/Ammo.hs 31;" f @@ -3691,7 +3692,7 @@ floorWire src/Dodge/Wire.hs 13;" f flyInertia src/Dodge/Creature/State/WalkCycle.hs 72;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 836;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 886;" f -foldMTRS src/Dodge/Room/Tutorial.hs 105;" f +foldMTRS src/Dodge/Room/Tutorial.hs 107;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 111;" f followImpulse src/Dodge/Creature/Impulse.hs 25;" f @@ -3732,8 +3733,8 @@ gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f gameRoomsFromRooms src/Dodge/Layout.hs 170;" f gameplayMenu src/Dodge/Menu.hs 152;" f gameplayMenuOptions src/Dodge/Menu.hs 155;" f -gasEffect src/Dodge/Update.hs 916;" f -gasType src/Dodge/HeldUse.hs 1143;" f +gasEffect src/Dodge/Update.hs 912;" f +gasType src/Dodge/HeldUse.hs 1144;" f gassesNearPoint src/Dodge/Zoning/Cloud.hs 12;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 23;" f generateGraphs src/Dodge/Menu.hs 147;" f @@ -3756,12 +3757,12 @@ getCloseObj src/Dodge/Update/Input/InGame.hs 543;" f getCommand src/Dodge/Terminal.hs 61;" f getCommands src/Dodge/Terminal.hs 58;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 56;" f -getCrsFromRooms src/Dodge/Room/Tutorial.hs 620;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 607;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 622;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 609;" f getDebugMouseOver src/Dodge/Update.hs 473;" f getDistortions src/Dodge/Render.hs 448;" f getEdgesCrossing src/Dodge/Path.hs 39;" f -getGrenadeHitEffect src/Dodge/HeldUse.hs 1292;" f +getGrenadeHitEffect src/Dodge/HeldUse.hs 1293;" f getInventoryPath src/Dodge/Inventory/Path.hs 9;" f getItemValue src/Dodge/Inventory/SelectionList.hs 160;" f getLaserDamage src/Dodge/HeldUse.hs 728;" f @@ -3770,11 +3771,11 @@ getLinksOfType src/Dodge/RoomLink.hs 40;" f getMaxLinesTM src/Dodge/Terminal/Type.hs 6;" f getMenuMouseContext src/Dodge/Update.hs 485;" f getNodePos src/Dodge/Path.hs 36;" f -getPJStabiliser src/Dodge/HeldUse.hs 1279;" f +getPJStabiliser src/Dodge/HeldUse.hs 1280;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f getRoomFromID src/Dodge/Room/Modify.hs 31;" f -getRoomsFromInts src/Dodge/Room/Tutorial.hs 603;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 605;" f getRootItemBounds src/Dodge/Render/HUD.hs 106;" f getRootItemInvID src/Dodge/Inventory/Location.hs 36;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f @@ -3850,10 +3851,10 @@ handleTextInput src/Dodge/Event/Input.hs 19;" f handleWindowMoveEvent src/Dodge/Event.hs 44;" f hardQuit src/Dodge/Concurrent.hs 32;" f hasAutoDoorBody src/Dodge/Creature/Test.hs 139;" f -hasButtonLOS src/Dodge/Base/Collide.hs 324;" f +hasButtonLOS src/Dodge/Base/Collide.hs 326;" f hasCaneGunDim src/Dodge/Item/InvSize.hs 48;" f -hasLOS src/Dodge/Base/Collide.hs 317;" f -hasLOSIndirect src/Dodge/Base/Collide.hs 333;" f +hasLOS src/Dodge/Base/Collide.hs 319;" f +hasLOSIndirect src/Dodge/Base/Collide.hs 335;" f hat src/Dodge/Item/Equipment.hs 65;" f head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 68;" f @@ -3873,9 +3874,9 @@ heldInfo src/Dodge/Item/Info.hs 92;" f heldItemAmmoSlots src/Dodge/Item/AmmoSlots.hs 20;" f heldItemBulkiness src/Dodge/Creature/YourControl.hs 165;" f heldItemInvLock src/Dodge/HeldUse.hs 469;" f -heldItemMuzVel src/Dodge/HeldUse.hs 1030;" f +heldItemMuzVel src/Dodge/HeldUse.hs 1031;" f heldItemMuzzles src/Dodge/HeldUse.hs 198;" f -heldItemRifling src/Dodge/HeldUse.hs 1072;" f +heldItemRifling src/Dodge/HeldUse.hs 1073;" f heldItemSPic src/Dodge/Item/Draw/SPic.hs 236;" f heldItemWeight src/Dodge/Creature/Statistics.hs 86;" f heldPositionInfo src/Dodge/Item/Info.hs 240;" f @@ -3890,6 +3891,7 @@ hit1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 660;" f hitEffFromBul src/Dodge/Bullet.hs 158;" f hitS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 812;" f hiveCrit src/Dodge/Creature/ChaseCrit.hs 98;" f +hivePainEffect src/Dodge/Creature/State.hs 65;" f holdForm src/Dodge/Creature/Boid.hs 139;" f holsterWeapon src/Dodge/Creature/Volition.hs 14;" f homingModule src/Dodge/Item/Scope.hs 50;" f @@ -3902,6 +3904,7 @@ hoverCritHoverSound src/Dodge/Creature/Update.hs 313;" f hoverCritInternal src/Dodge/Humanoid.hs 46;" f hoverCritMv src/Dodge/Creature/ReaderUpdate.hs 229;" f hoverDeathSounds src/Dodge/Creature/Vocalization.hs 62;" f +hoverPainEffect src/Dodge/Creature/State.hs 57;" f iShape src/Dodge/Placement/Instance/LightSource.hs 58;" f icosahedronPoints src/Polyhedra/Geodesic.hs 12;" f icosohedronFaces src/Polyhedra/Geodesic.hs 19;" f @@ -3975,8 +3978,8 @@ invDimColor src/Dodge/DisplayInventory.hs 190;" f invHead src/Dodge/Render/HUD.hs 426;" f invIMDT src/Dodge/Item/Grammar.hs 256;" f invIndents src/Dodge/Item/Grammar.hs 263;" f -invItemEffs src/Dodge/Creature/State.hs 68;" f -invItemLocUpdate src/Dodge/Creature/State.hs 76;" f +invItemEffs src/Dodge/Creature/State.hs 91;" f +invItemLocUpdate src/Dodge/Creature/State.hs 99;" f invRootMap src/Dodge/Item/Grammar.hs 237;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 33;" f invSetSelection src/Dodge/Inventory.hs 288;" f @@ -4077,6 +4080,7 @@ itmEquipSiteInfo src/Dodge/Item/Info.hs 249;" f itmSpaceInfo src/Dodge/Item/Info.hs 25;" f itmUsageInfo src/Dodge/Item/Info.hs 230;" f jShape src/Dodge/Placement/Instance/LightSource.hs 73;" f +jitterPain src/Dodge/Creature/State.hs 77;" f joinItemsInList src/Dodge/Item/Grammar.hs 217;" f joystick src/Dodge/Item/Scope.hs 158;" f jps0' src/Dodge/LevelGen/PlacementHelper.hs 61;" f @@ -4095,7 +4099,7 @@ keyCardRunPastRand src/Dodge/LockAndKey.hs 37;" f keyPic src/Dodge/Item/Draw/SPic.hs 442;" f keyholeCorridor src/Dodge/Room/Corridor.hs 45;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 798;" f -lChasm src/Dodge/Room/Tutorial.hs 184;" f +lChasm src/Dodge/Room/Tutorial.hs 186;" f lConnect src/Dodge/Render/Connectors.hs 43;" f lConnectCol src/Dodge/Render/Connectors.hs 46;" f lConnectMulti src/Dodge/Render/Connectors.hs 51;" f @@ -4163,7 +4167,7 @@ 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 415;" f -loadAmmoTut src/Dodge/Room/Tutorial.hs 467;" f +loadAmmoTut src/Dodge/Room/Tutorial.hs 469;" f loadDodgeConfig src/Dodge/Config.hs 30;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 30;" f loadMuzzle src/Dodge/HeldUse.hs 654;" f @@ -4223,7 +4227,7 @@ main test/Spec.hs 12;" f makeArc src/Picture/Base.hs 149;" f makeBlip src/Dodge/RadarSweep.hs 70;" f makeBlockDebris src/Dodge/Block/Debris.hs 57;" f -makeBullet src/Dodge/HeldUse.hs 1009;" f +makeBullet src/Dodge/HeldUse.hs 1010;" f makeButton src/Dodge/LevelGen/Switch.hs 16;" f makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f makeColorTermLine src/Dodge/Terminal.hs 124;" f @@ -4309,10 +4313,10 @@ mcProxSensorUpdate src/Dodge/Machine/Update.hs 165;" f mcProxTest src/Dodge/Machine/Update.hs 246;" f mcProximitySensorUpdate src/Dodge/Machine/Update.hs 207;" f mcSPic src/Dodge/Render/ShapePicture.hs 153;" f -mcShootAuto src/Dodge/HeldUse.hs 1197;" f -mcShootLaser src/Dodge/HeldUse.hs 1189;" f +mcShootAuto src/Dodge/HeldUse.hs 1198;" f +mcShootLaser src/Dodge/HeldUse.hs 1190;" f mcTypeUpdate src/Dodge/Machine/Update.hs 32;" f -mcUseHeld src/Dodge/HeldUse.hs 1114;" f +mcUseHeld src/Dodge/HeldUse.hs 1115;" f mcUseItem src/Dodge/Machine/Update.hs 107;" f megaBattery src/Dodge/Item/Ammo.hs 54;" f megaShellMag src/Dodge/Item/Ammo.hs 44;" f @@ -4342,9 +4346,9 @@ mglCreate src/GLHelp.hs 8;" f mglDelete src/GLHelp.hs 14;" f midBarDecoration src/Dodge/Placement/TopDecoration.hs 23;" f midBounds src/Dodge/Room/Foreground.hs 150;" f -midChasm src/Dodge/Room/Tutorial.hs 213;" f -midChasmPlatform src/Dodge/Room/Tutorial.hs 235;" f -midChasmSpit src/Dodge/Room/Tutorial.hs 303;" f +midChasm src/Dodge/Room/Tutorial.hs 215;" f +midChasmPlatform src/Dodge/Room/Tutorial.hs 237;" f +midChasmSpit src/Dodge/Room/Tutorial.hs 305;" f midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4417,7 +4421,7 @@ muzzleWallCheck src/Dodge/Update.hs 349;" f mvButton src/Dodge/Placement/PlaceSpot.hs 170;" f mvCr src/Dodge/Placement/PlaceSpot.hs 173;" f mvFS src/Dodge/Placement/PlaceSpot.hs 176;" f -mvGust src/Dodge/Update.hs 907;" f +mvGust src/Dodge/Update.hs 903;" f mvLS src/Dodge/Placement/PlaceSpot.hs 215;" f mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f mvPointMeleeTarg src/Dodge/Creature/Boid.hs 327;" f @@ -4448,7 +4452,7 @@ noShape src/ShapePicture.hs 29;" f noclipCheck src/Dodge/WallCreatureCollisions.hs 22;" f nodeNear src/Dodge/Path.hs 94;" f nodesNear src/Dodge/Path.hs 100;" f -nonConvexChasm src/Dodge/Room/Tutorial.hs 300;" f +nonConvexChasm src/Dodge/Room/Tutorial.hs 302;" f nonCornerLinks src/Dodge/Room/SensorDoor.hs 53;" f normalGait src/Dodge/Creature/State/WalkCycle.hs 166;" f normalTo8 src/Shader/Poke.hs 475;" f @@ -4507,11 +4511,11 @@ overPos src/Picture/Base.hs 298;" f overPosObj src/Shape.hs 279;" f overPosSH src/Shape.hs 263;" f overPosSP src/ShapePicture.hs 41;" f -overlapCircWalls src/Dodge/Base/Collide.hs 253;" f -overlapCircWallsClosest src/Dodge/Base/Collide.hs 292;" f -overlapSegCrs src/Dodge/Base/Collide.hs 63;" f -overlapSegCrs' src/Dodge/Base/Collide.hs 71;" f -overlapSegWalls src/Dodge/Base/Collide.hs 233;" f +overlapCircWalls src/Dodge/Base/Collide.hs 255;" f +overlapCircWallsClosest src/Dodge/Base/Collide.hs 294;" f +overlapSegCrs src/Dodge/Base/Collide.hs 64;" f +overlapSegCrs' src/Dodge/Base/Collide.hs 72;" f +overlapSegWalls src/Dodge/Base/Collide.hs 235;" f overrideInternal src/Dodge/Creature/ReaderUpdate.hs 281;" f overrideMeleeCloseTarget src/Dodge/Creature/ReaderUpdate.hs 38;" f overwriteLabel src/Dodge/Tree/Compose.hs 32;" f @@ -4525,7 +4529,7 @@ pairsToSCC src/Dodge/Graph.hs 32;" f paletteToColor src/Color.hs 85;" f parseItem src/Dodge/Debug/Terminal.hs 62;" f parseNum src/Dodge/Debug/Terminal.hs 77;" f -passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 685;" f +passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 687;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathEdgeObstructed src/Dodge/Path.hs 87;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f @@ -4596,7 +4600,7 @@ pointerToItemID src/Dodge/Item/Location.hs 42;" f pointerYourRootItem src/Dodge/Item/Location.hs 33;" f pointerYourSelectedItem src/Dodge/Item/Location.hs 26;" f pointsToPoly src/Geometry/ConvexPoly.hs 37;" f -poisonSPic src/Dodge/Creature/Update.hs 422;" f +poisonSPic src/Dodge/Creature/Update.hs 423;" f poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f poke34 src/Shader/Poke.hs 518;" f pokeArrayOff src/Shader/Poke.hs 530;" f @@ -4632,8 +4636,8 @@ pokeWall src/Shader/Poke.hs 80;" f pokeWallsWindows src/Shader/Poke.hs 52;" f poly3 src/Picture/Base.hs 76;" f poly3Col src/Picture/Base.hs 80;" f -polyChasm src/Dodge/Room/Tutorial.hs 387;" f -polyChasmC src/Dodge/Room/Tutorial.hs 399;" f +polyChasm src/Dodge/Room/Tutorial.hs 389;" f +polyChasmC src/Dodge/Room/Tutorial.hs 401;" f polyCirc src/Shape.hs 48;" f polyCircx src/Shape.hs 53;" f polyCornerDist src/Geometry/Polygon.hs 69;" f @@ -4729,7 +4733,7 @@ putLitButOnPosExtTrig src/Dodge/Placement/Instance/Button.hs 97;" f putLitButOnPosExtTrig' src/Dodge/Placement/Instance/Button.hs 100;" f putMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 58;" f putShape src/Dodge/Room/Foreground.hs 134;" f -putSingleLight src/Dodge/Room/Tutorial.hs 501;" f +putSingleLight src/Dodge/Room/Tutorial.hs 503;" f putSlideDr src/Dodge/Door/PutSlideDoor.hs 12;" f putStrLnAppend src/Dodge/LevelGen.hs 84;" f putTerminal src/Dodge/Placement/Instance/Terminal.hs 52;" f @@ -4753,7 +4757,7 @@ rLauncherX src/Dodge/Item/Held/Launcher.hs 30;" f rToOnward src/Dodge/Cleat.hs 21;" f radToCompass src/Dodge/Inventory/SelectionList.hs 111;" f radToDeg src/Geometry/Vector.hs 131;" f -radiusSpring src/Dodge/Update.hs 989;" f +radiusSpring src/Dodge/Update.hs 985;" f randBlockBreakWeapon src/Dodge/Item/Random.hs 7;" f randC1 src/Dodge/Placement/Instance/Creature.hs 8;" f randDirPS src/Dodge/PlacementSpot.hs 58;" f @@ -4971,7 +4975,7 @@ scaleSH src/Shape.hs 271;" f scalp src/Dodge/Creature/Picture.hs 371;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 82;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f -scorchSPic src/Dodge/Creature/Update.hs 419;" f +scorchSPic src/Dodge/Creature/Update.hs 420;" f screenBox src/Dodge/Base/Window.hs 54;" f screenPolygon src/Dodge/Base/Window.hs 18;" f screenPolygonBord src/Dodge/Base/Window.hs 28;" f @@ -5017,7 +5021,7 @@ sensorReqToString src/Dodge/Machine/Update.hs 240;" f sensorRoom src/Dodge/Room/SensorDoor.hs 27;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 59;" f sensorSPic src/Dodge/Machine/Draw.hs 89;" f -sensorTut src/Dodge/Room/Tutorial.hs 629;" f +sensorTut src/Dodge/Room/Tutorial.hs 631;" f sensorTypeDamages src/Dodge/Machine/Update.hs 286;" f sensorTypeDamages src/Dodge/Wall/Damage.hs 92;" f setChannelPos src/Sound.hs 152;" f @@ -5040,7 +5044,7 @@ setOutLinks src/Dodge/RoomLink.hs 49;" f setOutLinksByType src/Dodge/RoomLink.hs 76;" f setOutLinksPD src/Dodge/RoomLink.hs 96;" f setPixelOffsetBounded src/Dodge/Update/Input/InGame.hs 137;" f -setRBCreatureTargeting src/Dodge/Creature/State.hs 295;" f +setRBCreatureTargeting src/Dodge/Creature/State.hs 318;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 360;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 93;" f setShaderSource src/Shader/Compile.hs 121;" f @@ -5049,7 +5053,7 @@ setSlimeDir src/Dodge/Creature/Update.hs 225;" f setSoundVolume src/Sound.hs 159;" f setTile src/Dodge/Layout.hs 78;" f setTiles src/Dodge/Layout.hs 68;" f -setTreeInts src/Dodge/Room/Tutorial.hs 112;" f +setTreeInts src/Dodge/Room/Tutorial.hs 114;" f setViewDistance src/Dodge/Update/Camera.hs 240;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 71;" f setViewport src/Dodge/Render.hs 453;" f @@ -5101,9 +5105,9 @@ shiftRoomShiftToLink src/Dodge/Room/Link.hs 74;" f shiftSetDown src/Dodge/Inventory.hs 174;" f shiftSetUp src/Dodge/Inventory.hs 168;" f shiftTile src/Dodge/Room/Link.hs 49;" f -shineTargetLaser src/Dodge/Creature/State.hs 206;" f -shineTorch src/Dodge/Creature/State.hs 243;" f -shootBullet src/Dodge/HeldUse.hs 1003;" f +shineTargetLaser src/Dodge/Creature/State.hs 229;" f +shineTorch src/Dodge/Creature/State.hs 266;" f +shootBullet src/Dodge/HeldUse.hs 1004;" f shootBullets src/Dodge/HeldUse.hs 997;" f shootFirstMiss src/Dodge/Creature/Volition.hs 33;" f shootLaser src/Dodge/HeldUse.hs 870;" f @@ -5111,7 +5115,7 @@ shootPlasmaBall src/Dodge/HeldUse.hs 913;" f shootPulseBall src/Dodge/HeldUse.hs 926;" f shootPulseLaser src/Dodge/HeldUse.hs 899;" f shootShatter src/Dodge/Item/Weapon/Shatter.hs 12;" f -shootTeslaArc src/Dodge/HeldUse.hs 1214;" f +shootTeslaArc src/Dodge/HeldUse.hs 1215;" f shootTillEmpty src/Dodge/Creature/Volition.hs 18;" f shootTractorBeam src/Dodge/HeldUse.hs 839;" f shootersRoom src/Dodge/Room/Room.hs 345;" f @@ -5139,7 +5143,7 @@ shufflePair src/RandomHelp.hs 166;" f shuffleRoomPos src/Dodge/Layout.hs 103;" f shuffleTail src/RandomHelp.hs 78;" f sigmoid src/Dodge/Base.hs 151;" f -simpleCrSprings src/Dodge/Update.hs 994;" f +simpleCrSprings src/Dodge/Update.hs 990;" f simpleTermMessage src/Dodge/Terminal.hs 275;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 816;" f sineRaisePitchTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 854;" f @@ -5250,8 +5254,8 @@ spreadGunCrit src/Dodge/Creature/SpreadGunCrit.hs 11;" f spreadOut src/Dodge/Creature/Boid.hs 160;" f sps src/Dodge/LevelGen/PlacementHelper.hs 30;" f sps0 src/Dodge/LevelGen/PlacementHelper.hs 42;" f -sqPlatformChasm src/Dodge/Room/Tutorial.hs 264;" f -sqSpitChasm src/Dodge/Room/Tutorial.hs 279;" f +sqPlatformChasm src/Dodge/Room/Tutorial.hs 266;" f +sqSpitChasm src/Dodge/Room/Tutorial.hs 281;" f square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 129;" f @@ -5430,7 +5434,7 @@ toBinary src/Dodge/Inventory/SelectionList.hs 154;" f toBothLnk src/Dodge/RoomLink.hs 136;" f toClosestMultiple src/HelpNum.hs 3;" f toColor8 src/Color.hs 158;" f -toDeathCarriage src/Dodge/Creature/Update.hs 381;" f +toDeathCarriage src/Dodge/Creature/Update.hs 382;" f toFloatVAs src/Shader/Compile.hs 66;" f toLabel src/Dodge/Cleat.hs 16;" f toMultiset src/Multiset.hs 64;" f @@ -5509,7 +5513,7 @@ trunkDepth src/TreeHelp.hs 164;" f tryAttachItems src/Dodge/Item/Grammar.hs 35;" f tryClickUse src/Dodge/Creature/YourControl.hs 207;" f tryCombine src/Dodge/Update/Input/InGame.hs 555;" f -tryDrawToCapacitor src/Dodge/Creature/State.hs 156;" f +tryDrawToCapacitor src/Dodge/Creature/State.hs 179;" f tryDropSelected src/Dodge/Update/Input/InGame.hs 159;" f tryEvadeSideways src/Dodge/Creature/Action.hs 105;" f tryGetChannel src/Sound.hs 99;" f @@ -5521,18 +5525,18 @@ tryPutItemInInv src/Dodge/Inventory/Add.hs 24;" f tryPutItemInInvAt src/Dodge/Inventory/Add.hs 54;" f trySeedFromClipboard src/Dodge/Menu.hs 94;" f trySpin src/Dodge/Projectile/Update.hs 120;" f -trySynthBullet src/Dodge/Creature/State.hs 172;" f +trySynthBullet src/Dodge/Creature/State.hs 195;" f tryThrust src/Dodge/Projectile/Update.hs 126;" f -tryUseParent src/Dodge/Creature/State.hs 150;" f +tryUseParent src/Dodge/Creature/State.hs 173;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 23;" f tutAnoTree src/Dodge/Room/Tutorial.hs 55;" f -tutDrop src/Dodge/Room/Tutorial.hs 117;" f -tutHub src/Dodge/Room/Tutorial.hs 527;" f -tutLight src/Dodge/Room/Tutorial.hs 431;" f -tutRezBox src/Dodge/Room/Tutorial.hs 640;" f +tutDrop src/Dodge/Room/Tutorial.hs 119;" f +tutHub src/Dodge/Room/Tutorial.hs 529;" f +tutLight src/Dodge/Room/Tutorial.hs 433;" f +tutRezBox src/Dodge/Room/Tutorial.hs 642;" f tutRoomTree src/Dodge/Floor.hs 20;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 665;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 667;" f tweenAngles src/Geometry/Vector.hs 198;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 83;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 39;" f @@ -5574,8 +5578,7 @@ updateBarreloid src/Dodge/Barreloid.hs 16;" f updateBaseWheelEvent src/Dodge/Update/Scroll.hs 30;" f updateBeeCrit src/Dodge/Creature/Update.hs 113;" f updateBeeFromPheremones src/Dodge/Creature/Update.hs 106;" f -updateBeePheremone src/Dodge/Update.hs 786;" f -updateBeePheremones src/Dodge/Update.hs 783;" f +updateBeePheremone src/Dodge/Update.hs 783;" f updateBounds src/Dodge/Update/Camera.hs 262;" f updateBulVel src/Dodge/Bullet.hs 57;" f updateBullet src/Dodge/Bullet.hs 22;" f @@ -5585,7 +5588,7 @@ updateCamera src/Dodge/Update/Camera.hs 33;" f updateCarriage src/Dodge/Creature/State/WalkCycle.hs 20;" f updateCarriage' src/Dodge/Creature/State/WalkCycle.hs 25;" f updateCloseObjects src/Dodge/Inventory.hs 126;" f -updateCloud src/Dodge/Update.hs 920;" f +updateCloud src/Dodge/Update.hs 916;" f updateClouds src/Dodge/Update.hs 780;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 40;" f updateCombineSections src/Dodge/DisplayInventory.hs 47;" f @@ -5603,8 +5606,8 @@ updateDistortion src/Dodge/Distortion.hs 8;" f updateDistortions src/Dodge/Update.hs 662;" f updateDoor src/Dodge/Door.hs 22;" f updateDoors src/Dodge/Update.hs 403;" f -updateDust src/Dodge/Update.hs 968;" f -updateDusts src/Dodge/Update.hs 795;" f +updateDust src/Dodge/Update.hs 964;" f +updateDusts src/Dodge/Update.hs 791;" f updateEdge src/Dodge/Path.hs 45;" f updateEdgeWallObs src/Dodge/Update/WallDamage.hs 39;" f updateEdgesWall src/Dodge/Update/WallDamage.hs 23;" f @@ -5618,9 +5621,8 @@ updateFlames src/Dodge/Update.hs 768;" f updateFloatingCamera src/Dodge/Update/Camera.hs 38;" f updateFunctionKey src/Dodge/Update/Input/InGame.hs 372;" f updateFunctionKeys src/Dodge/Update/Input/InGame.hs 368;" f -updateGas src/Dodge/Update.hs 942;" f -updateGasses src/Dodge/Update.hs 792;" f -updateGusts src/Dodge/Update.hs 904;" f +updateGas src/Dodge/Update.hs 938;" f +updateGusts src/Dodge/Update.hs 900;" f updateHiveCrit src/Dodge/Creature/Update.hs 85;" f updateIMl src/Dodge/Update.hs 635;" f updateIMl' src/Dodge/Update.hs 638;" f @@ -5628,7 +5630,7 @@ updateInGameCamera src/Dodge/Update/Camera.hs 86;" f updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 438;" f updateInt2Map src/Dodge/Zoning/Base.hs 94;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 86;" f -updateItemTargeting src/Dodge/Creature/State.hs 265;" f +updateItemTargeting src/Dodge/Creature/State.hs 288;" f updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 405;" f updateKeyInGame src/Dodge/Update/Input/InGame.hs 432;" f updateKeysInGame src/Dodge/Update/Input/InGame.hs 87;" f @@ -5656,7 +5658,7 @@ updatePlasmaBall src/Dodge/Update.hs 528;" f updatePlasmaBalls src/Dodge/Update.hs 676;" f updatePreload src/Preload/Update.hs 21;" f updateProjectile src/Dodge/Projectile/Update.hs 26;" f -updatePulse src/Dodge/Creature/Update.hs 434;" f +updatePulse src/Dodge/Creature/Update.hs 435;" f updatePulseBall src/Dodge/Update.hs 548;" f updatePulseLaser src/Dodge/Update.hs 723;" f updatePulseLasers src/Dodge/Update.hs 523;" f @@ -5718,9 +5720,9 @@ upperPrismPolyScale src/Shape.hs 209;" f upperPrismPolyTS src/Shape.hs 112;" f upperRounded src/Shape.hs 178;" f useBulletPayload src/Dodge/Bullet.hs 117;" f -useGasParams src/Dodge/HeldUse.hs 1119;" f +useGasParams src/Dodge/HeldUse.hs 1120;" f useHotkey src/Dodge/Creature/YourControl.hs 57;" f -useInventoryPath src/Dodge/HeldUse.hs 1410;" f +useInventoryPath src/Dodge/HeldUse.hs 1411;" f useItem src/Dodge/Creature/Impulse/UseItem.hs 19;" f useItemLoc src/Dodge/Creature/Impulse/UseItem.hs 26;" f useLnkRoomPos src/Dodge/PlacementSpot.hs 262;" f @@ -5728,11 +5730,11 @@ useLoadedAmmo src/Dodge/HeldUse.hs 741;" f useMagShield src/Dodge/Euse.hs 33;" f useNormalCamera src/Dodge/Camera.hs 6;" f usePayload src/Dodge/Payload.hs 18;" f -useRewindGun src/Dodge/HeldUse.hs 1370;" f +useRewindGun src/Dodge/HeldUse.hs 1371;" f useRoomPosCond src/Dodge/PlacementSpot.hs 187;" f useRoomPosRoomCond src/Dodge/PlacementSpot.hs 190;" f -useStopWatch src/Dodge/HeldUse.hs 1351;" f -useTimeScrollGun src/Dodge/HeldUse.hs 1359;" f +useStopWatch src/Dodge/HeldUse.hs 1352;" f +useTimeScrollGun src/Dodge/HeldUse.hs 1360;" f useUnusedLnk src/Dodge/PlacementSpot.hs 178;" f usedRoomInLinkPoss src/Dodge/PlacementSpot.hs 209;" f usedRoomLinkPoss src/Dodge/PlacementSpot.hs 216;" f @@ -5762,7 +5764,7 @@ viewGameRoomBoundaries src/Dodge/Debug/Picture.hs 332;" f viewRoomBoundaries src/Dodge/Debug/Picture.hs 341;" f viewTarget src/Dodge/Creature/ReaderUpdate.hs 254;" f violet src/Color.hs 48;" f -visibleWalls src/Dodge/Base/Collide.hs 238;" f +visibleWalls src/Dodge/Base/Collide.hs 240;" f visionCheck src/Dodge/Creature/Perception.hs 162;" f volleyGun src/Dodge/Item/Held/Cane.hs 15;" f volleyGunShape src/Dodge/Item/Draw/SPic.hs 356;" f @@ -5773,10 +5775,10 @@ wallBlips src/Dodge/RadarSweep.hs 99;" f wallBuffer src/Dodge/WallCreatureCollisions.hs 99;" f wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f wallMovement src/Dodge/WallCreatureCollisions.hs 68;" f -wallToSurface src/Dodge/Base/Collide.hs 202;" f +wallToSurface src/Dodge/Base/Collide.hs 204;" f wallsFromRooms src/Dodge/Layout.hs 158;" f wallsToDraw src/Dodge/Render/Walls.hs 18;" f -warmupSound src/Dodge/HeldUse.hs 1404;" f +warmupSound src/Dodge/HeldUse.hs 1405;" f warningRooms src/Dodge/Room/Warning.hs 34;" f warp1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 910;" f wasdAim src/Dodge/Creature/YourControl.hs 116;" f @@ -5848,7 +5850,7 @@ wristArmour src/Dodge/Item/Equipment.hs 35;" f wristInvisibility src/Dodge/Item/Equipment.hs 80;" f writeConfig src/Dodge/Menu.hs 180;" f writeSaveSlot src/Dodge/Save.hs 36;" f -xChasm src/Dodge/Room/Tutorial.hs 151;" f +xChasm src/Dodge/Room/Tutorial.hs 153;" f xCylinder src/Shape.hs 129;" f xCylinderST src/Shape.hs 126;" f xIntercepts src/Dodge/Zoning/Base.hs 66;" f @@ -5870,7 +5872,7 @@ yourRootItem src/Dodge/Base/You.hs 26;" f yourRootItemDT src/Dodge/Base/You.hs 32;" f yourSelectedItem src/Dodge/Base/You.hs 20;" f yourStatsInfo src/Dodge/Creature/Info.hs 27;" f -zChasm src/Dodge/Room/Tutorial.hs 197;" f +zChasm src/Dodge/Room/Tutorial.hs 199;" f zConnect src/Dodge/Render/Connectors.hs 18;" f zConnectCol src/Dodge/Render/Connectors.hs 29;" f zConnectColMidX src/Dodge/Render/Connectors.hs 32;" f