46 lines
1.4 KiB
Haskell
46 lines
1.4 KiB
Haskell
--{-# LANGUAGE BangPatterns #-}
|
|
|
|
{- |
|
|
Extra weapon effects, supplementing explicit use effects.
|
|
-}
|
|
module Dodge.Item.Weapon.ExtraEffect (
|
|
autoSonarEffect,
|
|
autoEffect,
|
|
autoRadarEffect,
|
|
) where
|
|
|
|
import Dodge.Data.World
|
|
import Dodge.RadarSweep
|
|
import Dodge.SoundLogic
|
|
import LensHelp
|
|
import Sound.Data
|
|
|
|
autoEffect :: (Item -> Creature -> World -> World) -> Int -> SoundID -> Item -> Creature -> World -> World
|
|
autoEffect eff t sid itm cr w
|
|
| _eparamInt (_eeParams (_uequipEffect $ _itUse itm)) < 1 =
|
|
eff itm cr w
|
|
& cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix (_ilInvID $ _itLocation itm)
|
|
. itUse
|
|
. uequipEffect
|
|
. eeParams
|
|
. eparamInt
|
|
.~ t
|
|
& soundStart OnceSound (_crPos cr) sid Nothing
|
|
| otherwise =
|
|
w
|
|
& cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix (_ilInvID $ _itLocation itm)
|
|
. itUse
|
|
. uequipEffect
|
|
. eeParams
|
|
. eparamInt
|
|
-~ 1
|
|
|
|
-- | Automatically send out radar pulses that detect walls.
|
|
autoRadarEffect :: Item -> Creature -> World -> World
|
|
autoRadarEffect = autoEffect (const (aRadarPulse ObWall)) 100 click1S
|
|
|
|
-- | Automatically send out sonar pulses that detect creatures.
|
|
autoSonarEffect :: Item -> Creature -> World -> World
|
|
autoSonarEffect = autoEffect (const (aRadarPulse ObCreature)) 50 click1S
|
|
|