From 32cb2b2e8039805242162ed38df83caf68843000 Mon Sep 17 00:00:00 2001 From: justin Date: Fri, 28 Jun 2024 22:40:24 +0100 Subject: [PATCH] Make launcherX use multiple ammo sources --- ghcidOutput | 46 ++----- src/Dodge/Base/You.hs | 22 ++-- src/Dodge/Bullet.hs | 3 - src/Dodge/Creature.hs | 10 ++ src/Dodge/Creature/Impulse/UseItem.hs | 10 +- src/Dodge/Data/Item/HeldUse.hs | 2 - src/Dodge/Data/Item/Use.hs | 10 -- src/Dodge/Default/Weapon.hs | 11 -- src/Dodge/HeldUse.hs | 75 ++++-------- src/Dodge/Item/Held/Cane.hs | 1 + src/Dodge/Item/Held/Launcher.hs | 6 +- src/Dodge/Item/Weapon/BatteryGuns.hs | 52 +------- src/Dodge/Item/Weapon/SonicGuns.hs | 19 --- src/Dodge/Item/Weapon/TriggerType.hs | 9 +- src/Dodge/Projectile/Create.hs | 113 +++++++++++------- src/Dodge/TestString.hs | 7 +- tags | 166 +++++++++++++------------- 17 files changed, 220 insertions(+), 342 deletions(-) diff --git a/ghcidOutput b/ghcidOutput index 1e46f2d5a..6e8878908 100644 --- a/ghcidOutput +++ b/ghcidOutput @@ -1,40 +1,8 @@ -/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:76:1: warning: [-Wunused-imports] - The qualified import of ‘IntMapHelp’ is redundant +/home/justin/Haskell/loop/src/Dodge/Reloading.hs:25:22-40: error: + • The constructor ‘ReloadAction’ should have 2 arguments, but has been given 3 + • In the pattern: ReloadAction x la j + In the pattern: SelItem i (ReloadAction x la j) + In the pattern: Just (SelItem i (ReloadAction x la j)) | -76 | import qualified IntMapHelp as IM - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -/home/justin/Haskell/loop/src/Dodge/Item/Weapon/TriggerType.hs:349:5: warning: [-Wunused-matches] - Defined but not used: ‘x’ - | -349 | x <- ams ^? ix 0 . itUse . amagLoadStatus . iaLoaded - | ^ -/home/justin/Haskell/loop/src/Dodge/Item/Weapon/BatteryGuns.hs:128:12: warning: [-Wunused-matches] - Defined but not used: ‘ams’ - | -128 | shootLaser ams it cr = - | ^^^ -/home/justin/Haskell/loop/src/Dodge/Bullet.hs:63:5: warning: [-Wunused-matches] - Defined but not used: ‘invid’ - | -63 | invid <- it ^? itLocation . ipInvID - | ^^^^^ -/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:410:18: warning: [-Wunused-matches] - Defined but not used: ‘ams’ - | -410 | usePjCreationX i ams itm cr = - | ^^^ -/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:472:21: warning: [-Wunused-matches] - Defined but not used: ‘it’ - | -472 | useGasParams nz ams it cr = - | ^^ -/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:486:17: warning: [-Wunused-matches] - Defined but not used: ‘ams’ - | -486 | fireRemoteShell ams it cr w = - | ^^^ -/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:542:15: warning: [-Wunused-matches] - Defined but not used: ‘ams’ - | -542 | shootTeslaArc ams it cr w = - | ^^^ +25 | Just (SelItem i (ReloadAction x la)) + | ^^^^^^^^^^^^^^^^^^^ diff --git a/src/Dodge/Base/You.hs b/src/Dodge/Base/You.hs index cecf0c081..6e675303e 100644 --- a/src/Dodge/Base/You.hs +++ b/src/Dodge/Base/You.hs @@ -1,19 +1,22 @@ -module Dodge.Base.You where +module Dodge.Base.You + (you + , yourScopeInvID + , yourInv + , yourScrollAttachment + , yourItem + )where import Dodge.Data.World import Dodge.HeldScroll import qualified IntMapHelp as IM -import qualified Data.Map.Strict as M +--import qualified Data.Map.Strict as M import Control.Lens import Control.Monad -import Data.Maybe +--import Data.Maybe you :: World -> Creature you w = w ^?! cWorld . lWorld . creatures . ix 0 -youc :: CWorld -> Creature -youc w = w ^?! lWorld . creatures . ix 0 - yourItem :: World -> Maybe Item yourItem w = do i <- you w ^? crManipulation . manObject . inInventory . ispItem @@ -36,13 +39,6 @@ yourScopeInvID w = do yourInv :: World -> IM.IntMap Item yourInv = _crInv . you -attachmentTree :: Creature -> M.Map AttachType Int -attachmentTree cr = fromMaybe mempty $ do - i <- cr ^? crManipulation . manObject . inInventory . ispItem - return $ upDownAttachments cr i i mempty - -upDownAttachments :: Creature -> Int -> Int -> M.Map AttachType Int -> M.Map AttachType Int -upDownAttachments _ _ _ s = s --yourInvSel :: World -> Int --yourInvSel = crSel . you diff --git a/src/Dodge/Bullet.hs b/src/Dodge/Bullet.hs index a244e34c3..21ecaf5f6 100644 --- a/src/Dodge/Bullet.hs +++ b/src/Dodge/Bullet.hs @@ -56,11 +56,8 @@ updateBulVel bt = case _buTrajectory bt of where t = _buTimer bt --- should be made safe? --- should be renamed to shootBullet or something shootBullet :: [Item] -> Item -> Creature -> World -> World shootBullet ams it cr w = fromMaybe (error "cannot find bullet ammo when expected to") $ do - invid <- it ^? itLocation . ipInvID thebullet <- ams ^? ix 0 . itUse . amagParams . ampBullet return $ w & cWorld . lWorld . instantBullets .:~ ( thebullet diff --git a/src/Dodge/Creature.hs b/src/Dodge/Creature.hs index fb8e53290..42fa06311 100644 --- a/src/Dodge/Creature.hs +++ b/src/Dodge/Creature.hs @@ -224,6 +224,16 @@ inventoryX c = case c of 'L' -> [scrollWatch] 'M' -> stackedInventory 'N' -> [zoomScope,targetingScope TARGETLASER, sniperRifle] + 'O' -> [ launcherX 2 + , shellMag + , shellMag + , launcherX 3 + , shellMag + , shellMag + , shellMag + , rifle + , shellMag + ] 'T' -> testInventory _ -> [] diff --git a/src/Dodge/Creature/Impulse/UseItem.hs b/src/Dodge/Creature/Impulse/UseItem.hs index c04d5b630..9e26780a2 100644 --- a/src/Dodge/Creature/Impulse/UseItem.hs +++ b/src/Dodge/Creature/Impulse/UseItem.hs @@ -34,16 +34,8 @@ useItemRightClick cr' w = fromMaybe (f w) $ do getAmmoMags :: Item -> Creature -> [Item] getAmmoMags itm cr = fromMaybe [] $ do - atypes <- itm ^? itUse . heldConsumption i <- itm ^? itLocation . ipInvID - let amags = cr ^.. crInv . dropping (i + 1) traverse - mmags = zipWith f atypes amags - return $ catMaybes mmags - where - f atype itm' = do - itype <- itm' ^? itUse . amagType - guard $ itype == atype - return $ itm' + return $ cr ^.. crInv . dropping (i + 1) traverse itemEffect :: Creature -> Item -> World -> World itemEffect cr it w = case it ^. itUse of diff --git a/src/Dodge/Data/Item/HeldUse.hs b/src/Dodge/Data/Item/HeldUse.hs index 5ea3ba931..e311b3b44 100644 --- a/src/Dodge/Data/Item/HeldUse.hs +++ b/src/Dodge/Data/Item/HeldUse.hs @@ -99,8 +99,6 @@ data HeldMod | BurstRifleRepeatMod | MiniGunMod Int | SmgMod - | RevolverXMod - | RevolverXRepeatMod | BangConeMod deriving (Eq, Ord, Show, Read) --Generic, Flat) diff --git a/src/Dodge/Data/Item/Use.hs b/src/Dodge/Data/Item/Use.hs index dc78f2fda..e341916c1 100644 --- a/src/Dodge/Data/Item/Use.hs +++ b/src/Dodge/Data/Item/Use.hs @@ -98,16 +98,6 @@ data ScrollAttachParams | CharScrollParams { _scrollChar :: Seq.Seq Char} -data ItemUse' - = ItemHeld HeldUse' - | ItemEquip EquipUse' - | ItemConsume ConsumeUse' - | ItemCraft Int - -data HeldUse' = HeldUse' -data EquipUse' = EquipUse' -data ConsumeUse' = ConsumeUse' - data AimParams = AimParams { _aimWeight :: Int , _aimTurnSpeed :: Float diff --git a/src/Dodge/Default/Weapon.hs b/src/Dodge/Default/Weapon.hs index 0db21b0f5..8a7522517 100644 --- a/src/Dodge/Default/Weapon.hs +++ b/src/Dodge/Default/Weapon.hs @@ -27,17 +27,6 @@ module Dodge.Default.Weapon where --defaultChargeable :: LeftConsumption --defaultChargeable = ChargeableAmmo 100 100 ---defaultrUse :: ItemUse ---defaultrUse = --- RightUse --- { _rUse = HeldDoNothing --- , _useDelay = FixedRate{_rateMax = 8, _rateTime = 0} --- , _useMods = HeldModNothing --- , _useHammer = HammerUp --- , _useAim = defaultAimParams --- , _heldScroll = HeldScrollDoNothing --- , _heldConsumption = defaultLoadable --- } -- -- diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index 367a82eb6..61e907d59 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -58,10 +58,10 @@ useMod hm = case hm of , ammoCheckI ] LauncherMod -> - [ useAmmoAmount 1 - , withSoundStart tap4S - , useTimeCheck - , ammoCheckI + --[ useAmmoAmount 1 +-- , withSoundStart tap4S + [ useTimeCheck +-- , ammoCheckI , blCheck ] TeslaMod -> @@ -108,11 +108,11 @@ useMod hm = case hm of , duplicateLoadedBarrels , ammoCheckI ] - LauncherXMod i -> - [ useAmmoAmount i - , withSoundStart tap4S - , useTimeCheck - , ammoCheckI + LauncherXMod _ -> + --[ useAmmoAmount i + --, withSoundStart tap4S + [ useTimeCheck + --, ammoCheckI , blCheck ] ShatterMod -> @@ -314,30 +314,6 @@ useMod hm = case hm of , useTimeCheck , ammoCheckI ] - RevolverXMod -> - [ withRecoil - , withTorqueAfter - , withFlare - , duplicateLoadedBarrels - , useAmmoUpTo 1 - , withSoundStart tap3S - , repeatOnFrames [2, 4, 6, 8, 10] RevolverXRepeatMod - , lockInvFor 10 - , -- rather than locking the inventory, a better solution may be to check - -- that the weapon is still in your hands in the repeated frames - useTimeCheck - , ammoCheckI - , blCheck - ] - RevolverXRepeatMod -> - [ withRecoil - , withTorqueAfter - , withFlare - , duplicateLoadedBarrels - , useAmmoUpTo 1 - , withSoundStart tap3S - , ammoCheckI - ] BangConeMod -> [ withRandomItem coneRandItemParams , withRandomItemUpdate coneRandItemUpdate @@ -388,7 +364,7 @@ useHeld hu = case hu of HeldUseAmmoParams -> shootBullet HeldOverNozzlesUseGasParams -> overNozzles useGasParams HeldPJCreation -> usePjCreation - HeldPJCreationX i -> usePjCreationX i + HeldPJCreationX _ -> usePjCreationX HeldFireRemoteShell -> fireRemoteShell HeldDetectorEffect dt -> const $ detectorEffect dt HeldTeslaArc -> shootTeslaArc @@ -403,20 +379,17 @@ useHeld hu = case hu of usePjCreation :: [Item] -> Item -> Creature -> World -> World usePjCreation ams itm cr = fromMaybe id $ do - apm <- ams ^? ix 0 . itUse . amagParams - return $ createProjectile apm itm cr + apm <- ams ^? ix 0 + muz <- itm ^? itUse . heldAim . aimMuzzles . ix 0 + return $ createProjectile apm muz itm cr -usePjCreationX :: Int -> [Item] -> Item -> Creature -> World -> World -usePjCreationX i ams itm cr = - foldr - f - (createProjectile apm itm cr) - [1 .. i -1] +usePjCreationX :: [Item] -> Item -> Creature -> World -> World +usePjCreationX ams itm cr = fromMaybe id $ do + muzs <- itm ^? itUse . heldAim . aimMuzzles + return $ foldr + f id (zip muzs ams) where - apm = fromMaybe (error "cannot find shell ammo projectile") $ do - invid <- itm ^? itLocation . ipInvID - cr ^? crInv . ix (invid + 1) . itUse . amagParams - f n = (. createProjectile apm itm (cr & crDir +~ (2 * pi * fromIntegral n / fromIntegral i))) + f (muz,am) = (createProjectile am muz itm cr .) overNozzles :: (Nozzle -> [Item] -> Item -> Creature -> World -> World) -> @@ -469,7 +442,7 @@ getAmmoMagazine itm cr = do return mag useGasParams :: Nozzle -> [Item] -> Item -> Creature -> World -> World -useGasParams nz ams it cr = +useGasParams nz ams _ cr = createGas gastype (_nzPressure nz) @@ -478,7 +451,6 @@ useGasParams nz ams it cr = cr where gastype = fromMaybe (error "cannot find gas ammo") $ ams ^? ix 0 . itUse . amagParams . ampCreateGas --- amag = fromMaybe (error "cannot find gas ammo") $ getAmmoMagazine it cr dir = _crDir cr pos = _crPos cr +.+ (_nzLength nz *.* unitVectorAtAngle (_crDir cr)) @@ -493,10 +465,11 @@ fireRemoteShell ams it cr w = i = IM.newKey $ w ^. cWorld . lWorld . props cid = _crID cr apm = fromMaybe (error "cannot find shell ammo projectile") $ do - invid <- it ^? itLocation . ipInvID - cr ^? crInv . ix (invid + 1) . itUse . amagParams + ams ^? ix 0 addRemRocket = makeShell apm + -- the following is unsafe! + (it ^?! itUse . heldAim . aimMuzzles . ix 0) it cr [ PJRemoteShellCollisionCheck @@ -539,7 +512,7 @@ mcShootLaser it mc = cWorld . lWorld . lasers .:~ lasRayAt (_lasColor $ _itParam -- | assumes that the item is held shootTeslaArc :: [Item] -> Item -> Creature -> World -> World -shootTeslaArc ams it cr w = +shootTeslaArc _ it cr w = w' & cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix itRef . itParams .~ ip where diff --git a/src/Dodge/Item/Held/Cane.hs b/src/Dodge/Item/Held/Cane.hs index f7d92214f..d72acb822 100644 --- a/src/Dodge/Item/Held/Cane.hs +++ b/src/Dodge/Item/Held/Cane.hs @@ -101,6 +101,7 @@ miniGunUse i = & heldAim . aimRange .~ 1 & heldAim . aimStance .~ TwoHandUnder & heldAim . aimZoom .~ defaultItZoom{_izFac = 1.5} + & heldConsumption .~ [BulletAmmo] miniGunX :: Int -> Item miniGunX i = diff --git a/src/Dodge/Item/Held/Launcher.hs b/src/Dodge/Item/Held/Launcher.hs index acbbce8a6..4bfcf2346 100644 --- a/src/Dodge/Item/Held/Launcher.hs +++ b/src/Dodge/Item/Held/Launcher.hs @@ -32,7 +32,7 @@ launcher = -- & itUse . heldAim . aimHandlePos .~ V2 3 0 -- & itUse . heldAim . aimMuzPos .~ 20 & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 20 0) 0 0] - & itUse . heldConsumption .~ [BulletAmmo] + & itUse . heldConsumption .~ [ProjectileAmmo] & itType . iyBase .~ HELD LAUNCHER & itType . iyModules . at ModLauncherHoming ?~ EMPTYMODULE @@ -42,6 +42,10 @@ launcherX i = & itType . iyBase .~ HELD (LAUNCHERX i) & itUse . heldUse .~ HeldPJCreationX i & itUse . heldMods .~ LauncherXMod i + & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 20 0) a 0 | a <- angles] + where + angles = take i [0,2*pi/ fromIntegral i ..] + --angles = take i [1,2 ..] remoteLauncher :: Item remoteLauncher = diff --git a/src/Dodge/Item/Weapon/BatteryGuns.hs b/src/Dodge/Item/Weapon/BatteryGuns.hs index e2659251c..b36248f2d 100644 --- a/src/Dodge/Item/Weapon/BatteryGuns.hs +++ b/src/Dodge/Item/Weapon/BatteryGuns.hs @@ -22,23 +22,6 @@ import Picture --import Control.Monad.State ---lasPulse :: Item ---lasPulse = lasGun --- & itType . iyBase .~ LASPULSE --- & itUse . useMods .~ --- [ ammoCheckI --- , withItem $ \it -> withTempLight 1 (100 * frac it) (xyzV4 (_lasColor $ _itParams it)) --- , withItem $ \it -> withSoundForVol (frac it) tone440sawtoothquietS 2 --- , withItemUpdate itup --- $ \it -> withMuzPos $ flareCircleAt (_lasColor $ _itParams it) (frac it * 0.8) --- , useAmmoAmount 1 --- ] --- where --- itup it = it --- & itParams . lasCycle %~ (\i -> (i+1) `mod` 20) --- & itParams . lasDamage .~ ceiling ((22 :: Float) * frac it) --- & itParams . lasColor .~ frac it * orange --- frac it = 0.5 * (1 + sin (pi * fromIntegral (_lasCycle $ _itParams it) * 0.1)) --lasWidePulse :: Item --lasWidePulse = lasGun @@ -89,43 +72,10 @@ import Picture -- x it = [ 15 * sin (pi * fromIntegral x' * 0.05) ] -- where -- x' = _lasCycle $ _itParams it ---lasFocus :: Int -> Item ---lasFocus n = lasGunWide n --- & itType . iyBase .~ LASGUNFOCUS n --- & itParams . lasColor .~ red --- & itUse . useMods .~ --- [ ammoCheckI --- , withItem $ \it -> withTempLight 1 100 (xyzV4 (_lasColor $ _itParams it)) --- , withItem $ \it -> withMuzPos $ flareCircleAt (_lasColor $ _itParams it) 0.8 --- , withSoundForI tone440sawtoothquietS 2 --- , useAmmoAmount 1 --- , duplicateOffsetsFocus xs --- ] --- where --- n' = 9 * n --- xs = [ 0.25 * (fromIntegral x - fromIntegral (n'-1) /2) | x <- [0..n'-1] ] ---lasSwing :: Item ---lasSwing = lasGun --- & itType . iyBase .~ LASGUNSWING --- & itParams . lasColor .~ orange --- & itUse . useMods .~ --- [ ammoCheckI --- , withItem $ \it -> withTempLight 1 100 (xyzV4 (_lasColor $ _itParams it)) --- , withItem $ \it -> withMuzPos $ flareCircleAt (_lasColor $ _itParams it) 0.8 --- , withSoundForI tone440sawtoothquietS 2 --- , useAmmoAmount 1 --- , withItemUpdate itup $ \it -> duplicateOffsetsFocus (x it) --- ] --- where --- itup = itParams . lasCycle %~ (\i -> (i+1) `mod` 200) --- x it = [-y,y] --- where --- y = 15 * sin (pi * fromIntegral x' * 0.01) --- x' = _lasCycle $ _itParams it shootLaser :: [Item] -> Item -> Creature -> World -> World -shootLaser ams it cr = +shootLaser _ it cr = cWorld . lWorld . lasers .:~ lasRayAt (_lasColor $ _itParams it) diff --git a/src/Dodge/Item/Weapon/SonicGuns.hs b/src/Dodge/Item/Weapon/SonicGuns.hs index ea9ff196c..1124fb8a6 100644 --- a/src/Dodge/Item/Weapon/SonicGuns.hs +++ b/src/Dodge/Item/Weapon/SonicGuns.hs @@ -18,25 +18,6 @@ module Dodge.Item.Weapon.SonicGuns where ----import Data.Tuple ----import qualified IntMapHelp as IM -- -----sonicGun :: Item -----sonicGun = defaultAutoGun ----- { _itConsumption = defaultLoadable ----- & laMax .~ 10 ----- & laCycle .~ [loadEject 10, loadInsert 10 , loadPrime 60] ----- , _itParams = NoParams ----- , _itTweaks = NoTweaks ----- } ----- & itDimension . dimRad .~ 10 ----- & itDimension . dimCenter .~ V3 15 0 0 ----- & itUse . useDelay . rateMax .~ 8 ----- & itUse . rUse .~ HeldSonicWave --aSonicWave ----- & itUse . useMods .~ AmmoHammerTimeUseOneMod ----- & itUse . useAim . aimWeight .~ 6 ----- & itUse . useAim . aimRange .~ 1 ----- & itUse . useAim . aimStance .~ TwoHandTwist ----- & itUse . useAim . aimMuzPos .~ 25 ----- & itType . iyBase .~ HELD SONICGUN --- ----aSonicWave :: Item -> Creature -> World -> World ----aSonicWave it cr = instantParticles .:~ sonicWave pos dir cpos ---- where diff --git a/src/Dodge/Item/Weapon/TriggerType.hs b/src/Dodge/Item/Weapon/TriggerType.hs index 8065d2418..a23704c3a 100644 --- a/src/Dodge/Item/Weapon/TriggerType.hs +++ b/src/Dodge/Item/Weapon/TriggerType.hs @@ -73,7 +73,7 @@ import Dodge.Reloading import Dodge.SoundLogic import Dodge.WorldEvent import Geometry -import qualified IntMapHelp as IM +--import qualified IntMapHelp as IM import LensHelp import RandomHelp import qualified SDL @@ -145,6 +145,9 @@ ammoCheckI :: ChainEffect ammoCheckI eff ams itm cr w = fromMaybe (failsound w) $ do x <- ams ^? ix 0 . itUse . amagLoadStatus . iaLoaded guard $ x > 0 + matype <- ams ^? ix 0 . itUse . amagType + iatype <- itm ^? itUse . heldConsumption . ix 0 + guard $ matype == iatype return $ eff ams itm cr $ w & cWorld . lWorld . creatures . ix (_crID cr) %~ crCancelReloading where failsound = case w ^? input . mouseButtons . ix SDL.ButtonLeft of @@ -239,7 +242,7 @@ withSoundStart :: SoundID -> ChainEffect withSoundStart soundid f ams item cr = - soundMultiFrom [CrWeaponSound cid 0, CrWeaponSound cid 1, CrWeaponSound cid 2] (_crPos cr) soundid Nothing + soundMultiFrom [CrWeaponSound cid j | j <- [0..3]] (_crPos cr) soundid Nothing . f ams item cr where cid = _crID cr @@ -346,7 +349,7 @@ useAllAmmo eff ams item cr w = fromMaybe w $ do useAmmoUpTo :: Int -> ChainEffect useAmmoUpTo amAmount eff ams itm cr = fromMaybe id $ do - x <- ams ^? ix 0 . itUse . amagLoadStatus . iaLoaded + _ <- ams ^? ix 0 . itUse . amagLoadStatus . iaLoaded invid <- ams ^? ix 0 . itLocation . ipInvID return $ eff ams itm cr . ( cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix invid . itUse . amagLoadStatus . iaLoaded diff --git a/src/Dodge/Projectile/Create.hs b/src/Dodge/Projectile/Create.hs index 635596007..478fb474b 100644 --- a/src/Dodge/Projectile/Create.hs +++ b/src/Dodge/Projectile/Create.hs @@ -1,22 +1,42 @@ module Dodge.Projectile.Create where +import Dodge.SoundLogic +import Dodge.Reloading +import Control.Monad +import Data.Maybe import Dodge.Data.World import Geometry import qualified IntMapHelp as IM import LensHelp ---import Data.Maybe +import qualified SDL -createProjectile :: AmmoParams -> Item -> Creature -> World -> World -createProjectile apm itm cr = case pt of - CreateShell -> fireShell apm itm cr - CreateTrackingShell -> fireTrackingShell apm itm cr +createProjectile :: Item -> Muzzle -> Item -> Creature -> World -> World +createProjectile ammoitem muz itm cr = fromMaybe failsound $ do + x <- ammoitem ^? itUse . amagLoadStatus . iaLoaded + guard $ x > 0 + matype <- ammoitem ^? itUse . amagType + guard $ matype == ProjectileAmmo + j <- ammoitem ^? itLocation . ipInvID + pt <- ammoitem ^? itUse . amagParams . ampPjCreation + return $ case pt of + CreateShell -> fireShell ammoitem muz itm cr . extrafuncs j + CreateTrackingShell -> fireTrackingShell ammoitem muz itm cr . extrafuncs j where - pt = _ampPjCreation apm + extrafuncs j = cancelanyreloading . startthesound . useammo j + useammo j = cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix j . itUse . amagLoadStatus . iaLoaded -~ 1 + + cancelanyreloading = cWorld . lWorld . creatures . ix (_crID cr) %~ crCancelReloading + -- the sound should be moved to the projectile firing + startthesound = soundMultiFrom [CrWeaponSound (_crID cr) j | j <- [0..3]] (_crPos cr) tap4S Nothing + failsound w' = case w' ^? input . mouseButtons . ix SDL.ButtonLeft of + Just 0 -> soundStart (CrReloadSound (_crID cr)) (_crPos cr) click1S Nothing w' + _ -> soundContinue (CrReloadSound (_crID cr)) (_crPos cr) click1S Nothing w' -fireShell :: AmmoParams -> Item -> Creature -> World -> World -fireShell ap it cr = +fireShell :: Item -> Muzzle -> Item -> Creature -> World -> World +fireShell ammoitem muz it cr = makeShell - ap + ammoitem + muz it cr [ PJShellCollisionCheck @@ -31,43 +51,48 @@ fireShell ap it cr = spinamount = _shellSpinAmount params thrustdelay = _shellThrustDelay params -makeShell :: AmmoParams -> Item -> Creature -> [ProjectileUpdate] -> World -> World -makeShell ap it cr theupdate w = - w & cWorld . lWorld . projectiles . at i - ?~ Shell - { _prjPos = pos - , _prjZ = 20 - , _prjStartPos = pos - , _prjVel = rotateV dir (V2 1 0) - , _prjDraw = DrawShell - , _prjID = i - , _prjAcc = rotateV dir (V2 3 0) - , _prjDir = dir - , _prjSpin = 0 - , _prjPayload = _ampPayload ap - , _prjTimer = 350 - , _prjUpdates = theupdate - , _prjMITID = Just $ _itID it - } +makeShell :: Item -> Muzzle -> Item -> Creature -> [ProjectileUpdate] -> World -> World +makeShell ammoitem muz it cr theupdate w = fromMaybe w $ do + aparams <- ammoitem ^? itUse . amagParams + return $ + w & cWorld . lWorld . projectiles . at i + ?~ Shell + { _prjPos = pos + , _prjZ = 20 + , _prjStartPos = pos + , _prjVel = rotateV dir (V2 1 0) + , _prjDraw = DrawShell + , _prjID = i + , _prjAcc = rotateV dir (V2 3 0) + , _prjDir = dir + , _prjSpin = 0 + , _prjPayload = _ampPayload aparams + , _prjTimer = 350 + , _prjUpdates = theupdate + , _prjMITID = Just $ _itID it + } where - i = IM.newKey $ w ^. cWorld . lWorld . props-- _props (_cWorld w) - dir = _crDir cr - pos = _crPos cr +.+ rotateV dir (V2 (_crRad cr + 1) 0) - --am = _heldConsumption $ _itUse it + i = IM.newKey $ w ^. cWorld . lWorld . projectiles -- _props (_cWorld w) + dir = _crDir cr + _mzRot muz + pos = _crPos cr +.+ rotateV dir (_mzPos muz) -fireTrackingShell :: AmmoParams -> Item -> Creature -> World -> World -fireTrackingShell ap it cr = - makeShell - ap - it - cr - [ PJRemoteShellCollisionCheck - , PJDecTimMvVel - , PJSpin 335 (_crID cr) spinamount - , PJTrack (350 - thrustdelay) 0 (_itID it) - , PJThrust (350 - thrustdelay) 0 - , PJReduceSpin (1 - fromIntegral spindrag * 2 / 200) - ] +--am = _heldConsumption $ _itUse it + +fireTrackingShell :: Item -> Muzzle -> Item -> Creature -> World -> World +fireTrackingShell ammoitem muz it cr = fromMaybe id $ do + return $ + makeShell + ammoitem + muz + it + cr + [ PJRemoteShellCollisionCheck + , PJDecTimMvVel + , PJSpin 335 (_crID cr) spinamount + , PJTrack (350 - thrustdelay) 0 (_itID it) + , PJThrust (350 - thrustdelay) 0 + , PJReduceSpin (1 - fromIntegral spindrag * 2 / 200) + ] where spinamount = _shellSpinAmount params thrustdelay = _shellThrustDelay params diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index 9e92dacd7..458363d6a 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -17,9 +17,12 @@ import Dodge.Data.Universe --import Data.Maybe --import ShortShow --import qualified Data.Map.Strict as M ---import qualified IntMapHelp as IM +import qualified IntMapHelp as IM testStringInit :: Universe -> [String] -testStringInit _ = [] +testStringInit u = [fromMaybe "" $ do + proj <- u ^? uvWorld . cWorld . lWorld . projectiles + return $ show $ IM.size proj + ] -- [fromMaybe "" $ do -- cr <- u ^? uvWorld . cWorld . lWorld . creatures . ix 0 -- i <- cr ^? crManipulation . manObject . inInventory . ispItem diff --git a/tags b/tags index 7295ce5dd..ff81d1325 100644 --- a/tags +++ b/tags @@ -200,7 +200,7 @@ BURSTRIFLE src/Dodge/Data/Item/Combine.hs 174;" C BackgroundSound src/Dodge/Data/SoundOrigin.hs 14;" C Ball src/Dodge/Tesla/Ball.hs 1;" m BangCaneMod src/Dodge/Data/Item/HeldUse.hs 85;" C -BangConeMod src/Dodge/Data/Item/HeldUse.hs 104;" C +BangConeMod src/Dodge/Data/Item/HeldUse.hs 102;" C BangRodMod src/Dodge/Data/Item/HeldUse.hs 89;" C BangStickMod src/Dodge/Data/Item/HeldUse.hs 94;" C Bark src/Dodge/Data/ActionPlan.hs 40;" C @@ -2170,8 +2170,6 @@ ResourceFailure src/Dodge/Data/Scenario.hs 29;" C RetailFacility src/Dodge/Data/Scenario.hs 67;" C ReturnEffect src/Dodge/Terminal/ReturnEffect.hs 1;" m Revenge src/Dodge/Data/Scenario.hs 6;" C -RevolverXMod src/Dodge/Data/Item/HeldUse.hs 102;" C -RevolverXRepeatMod src/Dodge/Data/Item/HeldUse.hs 103;" C RewindEffect src/Dodge/Data/ItEffect.hs 38;" C RewindLeftClick src/Dodge/Data/World.hs 72;" C RezBaySS src/Dodge/Data/Scenario.hs 105;" C @@ -4375,7 +4373,7 @@ advanceScrollAmount src/Dodge/Update.hs 297;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 29;" f advanceStepCounter src/Dodge/Creature/Action/Movement.hs 56;" f advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 45;" f -afterRecoil src/Dodge/Item/Weapon/TriggerType.hs 288;" f +afterRecoil src/Dodge/Item/Weapon/TriggerType.hs 291;" f aimDelaySweep src/Dodge/Render/ShapePicture.hs 44;" f aimStanceInfo src/Dodge/Item/Info.hs 230;" f aimTurn src/Dodge/Creature/YourControl.hs 188;" f @@ -4509,7 +4507,7 @@ bangRod src/Dodge/Item/Weapon/BulletGun/Rod.hs 18;" f bangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 478;" f bangStick src/Dodge/Item/Held/Stick.hs 16;" f bangStick src/Dodge/Item/Weapon/BulletGun/Stick.hs 17;" f -bangStickSoundChoice src/Dodge/HeldUse.hs 515;" f +bangStickSoundChoice src/Dodge/HeldUse.hs 494;" f bangStickSoundChoice src/Dodge/HeldUse/BulletWeapon.hs 226;" f barPP src/Dodge/Room/Foreground.hs 236;" f barrel src/Dodge/Creature/Inanimate.hs 17;" f @@ -4530,7 +4528,7 @@ baseStickSpread src/Dodge/Item/Held/Stick.hs 35;" f baseStickSpread src/Dodge/Item/Weapon/BulletGun/Stick.hs 46;" f baseWindowPane src/Dodge/Placements/Wall.hs 73;" f baseWindowPane src/Dodge/Room/Placement.hs 103;" f -basicAmPjMoves src/Dodge/Item/Held/Launcher.hs 54;" f +basicAmPjMoves src/Dodge/Item/Held/Launcher.hs 58;" f basicAttentionUpdate src/Dodge/Creature/AlertLevel.hs 50;" f basicAttentionUpdate src/Dodge/Creature/Perception.hs 127;" f basicAwarenessUpdate src/Dodge/Creature/AlertLevel.hs 25;" f @@ -4556,7 +4554,7 @@ bezierGun src/Dodge/Item/Weapon/Bezier.hs 24;" f bfsNodePoints src/Dodge/Path.hs 58;" f bfsThenReturn src/Dodge/Creature/ReaderUpdate.hs 233;" f bindFBO src/Render.hs 244;" f -blCheck src/Dodge/Item/Weapon/TriggerType.hs 378;" f +blCheck src/Dodge/Item/Weapon/TriggerType.hs 381;" f black src/Color.hs 27;" f blank src/Picture/Base.hs 59;" f blinkAcrossChallenge src/Dodge/Room/BlinkAcross.hs 14;" f @@ -4640,7 +4638,7 @@ canAttachTargeting src/Dodge/Item/Display.hs 33;" f canHeldScrollAttach src/Dodge/HeldScroll.hs 75;" f canSee src/Dodge/Base/Collide.hs 228;" f canSeeIndirect src/Dodge/Base/Collide.hs 235;" f -caneStickSoundChoice src/Dodge/HeldUse.hs 510;" f +caneStickSoundChoice src/Dodge/HeldUse.hs 489;" f cardList src/Dodge/Base/CardinalPoint.hs 6;" f cardVec src/Dodge/Base/CardinalPoint.hs 9;" f cardinalVectors src/Dodge/FloorItem.hs 38;" f @@ -4794,8 +4792,8 @@ composeTree src/Dodge/Tree/Compose.hs 46;" f computerBeepingS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 458;" f conEffects src/Dodge/Concurrent.hs 17;" f concBall src/Dodge/WorldEvent/SpawnParticle.hs 27;" f -coneRandItemParams src/Dodge/HeldUse.hs 524;" f -coneRandItemUpdate src/Dodge/HeldUse.hs 518;" f +coneRandItemParams src/Dodge/HeldUse.hs 503;" f +coneRandItemUpdate src/Dodge/HeldUse.hs 497;" f connectRoom src/Dodge/Layout/Tree/Either.hs 48;" f connectTrunk src/Dodge/Layout/Tree/Either.hs 54;" f connectionBlurb src/Dodge/Terminal.hs 100;" f @@ -4876,7 +4874,7 @@ createHeldLight src/Dodge/ItEffect.hs 70;" f createLightMap src/Render.hs 26;" f createNewArc src/Dodge/Tesla/Arc.hs 76;" f createPathGrid src/Dodge/Room/Path.hs 21;" f -createProjectile src/Dodge/Projectile/Create.hs 9;" f +createProjectile src/Dodge/Projectile/Create.hs 10;" f createPutItem src/Dodge/Inventory/Add.hs 52;" f createShieldWall src/Dodge/Euse.hs 134;" f createTorchLightOffset src/Dodge/LightSource/Torch.hs 9;" f @@ -5377,12 +5375,12 @@ dualBeam src/Dodge/Item/Held/BatteryGuns.hs 136;" f dualBeamPic src/Dodge/Item/Draw/SPic.hs 463;" f dualRayAt src/Dodge/Item/Weapon/BatteryGuns.hs 194;" f dummyMenuOption src/Dodge/Menu/Option.hs 81;" f -duplicateItem src/Dodge/Item/Weapon/TriggerType.hs 709;" f -duplicateLoaded src/Dodge/Item/Weapon/TriggerType.hs 660;" f -duplicateLoadedBarrels src/Dodge/Item/Weapon/TriggerType.hs 682;" f -duplicateNumBarrels src/Dodge/Item/Weapon/TriggerType.hs 668;" f -duplicateOffsetsFocus src/Dodge/Item/Weapon/TriggerType.hs 690;" f -duplicateOffsetsV2 src/Dodge/Item/Weapon/TriggerType.hs 714;" f +duplicateItem src/Dodge/Item/Weapon/TriggerType.hs 712;" f +duplicateLoaded src/Dodge/Item/Weapon/TriggerType.hs 663;" f +duplicateLoadedBarrels src/Dodge/Item/Weapon/TriggerType.hs 685;" f +duplicateNumBarrels src/Dodge/Item/Weapon/TriggerType.hs 671;" f +duplicateOffsetsFocus src/Dodge/Item/Weapon/TriggerType.hs 693;" f +duplicateOffsetsV2 src/Dodge/Item/Weapon/TriggerType.hs 717;" f ebFlicker src/Dodge/EnergyBall.hs 94;" f edgeFormatting src/Dodge/Combine/Graph.hs 119;" f edgeToPic src/Dodge/Debug/Picture.hs 392;" f @@ -5468,11 +5466,11 @@ findReverseEdgeList src/Polyhedra.hs 56;" f findWallFreeDropPoint src/Dodge/FloorItem.hs 46;" f findWallsInPolygon src/Dodge/LevelGen/StaticWalls/Deprecated.hs 78;" f fireLoudS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 504;" f -fireRemoteShell src/Dodge/HeldUse.hs 485;" f +fireRemoteShell src/Dodge/HeldUse.hs 464;" f fireS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 332;" f -fireShell src/Dodge/Projectile/Create.hs 16;" f +fireShell src/Dodge/Projectile/Create.hs 17;" f fireSound src/Dodge/SoundLogic/Synonyms.hs 4;" f -fireTrackingShell src/Dodge/Projectile/Create.hs 58;" f +fireTrackingShell src/Dodge/Projectile/Create.hs 62;" f firstBreather src/Dodge/Room/Breather.hs 9;" f firstWorldLoad appDodge/Main.hs 77;" f fixedCoordPictures src/Dodge/Render/Picture.hs 17;" f @@ -5578,7 +5576,7 @@ geometryQuickCheckTests test/Spec.hs 55;" f geometryTests test/Spec.hs 17;" f geometryUnitTests test/Spec.hs 22;" f geqConstr src/SameConstr.hs 21;" f -getAmmoMagazine src/Dodge/HeldUse.hs 462;" f +getAmmoMagazine src/Dodge/HeldUse.hs 441;" f getAmmoMags src/Dodge/Creature/Impulse/UseItem.hs 35;" f getArguments src/Dodge/Update/Scroll.hs 147;" f getArguments' src/Dodge/Update/Scroll.hs 135;" f @@ -5657,7 +5655,7 @@ hackOutline src/Dodge/Render/Outline.hs 5;" f halfHeight src/Dodge/Base/Window.hs 48;" f halfWidth src/Dodge/Base/Window.hs 48;" f haltSound src/Dodge/SoundLogic.hs 37;" f -hammerCheckL src/Dodge/Item/Weapon/TriggerType.hs 386;" f +hammerCheckL src/Dodge/Item/Weapon/TriggerType.hs 389;" f handleEvent src/Dodge/Event.hs 27;" f handleHotkeys src/Dodge/Creature/YourControl.hs 42;" f handleKeyboardEvent src/Dodge/Event/Input.hs 22;" f @@ -5850,7 +5848,7 @@ itBounds src/Dodge/Item/Module.hs 22;" f itSlotsTaken src/Dodge/Inventory/ItemSpace.hs 9;" f itSlotsTaken src/Dodge/Item/SlotsTaken.hs 9;" f itStackAmount src/Dodge/Item/Amount.hs 7;" f -itUseCharge src/Dodge/Item/Weapon/TriggerType.hs 154;" f +itUseCharge src/Dodge/Item/Weapon/TriggerType.hs 157;" f itemBaseName src/Dodge/Item/Display.hs 75;" f itemBlips src/Dodge/Item/Weapon/UseEffect.hs 38;" f itemBlips src/Dodge/RadarSweep.hs 74;" f @@ -5938,14 +5936,14 @@ lasTunnelRunPast src/Dodge/Room/LasTurret.hs 165;" f lasTurret src/Dodge/Placement/Instance/Turret.hs 23;" f lasTurret src/Dodge/Placements/Turret.hs 29;" f lasWide src/Dodge/Item/Held/BatteryGuns.hs 97;" f -lasWideRate src/Dodge/HeldUse.hs 377;" f +lasWideRate src/Dodge/HeldUse.hs 353;" f latchkey src/Dodge/Item/Held/Utility.hs 23;" f latchkey src/Dodge/Item/PassKey.hs 14;" f -launcher src/Dodge/Item/Held/Launcher.hs 10;" f +launcher src/Dodge/Item/Held/Launcher.hs 11;" f launcherCrit src/Dodge/Creature/LauncherCrit.hs 12;" f launcherPic src/Dodge/Item/Draw/SPic.hs 423;" f launcherSound src/Dodge/SoundLogic/Synonyms.hs 4;" f -launcherX src/Dodge/Item/Held/Launcher.hs 39;" f +launcherX src/Dodge/Item/Held/Launcher.hs 40;" f layerNum src/Picture/Data.hs 31;" f layoutLevelFromSeed src/Dodge/LevelGen.hs 47;" f ldpVerticalSelection src/Dodge/Update/Input/ScreenLayer.hs 90;" f @@ -6095,7 +6093,7 @@ makeShaderProgram src/Shader/Compile.hs 287;" f makeShaderUsingVAO src/Shader/Compile.hs 155;" f makeShaderUsingVBO src/Shader/Compile.hs 78;" f makeShaderVBO src/Shader/Compile.hs 38;" f -makeShell src/Dodge/Projectile/Create.hs 34;" f +makeShell src/Dodge/Projectile/Create.hs 37;" f makeShockwaveAt src/Dodge/WorldEvent/Shockwave.hs 12;" f makeSourcedShader src/Shader/Compile.hs 203;" f makeStartCloudAt src/Dodge/WorldEvent/Cloud.hs 60;" f @@ -6146,10 +6144,10 @@ mcProximitySensorUpdate src/Dodge/Machine/Update.hs 104;" f mcSPic src/Dodge/Render/ShapePicture.hs 169;" f mcSensorTriggerUpdate src/Dodge/Machine/Update.hs 69;" f mcSensorUpdate src/Dodge/Machine/Update.hs 99;" f -mcShootLaser src/Dodge/HeldUse.hs 532;" f +mcShootLaser src/Dodge/HeldUse.hs 511;" f mcTriggerVal src/Dodge/Machine/Update.hs 75;" f mcTypeUpdate src/Dodge/Machine/Update.hs 24;" f -mcUseHeld src/Dodge/HeldUse.hs 380;" f +mcUseHeld src/Dodge/HeldUse.hs 356;" f mcUseItem src/Dodge/Machine/Update.hs 61;" f medkit src/Dodge/Item/Consumable.hs 8;" f meleeHeadingMove src/Dodge/Creature/Boid.hs 281;" f @@ -6192,7 +6190,7 @@ mini1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 322;" f miniGunCrit src/Dodge/Creature.hs 62;" f miniGunUse src/Dodge/Item/Held/Cane.hs 94;" f miniGunUse src/Dodge/Item/Weapon/BulletGun/Cane.hs 113;" f -miniGunX src/Dodge/Item/Held/Cane.hs 105;" f +miniGunX src/Dodge/Item/Held/Cane.hs 106;" f miniGunX src/Dodge/Item/Weapon/BulletGun/Cane.hs 120;" f miniGunXPict src/Dodge/Item/Draw/SPic.hs 383;" f miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 377;" f @@ -6222,7 +6220,7 @@ mntLight src/Dodge/Placement/Instance/LightSource.hs 154;" f mntLight src/Dodge/Placements/LightSource.hs 89;" f mntLightLnkCond src/Dodge/Placement/Instance/LightSource.hs 159;" f mntLightLnkCond src/Dodge/Placements/LightSource.hs 94;" f -modClock src/Dodge/Item/Weapon/TriggerType.hs 445;" f +modClock src/Dodge/Item/Weapon/TriggerType.hs 448;" f modTo src/Geometry/Zone.hs 10;" f modifierKey src/Dodge/Config/KeyConfig.hs 34;" f moduleAttachPosition src/Dodge/Item/Module.hs 6;" f @@ -6385,9 +6383,9 @@ overColObj src/Shape.hs 269;" f overColSH src/Shape.hs 237;" f overLnkPosDir src/Dodge/RoomLink.hs 100;" f overLnkType src/Dodge/RoomLink.hs 87;" f -overNozzle src/Dodge/HeldUse.hs 443;" f -overNozzles src/Dodge/HeldUse.hs 421;" f -overNozzles' src/Dodge/HeldUse.hs 430;" f +overNozzle src/Dodge/HeldUse.hs 422;" f +overNozzles src/Dodge/HeldUse.hs 400;" f +overNozzles' src/Dodge/HeldUse.hs 409;" f overPos src/Picture/Base.hs 302;" f overPosObj src/Shape.hs 273;" f overPosSH src/Shape.hs 257;" f @@ -6754,7 +6752,7 @@ randsOnCirc src/RandomHelp.hs 118;" f randsSpread src/Dodge/RandomHelp.hs 100;" f randsSpread src/RandomHelp.hs 111;" f ratIntersectLineLine src/Geometry/Intersect.hs 195;" f -rateIncAB src/Dodge/Item/Weapon/TriggerType.hs 164;" f +rateIncAB src/Dodge/Item/Weapon/TriggerType.hs 167;" f readSaveSlot src/Dodge/Save.hs 45;" f rectNESW src/Geometry/Polygon.hs 13;" f rectNSWE src/Geometry/Polygon.hs 19;" f @@ -6788,7 +6786,7 @@ reloadS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 426;" f reloadSound src/Dodge/SoundLogic/Synonyms.hs 4;" f rememberSounds src/Dodge/Creature/Perception.hs 177;" f remoteBombUnarmedPic src/Dodge/Item/Weapon/Grenade.hs 268;" f -remoteLauncher src/Dodge/Item/Held/Launcher.hs 46;" f +remoteLauncher src/Dodge/Item/Held/Launcher.hs 50;" f remoteShellCollisionCheck src/Dodge/Projectile/Update.hs 44;" f remoteShellShape src/Dodge/Projectile/Draw.hs 39;" f removeEither src/Dodge/Layout/Tree/Either.hs 41;" f @@ -6805,7 +6803,7 @@ renderLayer src/Render.hs 233;" f renderLightingNoShadows src/Render.hs 48;" f renderListAt src/Dodge/Render/List.hs 160;" f renderShadows src/Render.hs 117;" f -repeatOnFrames src/Dodge/Item/Weapon/TriggerType.hs 648;" f +repeatOnFrames src/Dodge/Item/Weapon/TriggerType.hs 651;" f repeatTransformed src/Dodge/Item/Weapon/TriggerType.hs 95;" f repeater src/Dodge/Item/Held/Cane.hs 72;" f repeater src/Dodge/Item/Weapon/BulletGun/Cane.hs 89;" f @@ -7111,7 +7109,7 @@ shootFirstMiss src/Dodge/Creature/Volition.hs 33;" f shootFlameSpitter src/Dodge/HeldUse/SprayWeapon.hs 9;" f shootFlameSpitterRepeat src/Dodge/HeldUse/SprayWeapon.hs 19;" f shootFlameThrower src/Dodge/HeldUse/SprayWeapon.hs 26;" f -shootL src/Dodge/Item/Weapon/TriggerType.hs 400;" f +shootL src/Dodge/Item/Weapon/TriggerType.hs 403;" f shootLaser src/Dodge/Item/Weapon/BatteryGuns.hs 127;" f shootMachineGun src/Dodge/HeldUse/BulletWeapon.hs 218;" f shootMachinePistol src/Dodge/HeldUse/BulletWeapon.hs 62;" f @@ -7123,7 +7121,7 @@ shootRevolverXRepeat src/Dodge/HeldUse/BulletWeapon.hs 49;" f shootRifle src/Dodge/HeldUse/BulletWeapon.hs 140;" f shootShatter src/Dodge/Item/Weapon/Shatter.hs 12;" f shootSmgMod src/Dodge/HeldUse/BulletWeapon.hs 86;" f -shootTeslaArc src/Dodge/HeldUse.hs 541;" f +shootTeslaArc src/Dodge/HeldUse.hs 520;" f shootTillEmpty src/Dodge/Creature/Volition.hs 18;" f shootVolleyGun src/Dodge/HeldUse/BulletWeapon.hs 128;" f shootersRoom src/Dodge/Room/Room.hs 317;" f @@ -7161,7 +7159,7 @@ shuffleLinks src/Dodge/Room/Link.hs 30;" f shuffleRoomPos src/Dodge/Layout.hs 78;" f shuffleTail src/Dodge/RandomHelp.hs 50;" f shuffleTail src/RandomHelp.hs 55;" f -sideEffectOnFrame src/Dodge/Item/Weapon/TriggerType.hs 628;" f +sideEffectOnFrame src/Dodge/Item/Weapon/TriggerType.hs 631;" f sideEffectUpdatePreload src/Dodge/PreloadData.hs 7;" f sigmoid src/Dodge/Base.hs 129;" f simpleCrSprings src/Dodge/Update.hs 639;" f @@ -7241,8 +7239,8 @@ spawnSmokeAtCursor src/Dodge/WorldEvent/Cloud.hs 73;" f spawnerCrit src/Dodge/Creature.hs 55;" f spawnerRoom src/Dodge/Room/Room.hs 362;" f speedLegs src/Dodge/Item/Equipment.hs 131;" f -spinDrag src/Dodge/Item/Held/Launcher.hs 62;" f -spinStart src/Dodge/Item/Held/Launcher.hs 70;" f +spinDrag src/Dodge/Item/Held/Launcher.hs 66;" f +spinStart src/Dodge/Item/Held/Launcher.hs 74;" f splashMenu src/Dodge/Menu.hs 27;" f splashMenuOptions src/Dodge/Menu.hs 32;" f splashScreen src/Dodge/Initialisation.hs 11;" f @@ -7287,7 +7285,7 @@ ssfold src/FoldableHelp.hs 104;" f stackPicturesAt src/Dodge/Render/List.hs 81;" f stackPicturesAtOff src/Dodge/Render/List.hs 84;" f stackText src/Picture/Base.hs 188;" f -stackedInventory src/Dodge/Creature.hs 253;" f +stackedInventory src/Dodge/Creature.hs 259;" f startCr src/Dodge/Creature.hs 91;" f startCrafts src/Dodge/Room/Start.hs 102;" f startInvList src/Dodge/Creature.hs 109;" f @@ -7401,7 +7399,7 @@ teslaParams src/Dodge/Tesla/ItemParams.hs 6;" f testCrossWalls src/Dodge/Room/Path.hs 47;" f testEvent src/Dodge/Event/Test.hs 10;" f testEventKey src/Dodge/Config/KeyConfig.hs 27;" f -testInventory src/Dodge/Creature.hs 230;" f +testInventory src/Dodge/Creature.hs 236;" f testPic src/Dodge/Render/ShapePicture.hs 153;" f testStringInit src/Dodge/TestString.hs 21;" f text src/Picture/Base.hs 192;" f @@ -7430,7 +7428,7 @@ thingsHit src/Dodge/WorldEvent/ThingsHit.hs 29;" f thingsHitExceptCr src/Dodge/WorldEvent/ThingsHit.hs 73;" f threeLineDecoration src/Dodge/Placement/TopDecoration.hs 61;" f throwRemoteBomb src/Dodge/Item/Weapon/Grenade.hs 205;" f -thrustParam src/Dodge/Item/Held/Launcher.hs 78;" f +thrustParam src/Dodge/Item/Held/Launcher.hs 82;" f tileTexCoords src/Tile.hs 10;" f tilesFromRooms src/Dodge/Layout.hs 205;" f tilesToLine src/Shader/AuxAddition.hs 66;" f @@ -7475,10 +7473,10 @@ topPrismEdgeIndices src/Shader/Poke.hs 327;" f topPrismIndices src/Shader/Poke.hs 402;" f torch src/Dodge/Item/Held/Utility.hs 26;" f torchShape src/Dodge/Item/Draw/SPic.hs 195;" f -torqueBefore src/Dodge/Item/Weapon/TriggerType.hs 558;" f -torqueBeforeAtLeast src/Dodge/Item/Weapon/TriggerType.hs 581;" f +torqueBefore src/Dodge/Item/Weapon/TriggerType.hs 561;" f +torqueBeforeAtLeast src/Dodge/Item/Weapon/TriggerType.hs 584;" f torqueCr src/Dodge/WorldEffect.hs 64;" f -torqueSideEffect src/Dodge/Item/Weapon/TriggerType.hs 636;" f +torqueSideEffect src/Dodge/Item/Weapon/TriggerType.hs 639;" f torso src/Dodge/Creature/Picture.hs 132;" f tractCr src/Dodge/TractorBeam/Update.hs 27;" f tractFlIt src/Dodge/TractorBeam/Update.hs 22;" f @@ -7748,16 +7746,16 @@ upperPrismPolySU src/Shape.hs 112;" f upperPrismPolyTS src/Shape.hs 118;" f upperRounded src/Shape.hs 181;" f upsProjectile src/Dodge/Projectile/Update.hs 53;" f -useAllAmmo src/Dodge/Item/Weapon/TriggerType.hs 339;" f -useAmmoAmount src/Dodge/Item/Weapon/TriggerType.hs 356;" f +useAllAmmo src/Dodge/Item/Weapon/TriggerType.hs 342;" f +useAmmoAmount src/Dodge/Item/Weapon/TriggerType.hs 359;" f useAmmoParams src/Dodge/Item/Weapon/AmmoParams.hs 17;" f -useAmmoUpTo src/Dodge/Item/Weapon/TriggerType.hs 347;" f +useAmmoUpTo src/Dodge/Item/Weapon/TriggerType.hs 350;" f useC src/Dodge/Cuse.hs 6;" f useE src/Dodge/Euse.hs 24;" f useEquipment src/Dodge/Creature/State.hs 219;" f -useForceFieldGun src/Dodge/HeldUse.hs 554;" f -useGasParams src/Dodge/HeldUse.hs 471;" f -useHeld src/Dodge/HeldUse.hs 385;" f +useForceFieldGun src/Dodge/HeldUse.hs 533;" f +useGasParams src/Dodge/HeldUse.hs 450;" f +useHeld src/Dodge/HeldUse.hs 361;" f useHotKey src/Dodge/Creature/YourControl.hs 49;" f useItem src/Dodge/Creature/Action/UseItem.hs 14;" f useItemHotkey src/Dodge/Creature/Impulse/UseItem.hs 120;" f @@ -7770,15 +7768,15 @@ useMagShield src/Dodge/Euse.hs 69;" f useMod src/Dodge/HeldUse.hs 28;" f useNormalCamera src/Dodge/Camera.hs 6;" f usePayload src/Dodge/Payload.hs 7;" f -usePjCreation src/Dodge/HeldUse.hs 404;" f -usePjCreationX src/Dodge/HeldUse.hs 409;" f +usePjCreation src/Dodge/HeldUse.hs 380;" f +usePjCreationX src/Dodge/HeldUse.hs 386;" f useRewindGun src/Dodge/Luse.hs 41;" f useRoomPosCond src/Dodge/PlacementSpot.hs 178;" f useRoomPosRoomCond src/Dodge/PlacementSpot.hs 181;" f useShrinkGun src/Dodge/Luse.hs 59;" f useStopWatch src/Dodge/Luse.hs 24;" f useTargetPos src/Dodge/Item/Weapon/Targeting.hs 9;" f -useTimeCheck src/Dodge/Item/Weapon/TriggerType.hs 367;" f +useTimeCheck src/Dodge/Item/Weapon/TriggerType.hs 370;" f useTimeScrollGun src/Dodge/Luse.hs 32;" f useUnusedLnk src/Dodge/PlacementSpot.hs 169;" f useUpdate src/Dodge/Creature/State.hs 211;" f @@ -7875,36 +7873,36 @@ windowxsize src/LoadConfig.hs 12;" f windowysize src/LoadConfig.hs 13;" f withAlpha src/Color.hs 10;" f withByteString src/Shader/Compile.hs 370;" f -withCrPos src/Dodge/Item/Weapon/TriggerType.hs 483;" f -withCrPosShift src/Dodge/Item/Weapon/TriggerType.hs 486;" f -withFlare src/Dodge/Item/Weapon/TriggerType.hs 450;" f -withItem src/Dodge/Item/Weapon/TriggerType.hs 423;" f -withItemUpdate src/Dodge/Item/Weapon/TriggerType.hs 432;" f -withItemUpdateFirst src/Dodge/Item/Weapon/TriggerType.hs 427;" f -withMuzFlare src/Dodge/Item/Weapon/TriggerType.hs 462;" f -withOldDir src/Dodge/Item/Weapon/TriggerType.hs 500;" f -withPosDirWallCheck src/Dodge/Item/Weapon/TriggerType.hs 540;" f -withPositionOffset src/Dodge/Item/Weapon/TriggerType.hs 524;" f -withPositionWallCheck src/Dodge/Item/Weapon/TriggerType.hs 531;" f -withRandomDirI src/Dodge/Item/Weapon/TriggerType.hs 492;" f -withRandomItem src/Dodge/Item/Weapon/TriggerType.hs 519;" f -withRandomItemParams src/Dodge/Item/Weapon/TriggerType.hs 514;" f -withRandomItemUpdate src/Dodge/Item/Weapon/TriggerType.hs 507;" f -withRandomOffset src/Dodge/Item/Weapon/TriggerType.hs 550;" f -withRecoil src/Dodge/Item/Weapon/TriggerType.hs 297;" f -withSidePushAfterI src/Dodge/Item/Weapon/TriggerType.hs 326;" f -withSidePushI src/Dodge/Item/Weapon/TriggerType.hs 307;" f +withCrPos src/Dodge/Item/Weapon/TriggerType.hs 486;" f +withCrPosShift src/Dodge/Item/Weapon/TriggerType.hs 489;" f +withFlare src/Dodge/Item/Weapon/TriggerType.hs 453;" f +withItem src/Dodge/Item/Weapon/TriggerType.hs 426;" f +withItemUpdate src/Dodge/Item/Weapon/TriggerType.hs 435;" f +withItemUpdateFirst src/Dodge/Item/Weapon/TriggerType.hs 430;" f +withMuzFlare src/Dodge/Item/Weapon/TriggerType.hs 465;" f +withOldDir src/Dodge/Item/Weapon/TriggerType.hs 503;" f +withPosDirWallCheck src/Dodge/Item/Weapon/TriggerType.hs 543;" f +withPositionOffset src/Dodge/Item/Weapon/TriggerType.hs 527;" f +withPositionWallCheck src/Dodge/Item/Weapon/TriggerType.hs 534;" f +withRandomDirI src/Dodge/Item/Weapon/TriggerType.hs 495;" f +withRandomItem src/Dodge/Item/Weapon/TriggerType.hs 522;" f +withRandomItemParams src/Dodge/Item/Weapon/TriggerType.hs 517;" f +withRandomItemUpdate src/Dodge/Item/Weapon/TriggerType.hs 510;" f +withRandomOffset src/Dodge/Item/Weapon/TriggerType.hs 553;" f +withRecoil src/Dodge/Item/Weapon/TriggerType.hs 300;" f +withSidePushAfterI src/Dodge/Item/Weapon/TriggerType.hs 329;" f +withSidePushI src/Dodge/Item/Weapon/TriggerType.hs 310;" f withSmoke src/Dodge/Item/Weapon/TriggerType.hs 115;" f -withSoundContinue src/Dodge/Item/Weapon/TriggerType.hs 250;" f -withSoundForI src/Dodge/Item/Weapon/TriggerType.hs 263;" f -withSoundForVol src/Dodge/Item/Weapon/TriggerType.hs 276;" f -withSoundItemChoiceStart src/Dodge/Item/Weapon/TriggerType.hs 221;" f -withSoundStart src/Dodge/Item/Weapon/TriggerType.hs 237;" f -withTempLight src/Dodge/Item/Weapon/TriggerType.hs 437;" f +withSoundContinue src/Dodge/Item/Weapon/TriggerType.hs 253;" f +withSoundForI src/Dodge/Item/Weapon/TriggerType.hs 266;" f +withSoundForVol src/Dodge/Item/Weapon/TriggerType.hs 279;" f +withSoundItemChoiceStart src/Dodge/Item/Weapon/TriggerType.hs 224;" f +withSoundStart src/Dodge/Item/Weapon/TriggerType.hs 240;" f +withTempLight src/Dodge/Item/Weapon/TriggerType.hs 440;" f withThickSmokeI src/Dodge/Item/Weapon/TriggerType.hs 133;" f withThinSmokeI src/Dodge/Item/Weapon/TriggerType.hs 124;" f -withTorqueAfter src/Dodge/Item/Weapon/TriggerType.hs 607;" f -withWarmUp src/Dodge/Item/Weapon/TriggerType.hs 201;" f +withTorqueAfter src/Dodge/Item/Weapon/TriggerType.hs 610;" f +withWarmUp src/Dodge/Item/Weapon/TriggerType.hs 204;" f wlDustAt src/Dodge/Wall/Dust.hs 10;" f wlIXsNearCirc src/Dodge/Zoning/Wall.hs 32;" f wlIXsNearPoint src/Dodge/Zoning/Wall.hs 22;" f