From ef7aee82e5341c890f4ff1842b4e0187fe748044 Mon Sep 17 00:00:00 2001 From: justin Date: Sun, 29 Dec 2024 00:33:55 +0000 Subject: [PATCH] Allow grenades to bounce --- src/Dodge/Base/Collide.hs | 1 - src/Dodge/Data/Item/Use/Consumption/Ammo.hs | 1 - src/Dodge/Item/Display.hs | 1 - src/Dodge/Projectile/Create.hs | 4 +- src/Dodge/Projectile/Update.hs | 62 +++++----- src/Dodge/TestString.hs | 4 +- tags | 122 ++++++++++---------- 7 files changed, 100 insertions(+), 95 deletions(-) diff --git a/src/Dodge/Base/Collide.hs b/src/Dodge/Base/Collide.hs index ae95488a2..6dc4c30e4 100644 --- a/src/Dodge/Base/Collide.hs +++ b/src/Dodge/Base/Collide.hs @@ -70,7 +70,6 @@ doBounce :: Float -> Point2 -> Point2 -> (Point2, Maybe Wall) -> Maybe (Point2, {-# INLINE doBounce #-} doBounce x sp ep (p, mwl) = mwl <&> \wl -> - --( p +.+ normalizeV (vNormal (uncurry (-.-) (_wlLine wl))) ( p +.+ normalizeV (vNormal (uncurry (-.-) (_wlLine wl))) , reflVelWallDamp x wl (ep -.- sp) ) diff --git a/src/Dodge/Data/Item/Use/Consumption/Ammo.hs b/src/Dodge/Data/Item/Use/Consumption/Ammo.hs index 334d63763..e800aeac0 100644 --- a/src/Dodge/Data/Item/Use/Consumption/Ammo.hs +++ b/src/Dodge/Data/Item/Use/Consumption/Ammo.hs @@ -19,7 +19,6 @@ data ProjectileUpdate = ThrustPU {_pjuStart :: Int, _pjuEnd :: Int} | StartSpinPU {_pjuTime :: Int, _pjuCID :: Int, _pjuSpinAmound :: Int} | RemoteDirectionPU {_pjuStart :: Int, _pjuEnd :: Int} - | ReduceSpinPU {_pjuReduceSpin :: Float} | ApplyGravityPU deriving (Show, Eq, Ord, Read) --Generic, Flat) diff --git a/src/Dodge/Item/Display.hs b/src/Dodge/Item/Display.hs index b9e5454ec..a8e480b6a 100644 --- a/src/Dodge/Item/Display.hs +++ b/src/Dodge/Item/Display.hs @@ -63,7 +63,6 @@ itemBaseName = \case ATTACH ait -> showAttachItem ait AMMOMAG ait -> show ait TARGETING tt -> show tt --- BULLETMOD (BulletModTrajectory btt) -> show btt BULLETMOD (BulletModPayload btt) -> show btt BULLETMOD (BulletModEffect btt) -> show btt diff --git a/src/Dodge/Projectile/Create.hs b/src/Dodge/Projectile/Create.hs index ed1ce96f2..8e23b07b1 100644 --- a/src/Dodge/Projectile/Create.hs +++ b/src/Dodge/Projectile/Create.hs @@ -35,7 +35,7 @@ createShell mdetonator mscreen pjtype payload muz cr w = w [-- TimePU StartSpinPU (lifespan - 15) (_crID cr) spinamount , RemoteDirectionPU (lifespan - thrustdelay) 0 - , ReduceSpinPU (1 - spindrag * 2 / 200) +-- , ReduceSpinPU (1 - spindrag * 2 / 200) ] <> thrustorgrav , _pjType = pjtype , _pjDetonatorID = mdetonator @@ -51,7 +51,7 @@ createShell mdetonator mscreen pjtype payload muz cr w = w Grenade {}-> [ApplyGravityPU] Rocket{} -> [ThrustPU (lifespan - thrustdelay) 0] RetiredProjectile -> [] - spindrag = 1 +-- spindrag = 1 spinamount = 2 thrustdelay = 20 updatedetonator = fromMaybe id $ do diff --git a/src/Dodge/Projectile/Update.hs b/src/Dodge/Projectile/Update.hs index 9dee12289..afeb4ab8d 100644 --- a/src/Dodge/Projectile/Update.hs +++ b/src/Dodge/Projectile/Update.hs @@ -15,6 +15,7 @@ import Dodge.Movement.Turn import Dodge.Payload import Dodge.SoundLogic import Dodge.WorldEvent.Cloud +import Dodge.WorldEvent.ThingsHit import Geometry import qualified IntMapHelp as IM import LensHelp @@ -22,15 +23,15 @@ import NewInt import RandomHelp updateProjectile :: Projectile -> World -> World -updateProjectile pj w = - decTimMvVel pj . - shellCollisionCheck - pj $ - foldl' (flip $ upProjectile pj) w (_pjUpdates pj) +updateProjectile pj w = + (cWorld . lWorld . projectiles . ix (pj ^. pjID) %~ + decTimMvVel) + . shellCollisionCheck + pj + $ foldl' (flip $ upProjectile pj) w (_pjUpdates pj) upProjectile :: Projectile -> ProjectileUpdate -> World -> World upProjectile pj pu = case pu of --- TimePU -> decTimMvVel pj ThrustPU st et | act st et -> doThrust pj (pj ^? pjType . rkSmoke . _Just) | otherwise -> id @@ -40,11 +41,7 @@ upProjectile pj pu = case pu of RemoteDirectionPU st et | act st et -> pjRemoteSetDirection (pj ^? pjType . rkHoming) pj | otherwise -> id - ReduceSpinPU x -> reduceSpinBy x (_pjID pj) --- DestroyPU mitid 0 -> destroyProjectile mitid (_pjID pj) - -- the following requires that this is at the top of the update list, which is - -- not ideal --- DestroyPU _ _ -> cWorld . lWorld . projectiles . ix (_pjID pj) . pjUpdates . ix 0 . pjuTimer -~ 1 + -- ReduceSpinPU x -> reduceSpinBy x (_pjID pj) ApplyGravityPU -> applyGravityPU pj where time = _pjTimer pj @@ -84,11 +81,12 @@ shellCollisionCheck :: World -> World shellCollisionCheck pj w - | RetiredProjectile <- pj ^. pjType - , time <= -30 - = destroyProjectile (pj ^. pjScreenID) (_pjID pj) w + | RetiredProjectile <- pj ^. pjType + , time <= 0 = + destroyProjectile (pj ^. pjScreenID) (_pjID pj) w | RetiredProjectile <- pj ^. pjType = w - | anythingHitCirc 2 oldPos (oldPos + _pjVel pj) w = g + | Just thit <- thingHit oldPos (oldPos + _pjVel pj) w = tryShellBounce thit pj w + -- | anythingHitCirc 2 oldPos (oldPos + _pjVel pj) w = g | time <= 0 = g | otherwise = w where @@ -96,6 +94,19 @@ shellCollisionCheck pj w time = _pjTimer pj oldPos = _pjPos pj +tryShellBounce :: (Point2, Either Creature Wall) -> Projectile -> World -> World +tryShellBounce (p, Right wl) pj w + | Just x <- pj ^? pjType . gnHitEffect . bounceTolerance = + if abs (dotV (pj ^. pjVel) (vNormal hitline)) < x + then w & cWorld . lWorld . projectiles . ix (_pjID pj) . pjVel %~ reflectIn + hitline + & cWorld . lWorld . projectiles . ix (_pjID pj) . pjPos .~ p + & soundStart (ShellSound (pj ^. pjID)) (pj ^. pjPos) click1S Nothing + else explodeShell pj w + where + hitline = normalizeV $ uncurry (-) $ _wlLine wl +tryShellBounce _ pj w = explodeShell pj w + destroyProjectile :: Maybe (NewInt ItmInt) -> Int -> World -> World destroyProjectile mitid pjid w = w & cWorld . lWorld . projectiles %~ IM.delete pjid @@ -114,7 +125,7 @@ doThrust pj smoke w = & randGen .~ g & cWorld . lWorld . projectiles . ix i . pjVel %~ (\v -> accel +.+ frict *.* v) & soundContinue (ShellSound i) newPos missileLaunchS (Just 1) --- & makeFlamelet (oldPos -.- vel) (vel + 2 * rotateV (pi + sparkD) accel) 3 10 + -- & makeFlamelet (oldPos -.- vel) (vel + 2 * rotateV (pi + sparkD) accel) 3 10 & makeFlamelet (oldPos -.- vel) (vel +.+ rotateV (pi + sparkD) accel) 3 10 & shellTrailCloud lifetime @@ -168,16 +179,13 @@ pjRemoteSetDirection ph pj w = case ph of where lw = w ^. cWorld . lWorld -reduceSpinBy :: Float -> Int -> World -> World -reduceSpinBy x pjid = cWorld . lWorld . projectiles . ix pjid . pjSpin *~ x - -decTimMvVel :: Projectile -> World -> World -decTimMvVel pj = - cWorld . lWorld . projectiles . ix (_pjID pj) - %~ ( (pjTimer -~ 1) - . (pjPos +~ _pjVel pj) - . (pjDir +~ _pjSpin pj) - ) +decTimMvVel :: Projectile -> Projectile +decTimMvVel pj = pj + & pjSpin *~ 0.99 + & pjTimer -~ 1 + & pjPos +~ _pjVel pj + & pjDir +~ _pjSpin pj + explodeShell :: Projectile -> @@ -187,6 +195,8 @@ explodeShell pj w = w & cWorld . lWorld . projectiles . ix pjid . pjUpdates .~ [] & cWorld . lWorld . projectiles . ix pjid . pjType .~ RetiredProjectile + & cWorld . lWorld . projectiles . ix pjid . pjVel .~ 0 + & cWorld . lWorld . projectiles . ix pjid . pjTimer .~ 30 & usePayload (_pjPayload pj) (_pjPos pj) (_pjVel pj) & stopSoundFrom (ShellSound pjid) & updatedetonator diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index b2ce0a9b2..1bad68abc 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -27,9 +27,9 @@ import qualified Data.Map.Strict as M testStringInit :: Universe -> [String] testStringInit u = - [show (u ^?! uvWorld . cWorld . lWorld . creatures . ix 0 . crPos)] - <> map show (u ^.. uvWorld . cWorld . lWorld . projectiles . each . pjPos) + <> + map show (u ^.. uvWorld . cWorld . lWorld . projectiles . each . pjVel) --testStringInit u = foldMap prettyShort $ u ^. uvWorld . cWorld . lWorld . projectiles -- (map (show . _ebPos) $ u ^. uvWorld . cWorld . lWorld . energyBalls) -- <> diff --git a/tags b/tags index 0d7fcf731..18158dd33 100644 --- a/tags +++ b/tags @@ -70,13 +70,13 @@ AmmoPayloadSF src/Dodge/Data/ComposedItem.hs 49;" C AmmoPerShot src/Dodge/Data/Item/Use.hs 162;" t AmmoTargetingLink src/Dodge/Data/ComposedItem.hs 19;" C AmmoTargetingSF src/Dodge/Data/ComposedItem.hs 48;" C -AmmoType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 31;" t +AmmoType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 25;" t AnRoom src/Dodge/Annotation/Data.hs 18;" C AnTree src/Dodge/Annotation/Data.hs 19;" C Analyser src/Dodge/Placement/Instance/Analyser.hs 1;" m Annotation src/Dodge/Annotation/Data.hs 14;" t Annotation src/Dodge/Annotation.hs 3;" m -ApplyGravityPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 28;" C +ApplyGravityPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 22;" C ArbitraryAction src/Dodge/Data/ActionPlan.hs 166;" C ArbitraryImpulse src/Dodge/Data/ActionPlan.hs 47;" C ArbitraryImpulseEffect src/Dodge/Data/ActionPlan.hs 48;" C @@ -161,7 +161,7 @@ BeamShooterParams src/Dodge/Data/Item/Use.hs 93;" C BeamSimple src/Dodge/Data/Beam.hs 50;" C BeamType src/Dodge/Data/Beam.hs 46;" t BecomePowerful src/Dodge/Data/Scenario.hs 9;" C -BeltBulletAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 34;" C +BeltBulletAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 28;" C Bezier src/Geometry/Bezier.hs 1;" m BezierTrajectory src/Dodge/Data/Bullet.hs 51;" C BezierTrajectoryType src/Dodge/Data/Bullet.hs 58;" C @@ -221,7 +221,7 @@ Bullet src/Dodge/Data/Bullet.hs 17;" t Bullet src/Dodge/Bullet.hs 1;" m Bullet src/Dodge/Data/Bullet.hs 6;" m Bullet src/Dodge/Item/Weapon/Bullet.hs 1;" m -BulletAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 33;" C +BulletAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 27;" C BulletEffect src/Dodge/Data/Bullet.hs 35;" t BulletGun src/Dodge/Item/Held/BulletGun.hs 1;" m BulletMod src/Dodge/Data/Item/BulletMod.hs 10;" t @@ -295,7 +295,7 @@ ChaseCritters src/Dodge/Data/Creature/State.hs 38;" C Check src/Framebuffer/Check.hs 1;" m CheckConsistency src/Dodge/Room/CheckConsistency.hs 1;" m CheckSlots src/Dodge/Inventory/CheckSlots.hs 1;" m -ChemFuel src/Dodge/Data/Item/Use/Consumption/Ammo.hs 45;" C +ChemFuel src/Dodge/Data/Item/Use/Consumption/Ammo.hs 39;" C ChooseMovementLtAuto src/Dodge/Data/CreatureEffect.hs 62;" C ChooseMovementSpreadGun src/Dodge/Data/CreatureEffect.hs 61;" C ChooseTarget src/Dodge/Creature/ChooseTarget.hs 1;" m @@ -412,8 +412,8 @@ Craftable src/Dodge/Item/Craftable.hs 1;" m Create src/Dodge/Projectile/Create.hs 1;" m Create src/Dodge/Prop/Create.hs 1;" m Create src/Dodge/Wall/Create.hs 1;" m -CreateFlame src/Dodge/Data/Item/Use/Consumption/Ammo.hs 48;" C -CreatePoisonGas src/Dodge/Data/Item/Use/Consumption/Ammo.hs 48;" C +CreateFlame src/Dodge/Data/Item/Use/Consumption/Ammo.hs 42;" C +CreatePoisonGas src/Dodge/Data/Item/Use/Consumption/Ammo.hs 42;" C CreateShieldWall src/Dodge/Data/Item/Effect.hs 22;" C Creature src/Dodge/Data/Creature.hs 36;" t Creature src/Dodge/Creature.hs 1;" m @@ -492,7 +492,7 @@ DefaultArcStep src/Dodge/Data/ArcStep.hs 23;" C DefaultCrGroupUpdate src/Dodge/Data/CrGroupParams.hs 22;" C DefaultDrawButton src/Dodge/Data/Button.hs 17;" C DefaultDrawSwitch src/Dodge/Data/Button.hs 18;" C -DefaultForceField src/Dodge/Data/Item/Use/Consumption/Ammo.hs 42;" C +DefaultForceField src/Dodge/Data/Item/Use/Consumption/Ammo.hs 36;" C DefaultHeldParams src/Dodge/Data/Item/Use.hs 80;" C DefaultLightSourceDraw src/Dodge/Data/LightSource.hs 13;" C DefaultRoomType src/Dodge/Data/Room.hs 31;" C @@ -581,7 +581,7 @@ DrawForceField src/Dodge/Data/Wall.hs 45;" C DrawNoButton src/Dodge/Data/Button.hs 19;" C DrawnWall src/Dodge/Data/Wall.hs 41;" C Drone src/Dodge/Item/Weapon/Drone.hs 1;" m -DroneAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 36;" C +DroneAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 30;" C DropAll src/Dodge/Data/Creature/State.hs 24;" C DropAmount src/Dodge/Data/Creature/State.hs 25;" C DropItem src/Dodge/Data/ActionPlan.hs 39;" C @@ -611,7 +611,7 @@ EffectWhileAttached src/Dodge/Data/Item/Effect.hs 25;" C EffectWhileRoot src/Dodge/Data/Item/Effect.hs 24;" C EighthRes src/Dodge/Data/Config.hs 97;" C Eldritch src/Dodge/Data/Scenario.hs 34;" C -ElectricalAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 35;" C +ElectricalAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 29;" C Electronics src/Dodge/Data/Material.hs 11;" C EllShad src/Picture/Data.hs 39;" C Enable_debug src/Dodge/Data/Config.hs 68;" C @@ -652,7 +652,7 @@ Explosion src/Dodge/Data/SoundOrigin.hs 37;" C Explosion src/Dodge/WorldEvent/Explosion.hs 4;" m ExplosionPayload src/Dodge/Data/Payload.hs 11;" C ExplosiveBarrel src/Dodge/Data/Creature/Misc.hs 87;" C -ExplosivePutty src/Dodge/Data/Item/Use/Consumption/Ammo.hs 39;" C +ExplosivePutty src/Dodge/Data/Item/Use/Consumption/Ammo.hs 33;" C ExternallyGeneratedSounds src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 2;" m ExtraEffect src/Dodge/Item/Weapon/ExtraEffect.hs 6;" m Eyes src/Dodge/Data/Creature/Perception.hs 41;" C @@ -720,7 +720,7 @@ FootForward src/Dodge/Data/Creature/Stance.hs 31;" t FootstepSound src/Dodge/Data/SoundOrigin.hs 29;" C ForceField src/Dodge/ForceField.hs 1;" m ForceField src/Dodge/Wall/ForceField.hs 1;" m -ForceFieldType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 42;" t +ForceFieldType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 36;" t Foreground src/Dodge/Room/Foreground.hs 1;" m ForegroundShape src/Dodge/Data/ForegroundShape.hs 14;" t ForegroundShape src/Dodge/Data/ForegroundShape.hs 6;" m @@ -746,10 +746,10 @@ GameOverOptions src/Dodge/Data/Universe.hs 70;" C GameRoom src/Dodge/GameRoom.hs 15;" t GameRoom src/Dodge/GameRoom.hs 8;" m Gas src/Dodge/Gas.hs 1;" m -GasAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 37;" C +GasAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 31;" C GasCloud src/Dodge/Data/Cloud.hs 31;" C -GasCreate src/Dodge/Data/Item/Use/Consumption/Ammo.hs 48;" t -GasFuel src/Dodge/Data/Item/Use/Consumption/Ammo.hs 45;" t +GasCreate src/Dodge/Data/Item/Use/Consumption/Ammo.hs 42;" t +GasFuel src/Dodge/Data/Item/Use/Consumption/Ammo.hs 39;" t GasParams src/Dodge/Data/Item/Use.hs 115;" C GasSprayParams src/Dodge/Data/Item/Use.hs 81;" C GenCr src/Dodge/Data/Creature/State.hs 31;" C @@ -998,7 +998,7 @@ LaserStart src/Dodge/Data/Laser.hs 21;" t LaserType src/Dodge/Data/Laser.hs 16;" t Launcher src/Dodge/Item/Held/Launcher.hs 1;" m LauncherAI src/Dodge/Data/Creature/Misc.hs 54;" C -LauncherAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 32;" C +LauncherAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 26;" C LauncherCrit src/Dodge/Creature/LauncherCrit.hs 1;" m LaundrySS src/Dodge/Data/Scenario.hs 115;" C Layer src/Picture/Data.hs 22;" t @@ -1465,7 +1465,7 @@ PressPlateId src/Dodge/Data/PressPlate.hs 15;" C PressType src/Dodge/Data/Input.hs 13;" t PreviousArcEffect src/Dodge/Data/Item/Params.hs 34;" t PrimitiveMode src/Shader/Data.hs 99;" t -PrintMaterial src/Dodge/Data/Item/Use/Consumption/Ammo.hs 38;" C +PrintMaterial src/Dodge/Data/Item/Use/Consumption/Ammo.hs 32;" C Prison src/Dodge/Data/Scenario.hs 65;" C Procedural src/Dodge/Room/Procedural.hs 2;" m Projectile src/Dodge/Data/Projectile.hs 16;" t @@ -1473,7 +1473,7 @@ Projectile src/Dodge/Data/Projectile.hs 6;" m Projectile src/Dodge/Projectile.hs 1;" m ProjectileParams src/Dodge/Data/Item/Use.hs 114;" C ProjectileType src/Dodge/Data/Projectile.hs 34;" t -ProjectileUpdate src/Dodge/Data/Item/Use/Consumption/Ammo.hs 20;" t +ProjectileUpdate src/Dodge/Data/Item/Use/Consumption/Ammo.hs 18;" t Prop src/Dodge/Data/Prop.hs 18;" t Prop src/Dodge/Data/Prop.hs 6;" m Prop src/Dodge/Default/Prop.hs 1;" m @@ -1574,7 +1574,6 @@ ReactorSS src/Dodge/Data/Scenario.hs 111;" C ReaderUpdate src/Dodge/Creature/ReaderUpdate.hs 1;" m RecRoomSS src/Dodge/Data/Scenario.hs 103;" C RectRoomType src/Dodge/Data/Room.hs 32;" C -ReduceSpinPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 24;" C ReducedRocketSmoke src/Dodge/Data/Projectile.hs 57;" C ReigonalGovernment src/Dodge/Data/Scenario.hs 50;" C Religion src/Dodge/Data/Scenario.hs 47;" C @@ -1582,7 +1581,7 @@ Reload src/Dodge/Data/ActionPlan.hs 190;" C ReloadStatus src/Dodge/Data/Item/Use/Consumption.hs 20;" t RemoteDetonatorLink src/Dodge/Data/ComposedItem.hs 26;" C RemoteDetonatorSF src/Dodge/Data/ComposedItem.hs 44;" C -RemoteDirectionPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 23;" C +RemoteDirectionPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 21;" C RemoteScreenLink src/Dodge/Data/ComposedItem.hs 25;" C RemoteScreenSF src/Dodge/Data/ComposedItem.hs 42;" C RemoveEquipment src/Dodge/Data/RightButtonOptions.hs 36;" C @@ -1815,7 +1814,7 @@ Standing src/Dodge/Data/Creature/Stance.hs 25;" C Start src/Dodge/Room/Start.hs 3;" m StartNewGame src/Dodge/StartNewGame.hs 1;" m StartSentinelPost src/Dodge/Data/ActionPlan.hs 153;" C -StartSpinPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 22;" C +StartSpinPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 20;" C State src/Dodge/Creature/State.hs 1;" m State src/Dodge/Data/Creature/State.hs 6;" m StaticWalls src/Dodge/LevelGen/StaticWalls.hs 5;" m @@ -1933,7 +1932,7 @@ Text src/Picture/Text.hs 1;" m TextShad src/Picture/Data.hs 37;" C ThingsHit src/Dodge/WorldEvent/ThingsHit.hs 6;" m ThirdPartyLens src/ThirdPartyLens.hs 2;" m -ThrustPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 21;" C +ThrustPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 19;" C Tile src/Data/Tile.hs 14;" t Tile src/Data/Tile.hs 3;" m Tile src/Dodge/Tile.hs 1;" m @@ -2831,12 +2830,11 @@ _pjUpdates src/Dodge/Data/Projectile.hs 27;" f _pjVel src/Dodge/Data/Projectile.hs 19;" f _pjZ src/Dodge/Data/Projectile.hs 25;" f _pjZVel src/Dodge/Data/Projectile.hs 26;" f -_pjuCID src/Dodge/Data/Item/Use/Consumption/Ammo.hs 22;" f -_pjuEnd src/Dodge/Data/Item/Use/Consumption/Ammo.hs 21;" f -_pjuReduceSpin src/Dodge/Data/Item/Use/Consumption/Ammo.hs 24;" f -_pjuSpinAmound src/Dodge/Data/Item/Use/Consumption/Ammo.hs 22;" f -_pjuStart src/Dodge/Data/Item/Use/Consumption/Ammo.hs 21;" f -_pjuTime src/Dodge/Data/Item/Use/Consumption/Ammo.hs 22;" f +_pjuCID src/Dodge/Data/Item/Use/Consumption/Ammo.hs 20;" f +_pjuEnd src/Dodge/Data/Item/Use/Consumption/Ammo.hs 19;" f +_pjuSpinAmound src/Dodge/Data/Item/Use/Consumption/Ammo.hs 20;" f +_pjuStart src/Dodge/Data/Item/Use/Consumption/Ammo.hs 19;" f +_pjuTime src/Dodge/Data/Item/Use/Consumption/Ammo.hs 20;" f _plIDCont src/Dodge/Data/GenWorld.hs 81;" f _plMID src/Dodge/Data/GenWorld.hs 80;" f _plOrder src/Dodge/Data/GenWorld.hs 77;" f @@ -3344,7 +3342,7 @@ airlockSimple src/Dodge/Room/Airlock.hs 66;" f airlockZ src/Dodge/Room/Airlock.hs 91;" f allHotkeys src/Dodge/Creature/YourControl.hs 60;" f allInvLocs src/Dodge/Item/Grammar.hs 256;" f -allVisibleWalls src/Dodge/Base/Collide.hs 132;" f +allVisibleWalls src/Dodge/Base/Collide.hs 131;" f alongSegBy src/Geometry.hs 43;" f alteRifle src/Dodge/Item/Held/Cane.hs 65;" f ammoMagSPic src/Dodge/Item/Draw/SPic.hs 112;" f @@ -3357,12 +3355,12 @@ angleVV src/Geometry/Vector.hs 57;" f angleVV3 src/Geometry/Vector3D.hs 122;" f annoToRoomTree src/Dodge/Annotation.hs 17;" f anyUnusedSpot src/Dodge/PlacementSpot.hs 66;" f -anythingHitCirc src/Dodge/Base/Collide.hs 247;" f +anythingHitCirc src/Dodge/Base/Collide.hs 246;" f applyCME src/Dodge/HeldUse.hs 126;" f applyCreatureDamage src/Dodge/Creature/Damage.hs 14;" f applyDamageEffect src/Dodge/Creature/Damage.hs 31;" f applyEventIO src/Loop.hs 89;" f -applyGravityPU src/Dodge/Projectile/Update.hs 55;" f +applyGravityPU src/Dodge/Projectile/Update.hs 50;" f applyIndividualDamage src/Dodge/Creature/Damage.hs 49;" f applyIndividualDamage' src/Dodge/Creature/Damage.hs 52;" f applyInvLock src/Dodge/HeldUse.hs 141;" f @@ -3504,7 +3502,7 @@ boosterGun src/Dodge/Item/Equipment/Booster.hs 9;" f bossKeyItems src/Dodge/LockAndKey.hs 12;" f bossRoom src/Dodge/Room/Boss.hs 60;" f bounceDir src/Dodge/Bullet.hs 113;" f -bouncePoint src/Dodge/Base/Collide.hs 88;" f +bouncePoint src/Dodge/Base/Collide.hs 87;" f boundPoints src/Bound.hs 10;" f boundedGrid src/Grid.hs 19;" f boxABC src/Polyhedra.hs 108;" f @@ -3534,8 +3532,8 @@ cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 7;" f calcTexCoord src/Tile.hs 19;" f -canSee src/Dodge/Base/Collide.hs 233;" f -canSeeIndirect src/Dodge/Base/Collide.hs 240;" f +canSee src/Dodge/Base/Collide.hs 232;" f +canSeeIndirect src/Dodge/Base/Collide.hs 239;" f cardEightVec src/Dodge/Base/CardinalPoint.hs 16;" f cardList src/Dodge/Base/CardinalPoint.hs 6;" f cardVec src/Dodge/Base/CardinalPoint.hs 9;" f @@ -3584,11 +3582,11 @@ chooseMovementPistol src/Dodge/Humanoid.hs 202;" f chooseMovementPistol' src/Dodge/Humanoid.hs 207;" f chooseMovementSpreadGun src/Dodge/CreatureEffect.hs 88;" f circCollisionDebugItem src/Dodge/Debug.hs 63;" f -circHitWall src/Dodge/Base/Collide.hs 149;" f -circOnAnyCr src/Dodge/Base/Collide.hs 197;" f +circHitWall src/Dodge/Base/Collide.hs 148;" f +circOnAnyCr src/Dodge/Base/Collide.hs 196;" f circOnSeg src/Geometry.hs 104;" f circOnSegNoEndpoints src/Geometry.hs 94;" f -circOnSomeWall src/Dodge/Base/Collide.hs 191;" f +circOnSomeWall src/Dodge/Base/Collide.hs 190;" f circle src/Picture/Base.hs 180;" f circleDecoration src/Dodge/Placement/TopDecoration.hs 56;" f circleSolid src/Picture/Base.hs 164;" f @@ -3633,10 +3631,10 @@ colSpark src/Dodge/Spark.hs 47;" f colSparkRandDir src/Dodge/Spark.hs 101;" f collectDamageTypes src/Dodge/Damage.hs 32;" f collectInvItems src/Dodge/Update/Input/InGame.hs 281;" f -collideCircWalls src/Dodge/Base/Collide.hs 159;" f +collideCircWalls src/Dodge/Base/Collide.hs 158;" f collidePoint src/Dodge/Base/Collide.hs 49;" f -collidePointTestFilter src/Dodge/Base/Collide.hs 94;" f -collidePointWallsFilter src/Dodge/Base/Collide.hs 108;" f +collidePointTestFilter src/Dodge/Base/Collide.hs 93;" f +collidePointWallsFilter src/Dodge/Base/Collide.hs 107;" f collisionDebugItem src/Dodge/Debug.hs 47;" f color src/Picture/Base.hs 108;" f colorLamp src/Dodge/Creature/Lamp.hs 10;" f @@ -3826,7 +3824,7 @@ debugMenuOptions src/Dodge/Menu.hs 119;" f debugOn src/Dodge/Data/Config.hs 151;" f debugSelectCreatureList src/Dodge/Debug.hs 86;" f debugSelectCreatureMessage src/Dodge/Debug.hs 77;" f -decTimMvVel src/Dodge/Projectile/Update.hs 178;" f +decTimMvVel src/Dodge/Projectile/Update.hs 181;" f decodedtmap src/Dodge/Terminal.hs 205;" f decomposeSelfTree src/Dodge/Tree/Compose.hs 60;" f decomposeTree src/Dodge/Tree/Compose.hs 57;" f @@ -3929,7 +3927,7 @@ destroyMatS src/Dodge/Material/Sound.hs 7;" f destroyMcType src/Dodge/Machine/Destroy.hs 21;" f destroyMount src/Dodge/Block.hs 104;" f destroyMounts src/Dodge/Block.hs 101;" f -destroyProjectile src/Dodge/Projectile/Update.hs 103;" f +destroyProjectile src/Dodge/Projectile/Update.hs 109;" f detV src/Geometry/Vector.hs 93;" f detector src/Dodge/Item/Held/Utility.hs 41;" f detectorColor src/Dodge/Item/Draw/SPic.hs 434;" f @@ -3954,7 +3952,7 @@ displayControls src/Dodge/Menu.hs 206;" f displayFrameTicks src/Dodge/Render/Picture.hs 39;" f displayFreeSlots src/Dodge/DisplayInventory.hs 226;" f displayIndents src/Dodge/DisplayInventory.hs 123;" f -displayPulse src/Dodge/Item/Display.hs 107;" f +displayPulse src/Dodge/Item/Display.hs 106;" f displaySectionsSizes src/Dodge/DisplayInventory.hs 118;" f displayTerminalLineString src/Dodge/Update.hs 447;" f dist src/Geometry/Vector.hs 179;" f @@ -4043,7 +4041,7 @@ doTerminalCommandEffect src/Dodge/Terminal.hs 135;" f doTestDrawing src/Dodge/Render.hs 42;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f -doThrust src/Dodge/Projectile/Update.hs 115;" f +doThrust src/Dodge/Projectile/Update.hs 121;" f doTimeScroll src/Dodge/Update.hs 205;" f doTmTm src/Dodge/TmTm.hs 6;" f doTmWdWd src/Dodge/WorldEffect.hs 101;" f @@ -4250,7 +4248,7 @@ expandPolyCorners src/Dodge/LevelGen/StaticWalls.hs 103;" f expandToSquare src/Dodge/LevelGen/StaticWalls/Deprecated.hs 83;" f expireAndDamage src/Dodge/Bullet.hs 195;" f expireAndDamageFL src/Dodge/Flame.hs 47;" f -explodeShell src/Dodge/Projectile/Update.hs 186;" f +explodeShell src/Dodge/Projectile/Update.hs 189;" f explosionS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 410;" f explosiveBarrel src/Dodge/Creature/Inanimate.hs 29;" f extTrigLitPos src/Dodge/Placement/Instance/Button.hs 84;" f @@ -4462,11 +4460,11 @@ handleResizeEvent src/Dodge/Event.hs 53;" f handleTextInput src/Dodge/Event/Input.hs 18;" f handleWindowMoveEvent src/Dodge/Event.hs 44;" f hardQuit src/Dodge/Concurrent.hs 33;" f -hasButtonLOS src/Dodge/Base/Collide.hs 211;" f +hasButtonLOS src/Dodge/Base/Collide.hs 210;" f hasCaneGunDim src/Dodge/Item/InvSize.hs 48;" f hasFrontArmour src/Dodge/Creature/Test.hs 110;" f -hasLOS src/Dodge/Base/Collide.hs 204;" f -hasLOSIndirect src/Dodge/Base/Collide.hs 219;" f +hasLOS src/Dodge/Base/Collide.hs 203;" f +hasLOSIndirect src/Dodge/Base/Collide.hs 218;" f hat src/Dodge/Item/Equipment.hs 134;" f head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 140;" f @@ -4620,7 +4618,7 @@ isUnusedLnkType src/Dodge/PlacementSpot.hs 186;" f isUsedLnkUnplaced src/Dodge/PlacementSpot.hs 172;" f isValidCommand src/Dodge/Debug/Terminal.hs 128;" f isVowel src/StringHelp.hs 8;" f -isWalkable src/Dodge/Base/Collide.hs 226;" f +isWalkable src/Dodge/Base/Collide.hs 225;" f isoMatrix src/MatrixHelper.hs 30;" f isotriBWH src/Geometry/Polygon.hs 20;" f itDim src/Dodge/Item/InvSize.hs 21;" f @@ -4641,7 +4639,7 @@ itemFromEquipType src/Dodge/Item.hs 50;" f itemFromHeldType src/Dodge/Item/Held.hs 25;" f itemInfo src/Dodge/Item/Info.hs 13;" f itemInvColor src/Dodge/Item/InventoryColor.hs 9;" f -itemNumberDisplay src/Dodge/Item/Display.hs 90;" f +itemNumberDisplay src/Dodge/Item/Display.hs 89;" f itemRooms src/Dodge/LockAndKey.hs 39;" f itemRotTreeSPic src/Dodge/Item/Draw/SPic.hs 27;" f itemSPic src/Dodge/Item/Draw/SPic.hs 34;" f @@ -4875,7 +4873,7 @@ maybeExitCombine src/Dodge/Update/Input/InGame.hs 592;" f maybeOpenTerminal src/Dodge/Update.hs 122;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 116;" f -maybeWarmupStatus src/Dodge/Item/Display.hs 113;" f +maybeWarmupStatus src/Dodge/Item/Display.hs 112;" f mcApplyDamage src/Dodge/Machine/Update.hs 108;" f mcKillBut src/Dodge/Machine/Destroy.hs 34;" f mcKillTerm src/Dodge/Machine/Destroy.hs 26;" f @@ -5076,10 +5074,10 @@ overPos src/Picture/Base.hs 303;" f overPosObj src/Shape.hs 276;" f overPosSH src/Shape.hs 260;" f overPosSP src/ShapePicture.hs 41;" f -overlapCircWalls src/Dodge/Base/Collide.hs 138;" f -overlapCircWallsClosest src/Dodge/Base/Collide.hs 177;" f +overlapCircWalls src/Dodge/Base/Collide.hs 137;" f +overlapCircWallsClosest src/Dodge/Base/Collide.hs 176;" f overlapSegCrs src/Dodge/Base/Collide.hs 59;" f -overlapSegWalls src/Dodge/Base/Collide.hs 120;" f +overlapSegWalls src/Dodge/Base/Collide.hs 119;" f overrideInternal src/Dodge/Creature/ReaderUpdate.hs 172;" f overrideMeleeCloseTarget src/Dodge/Creature/ReaderUpdate.hs 33;" f overwriteLabel src/Dodge/Tree/Compose.hs 31;" f @@ -5131,7 +5129,7 @@ pipe src/Dodge/Item/Craftable.hs 32;" f pistol src/Dodge/Item/Held/Stick.hs 42;" f pistolCrit src/Dodge/Creature/PistolCrit.hs 12;" f pistolerRoom src/Dodge/Room/Room.hs 321;" f -pjRemoteSetDirection src/Dodge/Projectile/Update.hs 160;" f +pjRemoteSetDirection src/Dodge/Projectile/Update.hs 166;" f plBlock src/Dodge/Placement/PlaceSpot/Block.hs 18;" f plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 22;" f plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 50;" f @@ -5380,7 +5378,6 @@ rectXY src/Geometry/Polygon.hs 35;" f rectanglePairs src/Dodge/LevelGen/DoorPane.hs 7;" f red src/Color.hs 14;" f reduceLocLDT src/Dodge/DoubleTree.hs 256;" f -reduceSpinBy src/Dodge/Projectile/Update.hs 175;" f reflDirWall src/Dodge/Base/Wall.hs 16;" f reflVelWall src/Dodge/Base/Wall.hs 24;" f reflVelWallDamp src/Dodge/Base/Wall.hs 20;" f @@ -5650,7 +5647,7 @@ shardShape src/Dodge/Block/Debris.hs 181;" f shatterGun src/Dodge/Item/Held/Weapons.hs 8;" f shatterGunSPic src/Dodge/Item/Draw/SPic.hs 284;" f shatterWall src/Dodge/Item/Weapon/Shatter.hs 26;" f -shellCollisionCheck src/Dodge/Projectile/Update.hs 84;" f +shellCollisionCheck src/Dodge/Projectile/Update.hs 79;" f shellMag src/Dodge/Item/Ammo.hs 61;" f shellModule src/Dodge/Item/Scope.hs 45;" f shellShape src/Dodge/Projectile/Draw.hs 34;" f @@ -5696,8 +5693,8 @@ shotgunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 526;" f shoulderHeight src/Dodge/Item/HeldOffset.hs 81;" f shoulderSH src/Dodge/Creature/Picture.hs 139;" f shoulderSP src/Dodge/Creature/HandPos.hs 170;" f -showAttachItem src/Dodge/Item/Display.hs 70;" f -showEquipItem src/Dodge/Item/Display.hs 82;" f +showAttachItem src/Dodge/Item/Display.hs 69;" f +showEquipItem src/Dodge/Item/Display.hs 81;" f showInt src/Dodge/Item/Info.hs 30;" f showIntsString src/Dodge/Tree/Compose.hs 129;" f showManObj src/Dodge/TestString.hs 79;" f @@ -6039,7 +6036,8 @@ tryPutFloorItemIDInInv src/Dodge/Inventory/Add.hs 26;" f tryPutItemInInv src/Dodge/Inventory/Add.hs 42;" f tryPutItemInInvAt src/Dodge/Inventory/Add.hs 32;" f trySeedFromClipboard src/Dodge/Menu.hs 88;" f -trySpinByCID src/Dodge/Projectile/Update.hs 142;" f +tryShellBounce src/Dodge/Projectile/Update.hs 97;" f +trySpinByCID src/Dodge/Projectile/Update.hs 148;" f trySynthBullet src/Dodge/Creature/State.hs 204;" f tryUseParent src/Dodge/Creature/State.hs 197;" f turnTo src/Dodge/Movement/Turn.hs 4;" f @@ -6146,7 +6144,7 @@ updatePosEvents src/Dodge/Update.hs 573;" f updatePreload src/Preload/Update.hs 20;" f updatePressedButtonsCarte src/Dodge/Update/Input/InGame.hs 365;" f updatePressedButtonsCarte' src/Dodge/Update/Input/InGame.hs 368;" f -updateProjectile src/Dodge/Projectile/Update.hs 24;" f +updateProjectile src/Dodge/Projectile/Update.hs 25;" f updateProp src/Dodge/Prop/Update.hs 11;" f updatePulse src/Dodge/Creature/Update.hs 22;" f updateRBList src/Dodge/Inventory/RBList.hs 16;" f @@ -6260,7 +6258,7 @@ viewClipBounds src/Dodge/Debug/Picture.hs 307;" f viewDistanceFromItems src/Dodge/Update/Camera.hs 129;" f viewTarget src/Dodge/Creature/ReaderUpdate.hs 144;" f violet src/Color.hs 21;" f -visibleWalls src/Dodge/Base/Collide.hs 124;" f +visibleWalls src/Dodge/Base/Collide.hs 123;" f visionCheck src/Dodge/Creature/Perception.hs 152;" f vocalizationTest src/Dodge/Creature/Vocalization.hs 8;" f volleyGun src/Dodge/Item/Held/Cane.hs 31;" f