Implement pulse rifle with explodable pulse balls

This commit is contained in:
2025-07-27 11:10:30 +01:00
parent 68a4bc7aab
commit f1fb0ee768
19 changed files with 190 additions and 108 deletions
+1 -1
View File
File diff suppressed because one or more lines are too long
+4 -4
View File
@@ -68,7 +68,7 @@ crUpdate f =
, checkDeath -- must be in this order 24/7/22
, updateWalkCycle
, f
, invRootItemEffs
, invItemEffs
]
-- I have changed the ordering of item/equipment effects, which may have
@@ -143,8 +143,8 @@ applyPastDamages cr w
& randGen .~ g
-- a loop going over all root inventory items
invRootItemEffs :: Creature -> World -> World
invRootItemEffs cr =
invItemEffs :: Creature -> World -> World
invItemEffs cr =
appEndo $
foldMap
(reduceLocDT (Endo . invItemLocUpdate cr) . LocDT TopDT)
@@ -235,7 +235,7 @@ tryDrawToCapacitor loc w = fromMaybe w $ do
itm <- loc ^? locDT . dtValue . _1
i <- itm ^? itLocation . ilInvID
x <- loc ^? locDT . dtValue . _1 . itConsumables . _Just
guard $ x < 250
guard $ x < 200
bat <- loc ^? locDT . dtLeft . ix 0 . dtValue . _1
j <- bat ^? itLocation . ilInvID
y <- bat ^? itConsumables . _Just
+1 -1
View File
@@ -18,7 +18,7 @@ data Muzzle = Muzzle
}
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data AmmoExtractPosition = MagBelow Int | CapacitorBelow Int | CapacitorSelf
data AmmoExtractPosition = MagBelow Int | CapacitorBelow | CapacitorSelf
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data FlareType
+13
View File
@@ -0,0 +1,13 @@
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Data.Object where
import Dodge.Data.Wall
import Dodge.Data.Creature
import Dodge.Data.PulseLaser
data Object
= OPulseBall PulseBall
| OCreature Creature
| OWall Wall
+12 -11
View File
@@ -9,17 +9,18 @@ import Data.Aeson
import Data.Aeson.TH
data ObjectType
= ObTerminal
| ObCreature
| ObMachine
| ObWall
| ObDoor
| ObButton
| ObForegroundShape
| ObLightSource
| ObProp
| ObTrigger
| ObItem
= OTTerminal
| OTCreature
| OTMachine
| OTWall
| OTDoor
| OTButton
| OTForegroundShape
| OTLightSource
| OTProp
| OTTrigger
| OTItem
| OTPulseBall
deriving (Eq, Show, Ord, Enum, Bounded, Read) --Generic, Flat)
deriveJSON defaultOptions ''ObjectType
+19 -22
View File
@@ -135,11 +135,9 @@ heldEffectMuzzles loc cr w =
setusetime . doHeldUseEffect t cr
. uncurry (applyCME loc cr)
$ bw
-- . foldl' (useLoadedAmmo loc cr) (bw)
-- $ loadedmuzzles
where
t = loc ^. locDT
((bw,_), loadedmuzzles) = mapAccumR (loadMuzzle loc cr) ((False,w),t) . locMuzzles $ loc
bw = foldl' (loadMuzzle loc cr) (False,w) (locMuzzles loc)
setusetime =
cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix itid . itTimeLastUsed
.~ w ^. cWorld . lWorld . lClock
@@ -153,10 +151,11 @@ locMuzzles loc
& ix 0 . mzInaccuracy .~ 0
& ix 0 . mzFlareType .~ TeslaGunFlare
& ix 0 . mzEffect .~ MuzzlePulseLaser
& ix 0 . mzAmmoPerShot .~ UseExactly 250
& ix 0 . mzAmmoPerShot .~ UseExactly 200
& ix 0 . mzAmmoSlot .~ CapacitorBelow
| PulseBallSF <- loc ^. locDT . dtValue . _2 = dbwMuzzles
& ix 0 . mzEffect .~ MuzzlePulseBall
& ix 0 . mzAmmoPerShot .~ UseExactly 250
& ix 0 . mzAmmoPerShot .~ UseExactly 200
& ix 0 . mzAmmoSlot .~ CapacitorSelf
& ix 0 . mzInaccuracy .~ 0
& ix 0 . mzFlareType .~ TeslaGunFlare
@@ -642,26 +641,24 @@ heldTorqueAmount = \case
BLINKER -> 0
BLINKERUNSAFE -> 0
loadMuzzle :: LocationDT OItem -> Creature -> ((Bool,World),DTree OItem)
-> Muzzle -> (((Bool,World),DTree OItem), Maybe (Muzzle, Int, DTree OItem))
loadMuzzle loc cr ((b,w),t@(DT _ l _)) mz = fromMaybe (((b,w),t), Nothing) $ do
loadMuzzle :: LocationDT OItem -> Creature -> (Bool,World) -> Muzzle -> (Bool,World)
loadMuzzle loc cr (b,w) mz = fromMaybe (b,w) $ do
let as = _mzAmmoSlot mz
amamount = _mzAmmoPerShot mz
(i, mag) <- case as of
MagBelow mi -> findWithIx (isAmmoIntLink mi . (^. dtValue . _2)) l
_ -> undefined
availableammo <- mag ^. dtValue . _1 . itConsumables
mag <- case as of
MagBelow mi -> find (isAmmoIntLink mi . (^. dtValue . _2)) (loc ^. locDT . dtLeft)
CapacitorSelf -> loc ^? locDT
CapacitorBelow -> find
((== PulseBallSF) . (^. dtValue . _2)) (loc ^. locDT . dtLeft)
mid <- mag ^? dtValue . _1 . itLocation . ilInvID
availableammo <- w ^? cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix mid . itConsumables . _Just
let usedammo = case amamount of
UseUpTo x -> min x availableammo
UseExactly x
| x <= availableammo -> x
| otherwise -> 0
guard $ usedammo > 0
let bw = useLoadedAmmo loc cr (b,w) (Just (mz,usedammo,mag))
return
( (bw,t & dtLeft . ix i . dtValue . _1 . itConsumables . _Just -~ usedammo)
, Just (mz, usedammo, mag)
)
return $ useLoadedAmmo loc cr (b,w) (Just (mz,usedammo,mag))
makeMuzzleFlare :: Muzzle -> LocationDT OItem -> Creature -> World -> World
makeMuzzleFlare mz loc cr = case mz ^. mzFlareType of
@@ -796,9 +793,9 @@ itemDetectorEffect itm mitid armitid cr w = fromMaybe w $ do
DETECTOR dt <- itm ^? itType
return $ aRadarPulse (itm ^. itID) mitid armitid (f dt) cr w
where
f ITEMDETECTOR = ObItem
f CREATUREDETECTOR = ObCreature
f WALLDETECTOR = ObWall
f ITEMDETECTOR = OTItem
f CREATUREDETECTOR = OTCreature
f WALLDETECTOR = OTWall
walkNozzle :: Muzzle -> Item -> Creature -> World -> World
walkNozzle mz itm cr w = fromMaybe w $ do
@@ -936,8 +933,8 @@ shootPulseBall p dir w =
& cWorld . lWorld . pulseBalls . at i ?~
PulseBall
{ _pbPos = p
, _pbVel = 5 * unitVectorAtAngle dir
, _pbTimer = 50
, _pbVel = 3.5 * unitVectorAtAngle dir
, _pbTimer = 100
, _pbID = i
}
& soundStart (PBSound i) p energyReleaseS Nothing
+1
View File
@@ -48,6 +48,7 @@ itemAboveAttachables (itm,sf) = case (itm ^. itType, sf) of
itemBelowAttachables :: CItem -> [ItemSF]
itemBelowAttachables (itm,sf) = case (itm ^. itType, sf) of
(HELD LASER, _) -> getAmmoLinks itm <> [PulseBallSF]
--(HELD LASER, _) -> [PulseBallSF]
(HELD TORCH, _) -> getAmmoLinks itm
(ATTACH CAPACITOR, _) -> [AmmoMagSF 0 ElectricalAmmo]
(ATTACH UNDERBARRELSLOT, _) -> [UnderBarrelPlatformSF]
+29
View File
@@ -1,7 +1,10 @@
module Dodge.Item.Weapon.LaserPath (
reflectLaserAlong,
reflectPulseLaserAlong,
) where
import Dodge.Data.Object
import Data.Maybe
import Data.Bifunctor
import Data.Tuple
import Dodge.Base.Wall
@@ -61,3 +64,29 @@ refract phasev x y wl p
| otherwise = asin $ phasev * sin angleInc'
reflectInternal = 1 < abs (phasev * sin angleInc')
reflectExternal = 1 < abs (sin angleInc / phasev)
reflectPulseLaserAlong :: Float -> Point2 -> Point2 -> World ->
(Maybe (Point2, Object), [Point2])
{-# INLINE reflectPulseLaserAlong #-}
reflectPulseLaserAlong phasev sp ep w = case listToMaybe . filter (isunshad . snd) $ crWlPbHit sp ep w of
Just (p, OWall wl)
| _wlReflect wl ->
second (p :) $
reflectPulseLaserAlong
phasev
(p +.+ unitVectorAtAngle (reflDirWall sp p wl))
(p +.+ dist p ep *.* unitVectorAtAngle (reflDirWall sp p wl))
w
| wlIsSeeThrough wl ->
second (p :) $
reflectPulseLaserAlong
phasev
(p +.+ normalizeV (refract phasev sp ep wl p))
(refract phasev sp ep wl p)
w
| otherwise -> (Just (p, OWall wl), [p])
Just (p, obj) -> (Just (p, obj), [p])
Nothing -> (Nothing, [ep])
where
isunshad (OWall wl) = _wlUnshadowed wl
isunshad _ = True
+2 -2
View File
@@ -25,7 +25,7 @@ destroyMcType mt mc = case mt of
mcKillTerm :: Machine -> World -> World
mcKillTerm mc w = fromMaybe w $ do
tmid <- mc ^? mcMounts . ix ObTerminal
tmid <- mc ^? mcMounts . ix OTTerminal
tm <- w ^? cWorld . lWorld . terminals . ix tmid
return $
w
@@ -33,5 +33,5 @@ mcKillTerm mc w = fromMaybe w $ do
mcKillBut :: Machine -> World -> World
mcKillBut mc w = fromMaybe w $ do
btid <- mc ^? mcMounts . ix ObButton
btid <- mc ^? mcMounts . ix OTButton
return $ w & cWorld . lWorld . buttons . at btid .~ Nothing
+1 -1
View File
@@ -31,7 +31,7 @@ terminalSPic lw = noPic . terminalShape lw
terminalShape :: LWorld -> Machine -> Shape
terminalShape lw mc = fromMaybe mempty $ do
tid <- mc ^? mcMounts . ix ObTerminal
tid <- mc ^? mcMounts . ix OTTerminal
term <- lw ^? terminals . ix tid
return $
colorSH
+3 -3
View File
@@ -34,7 +34,7 @@ mcTypeUpdate mc = case mc ^. mcType of
terminalScreenGlow :: Machine -> World -> World
terminalScreenGlow mc w = fromMaybe w $ do
tid <- mc ^? mcMounts . ix ObTerminal
tid <- mc ^? mcMounts . ix OTTerminal
term <- w ^? cWorld . lWorld . terminals . ix tid
V4 x y z _ <- termScreenColor term
return $
@@ -92,7 +92,7 @@ mcUseItem mc = fromMaybe id $ do
mcSensorTriggerUpdate :: Sensor -> Machine -> World -> World
mcSensorTriggerUpdate se mc = fromMaybe id $ do
trid <- mc ^? mcMounts . ix ObTrigger
trid <- mc ^? mcMounts . ix OTTrigger
bval <- mcTriggerVal se
return $ cWorld . lWorld . triggers . ix trid ||~ bval
@@ -172,7 +172,7 @@ senseDamage threshold dt mc =
x = sum . map _dmAmount $ filter f (_mcDamage mc)
ni = fromIntegral (mc ^?! mcType . _McSensor . sensAmount) / fromIntegral threshold
updatels = fromMaybe id $ do
lsid <- mc ^? mcMounts . ix ObLightSource
lsid <- mc ^? mcMounts . ix OTLightSource
return $ cWorld . lWorld . lightSources . ix lsid . lsParam . lsCol .~ V3 ni ni ni
sensorTypeDamages :: SensorType -> Damage -> Bool
+1 -1
View File
@@ -18,7 +18,7 @@ analyser proxreq pslight psmc = extTrigLitPos pslight $ \tp ->
Just $
plSpot .~ psmc $
putTerminal (dark magenta)
(themachine & mcMounts . at ObTrigger .~ _plMID tp)
(themachine & mcMounts . at OTTrigger .~ _plMID tp)
tparams -- (linksensortotrigger tp)
where
tparams = basicTerminal & tmScrollCommands .:~ sensorCommand
+2 -2
View File
@@ -27,8 +27,8 @@ damageSensor dt wdth mtrid ps = pContID ps (PutLS $ lsPosCol (V3 0 0 30) 0.1) $
(reverse $ square wdth)
( defaultMachine
& mcColor .~ yellow
& mcMounts . at ObTrigger .~ mtrid
& mcMounts . at ObLightSource ?~ lsid
& mcMounts . at OTTrigger .~ mtrid
& mcMounts . at OTLightSource ?~ lsid
& mcType
.~ McSensor
( DamageSensor
+2 -2
View File
@@ -22,7 +22,7 @@ putTerminal col mc tm =
pt0
( PutMachine
(reverse $ square 10)
( mc & mcMounts . at ObButton ?~ fromJust (_plMID btpl)
( mc & mcMounts . at OTButton ?~ fromJust (_plMID btpl)
& mcCloseSound ?~ fridgeHumS
)
defaultSensorWall
@@ -33,7 +33,7 @@ putTerminal col mc tm =
w
& cWorld . lWorld . terminals . ix tmid . tmButtonID .~ btid
& cWorld . lWorld . terminals . ix tmid . tmMachineID .~ mcid
& cWorld . lWorld . machines . ix mcid . mcMounts . at ObTerminal ?~ tmid
& cWorld . lWorld . machines . ix mcid . mcMounts . at OTTerminal ?~ tmid
& cWorld . lWorld . buttons . ix btid . btTermMID ?~ tmid
where
tmid = fromJust (_plMID tmpl)
+6 -6
View File
@@ -61,16 +61,16 @@ updateRadarSweep w pt
findBlips :: ObjectType -> Point2 -> Float -> World -> ([Point2], S.Set (Point2, Point2))
findBlips ob = case ob of
ObCreature -> crBlips
ObItem -> itemBlips
ObWall -> wallBlips
OTCreature -> crBlips
OTItem -> itemBlips
OTWall -> wallBlips
_ -> undefined
makeBlip :: ObjectType -> Point2 -> RadarBlip
makeBlip ob = case ob of
ObCreature -> blipAt 8 (withAlpha 0.2 green) 50
ObWall -> blipAt 2 red 50
ObItem -> blipAt 6 blue 50
OTCreature -> blipAt 8 (withAlpha 0.2 green) 50
OTWall -> blipAt 2 red 50
OTItem -> blipAt 6 blue 50
_ -> undefined
-- | Radar blip at a point.
+3 -3
View File
@@ -33,7 +33,7 @@ drawRadarSweep pt
rsObjectColor :: ObjectType -> Color
rsObjectColor ob = case ob of
ObWall -> red
ObCreature -> green
ObItem -> blue
OTWall -> red
OTCreature -> green
OTItem -> blue
_ -> yellow
+15 -5
View File
@@ -7,6 +7,8 @@ Description : Simulation update
-}
module Dodge.Update (updateUniverse) where
import Dodge.WorldEvent.Explosion
import Dodge.Data.Object
import Color
import Control.Applicative
import Control.Monad
@@ -633,14 +635,22 @@ updatePulseLaser pz = case pz ^. pzTimer of
5 -> (Endo f, [pz & pzTimer -~ 1])
_ -> (Endo g, [pz & pzTimer -~ 1])
where
f w =
damThingHitWith
(\p2 -> Lasering (pz ^. pzDamage) p2 (xp - sp))
thHit
f w = dodam thHit ps
w
& cWorld . lWorld . flares <>~ drawLaser cyan (sp : ps)
where
(thHit, ps) = reflectLaserAlong phasev sp xp w
(thHit, ps) = reflectPulseLaserAlong phasev sp xp w
dodam thit ps = case thit of
Just (p, OCreature cr) ->
cWorld . lWorld . creatures . ix (_crID cr) . crDamage
.:~ Lasering (pz ^. pzDamage) p (xp - sp)
Just (p, OWall wl) ->
cWorld . lWorld . wallDamages . at (_wlID wl) . non mempty
.:~ Lasering (pz ^. pzDamage) p (xp - sp)
Just (p, OPulseBall pb) ->
(cWorld . lWorld . pulseBalls . ix (_pbID pb) . pbTimer .~ 0)
. makeExplosionAt (_pbPos pb) 0
_ -> id
phasev = _pzPhaseV pz
sp = _pzPos pz
dir = _pzDir pz
+22
View File
@@ -11,8 +11,10 @@ module Dodge.WorldEvent.ThingsHit (
crsHitRadial,
wlsHitRadial,
crHit,
crWlPbHit,
) where
import Dodge.Data.Object
import Dodge.Creature.Radius
import Control.Monad
import Control.Lens
@@ -26,6 +28,7 @@ import Dodge.Zoning.Creature
import Dodge.Zoning.Wall
import Geometry
import qualified ListHelp as List
import qualified Data.IntMap.Strict as IM
{- List those objects that appear on a line. -}
thingsHit :: Point2 -> Point2 -> World -> [(Point2, Either Creature Wall)]
@@ -35,6 +38,16 @@ thingsHit sp ep w =
(map (second Left) (crsHit sp ep w))
(map (second Right) (wlsHit sp ep w))
crWlPbHit :: Point2 -> Point2 -> World -> [(Point2, Object)]
crWlPbHit sp ep w =
List.mergeOn
(dist sp . fst)
(map (fmap toobj) (thingsHit sp ep w))
(map (fmap OPulseBall) (pbsHit sp ep w))
where
toobj (Left cr) = OCreature cr
toobj (Right wl) = OWall wl
crsHit :: Point2 -> Point2 -> World -> [(Point2, Creature)]
crsHit sp ep w
| sp == ep = mempty
@@ -46,6 +59,15 @@ crsHit sp ep w
. crixsNearSeg sp ep
$ w
pbsHit :: Point2 -> Point2 -> World -> [(Point2, PulseBall)]
pbsHit sp ep w
| sp == ep = mempty
| otherwise =
sortOn (dist sp . fst)
. mapMaybe (\pb -> (,pb) <$> listToMaybe (intersectCircSeg (_pbPos pb) 8 sp ep))
. IM.elems
$ w ^. cWorld . lWorld . pulseBalls
thingHitFilt ::
(Creature -> Bool) ->
(Wall -> Bool) ->
+53 -44
View File
@@ -439,7 +439,7 @@ DRUMMAG src/Dodge/Data/Item/Combine.hs 108;" C
DS src/DoubleStack.hs 3;" t
DT src/Dodge/Data/DoubleTree.hs 31;" C
DTBottomNode src/Dodge/Data/DoubleTree.hs 21;" C
DTComb src/Dodge/Item/Grammar.hs 152;" t
DTComb src/Dodge/Item/Grammar.hs 153;" t
DTMidAboveNode src/Dodge/Data/DoubleTree.hs 19;" C
DTMidBelowNode src/Dodge/Data/DoubleTree.hs 20;" C
DTRootNode src/Dodge/Data/DoubleTree.hs 17;" C
@@ -1333,19 +1333,25 @@ NumShadowCasters6 src/Dodge/Data/Config.hs 21;" C
NumShadowCasters7 src/Dodge/Data/Config.hs 22;" C
NumShadowCasters8 src/Dodge/Data/Config.hs 23;" C
NumShadowCasters9 src/Dodge/Data/Config.hs 24;" C
OCreature src/Dodge/Data/Object.hs 10;" C
OItem src/Dodge/Data/ComposedItem.hs 47;" t
OPulseBall src/Dodge/Data/Object.hs 9;" C
ORANGE src/Color/Data.hs 26;" C
ObButton src/Dodge/Data/ObjectType.hs 17;" C
ObCreature src/Dodge/Data/ObjectType.hs 13;" C
ObDoor src/Dodge/Data/ObjectType.hs 16;" C
ObForegroundShape src/Dodge/Data/ObjectType.hs 18;" C
ObItem src/Dodge/Data/ObjectType.hs 22;" C
ObLightSource src/Dodge/Data/ObjectType.hs 19;" C
ObMachine src/Dodge/Data/ObjectType.hs 14;" C
ObProp src/Dodge/Data/ObjectType.hs 20;" C
ObTerminal src/Dodge/Data/ObjectType.hs 12;" C
ObTrigger src/Dodge/Data/ObjectType.hs 21;" C
ObWall src/Dodge/Data/ObjectType.hs 15;" C
OTButton src/Dodge/Data/ObjectType.hs 17;" C
OTCreature src/Dodge/Data/ObjectType.hs 13;" C
OTDoor src/Dodge/Data/ObjectType.hs 16;" C
OTForegroundShape src/Dodge/Data/ObjectType.hs 18;" C
OTItem src/Dodge/Data/ObjectType.hs 22;" C
OTLightSource src/Dodge/Data/ObjectType.hs 19;" C
OTMachine src/Dodge/Data/ObjectType.hs 14;" C
OTProp src/Dodge/Data/ObjectType.hs 20;" C
OTPulseBall src/Dodge/Data/ObjectType.hs 23;" C
OTTerminal src/Dodge/Data/ObjectType.hs 12;" C
OTTrigger src/Dodge/Data/ObjectType.hs 21;" C
OTWall src/Dodge/Data/ObjectType.hs 15;" C
OWall src/Dodge/Data/Object.hs 11;" C
Object src/Dodge/Data/Object.hs 8;" t
Object src/Dodge/Data/Object.hs 4;" m
ObjectType src/Dodge/Data/ObjectType.hs 11;" t
ObjectType src/Dodge/Data/ObjectType.hs 6;" m
OnBack src/Dodge/Data/Equipment/Misc.hs 24;" C
@@ -3473,7 +3479,7 @@ barrel src/Dodge/Creature/Inanimate.hs 17;" f
barrelShape src/Dodge/Render/ShapePicture.hs 55;" f
baseAMRShape src/Dodge/Item/Draw/SPic.hs 418;" f
baseBlockPane src/Dodge/Placement/Instance/Wall.hs 86;" f
baseCI src/Dodge/Item/Grammar.hs 149;" f
baseCI src/Dodge/Item/Grammar.hs 150;" f
baseCaneShape src/Dodge/Item/Draw/SPic.hs 335;" f
baseDebris src/Dodge/Block/Debris.hs 122;" f
baseFloorTileSize src/Tile.hs 45;" f
@@ -3752,7 +3758,7 @@ crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 38;" f
crDisplayVigilance src/Dodge/Creature/Picture/Awareness.hs 52;" f
crHasTarget src/Dodge/Creature/Test.hs 64;" f
crHasTargetLOS src/Dodge/Creature/Test.hs 67;" f
crHit src/Dodge/WorldEvent/ThingsHit.hs 64;" f
crHit src/Dodge/WorldEvent/ThingsHit.hs 83;" f
crIXsNearCirc src/Dodge/Zoning/Creature.hs 32;" f
crIXsNearPoint src/Dodge/Zoning/Creature.hs 14;" f
crInAimStance src/Dodge/Creature/Test.hs 93;" f
@@ -3781,6 +3787,7 @@ crUpdateInvidLocations src/Dodge/Inventory/Location.hs 61;" f
crUpdateItemLocations src/Dodge/Inventory/Location.hs 42;" f
crVocalizationSound src/Dodge/Creature/Vocalization.hs 13;" f
crWarningSounds src/Dodge/Creature/Vocalization.hs 23;" f
crWlPbHit src/Dodge/WorldEvent/ThingsHit.hs 40;" f
crZoneSize src/Dodge/Zoning/Creature.hs 41;" f
craftInfo src/Dodge/Item/Info.hs 168;" f
craftItemSPic src/Dodge/Item/Draw/SPic.hs 55;" f
@@ -3812,8 +3819,8 @@ crixsNearSeg src/Dodge/Zoning/Creature.hs 29;" f
crossPic src/Dodge/Render/Label.hs 27;" f
crossProd src/Geometry/Vector3D.hs 41;" f
crossV src/Geometry/Vector.hs 178;" f
crsHit src/Dodge/WorldEvent/ThingsHit.hs 38;" f
crsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 99;" f
crsHit src/Dodge/WorldEvent/ThingsHit.hs 48;" f
crsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 118;" f
crsItmsUnused src/Dodge/Room/Containing.hs 45;" f
crsNearCirc src/Dodge/Zoning/Creature.hs 35;" f
crsNearPoint src/Dodge/Zoning/Creature.hs 17;" f
@@ -4337,8 +4344,8 @@ extTrigLitPos src/Dodge/Placement/Instance/Button.hs 84;" f
extendAway src/Dodge/Placement/Instance/LightSource.hs 200;" f
extendConeToScreenEdge src/Dodge/Debug/Picture.hs 82;" f
extraPics src/Dodge/Render/ShapePicture.hs 82;" f
extraWeaponLinks src/Dodge/Item/Grammar.hs 85;" f
extraWeaponLinksBelow src/Dodge/Item/Grammar.hs 94;" f
extraWeaponLinks src/Dodge/Item/Grammar.hs 86;" f
extraWeaponLinksBelow src/Dodge/Item/Grammar.hs 95;" f
extractRoomPos src/Dodge/RoomPos.hs 6;" f
faceEdges src/Polyhedra.hs 65;" f
facesToVF src/Polyhedra/Geodesic.hs 69;" f
@@ -4457,11 +4464,11 @@ geometryTests test/Spec.hs 17;" f
geometryUnitTests test/Spec.hs 22;" f
geqConstr src/SameConstr.hs 21;" f
getAimZoom src/Dodge/Update/Camera.hs 135;" f
getAmmoLinks src/Dodge/Item/Grammar.hs 99;" f
getAmmoLinks src/Dodge/Item/Grammar.hs 100;" f
getArguments src/Dodge/Update/Scroll.hs 178;" f
getArguments' src/Dodge/Update/Scroll.hs 166;" f
getAttachedSFLink src/Dodge/HeldUse.hs 779;" f
getAutoSpringLinks src/Dodge/Item/Grammar.hs 80;" f
getAutoSpringLinks src/Dodge/Item/Grammar.hs 81;" f
getAvailableListLines src/Dodge/SelectionList.hs 10;" f
getBulHitDams src/Dodge/Bullet.hs 171;" f
getBulletType src/Dodge/HeldUse.hs 956;" f
@@ -4676,18 +4683,18 @@ interweave src/Justify.hs 17;" f
introScan src/Dodge/Item/Scope.hs 57;" f
introScanValue src/Dodge/Inventory/SelectionList.hs 80;" f
intsToPos src/Dodge/Room/Modify/Girder.hs 160;" f
invAdj src/Dodge/Item/Grammar.hs 218;" f
invAdj src/Dodge/Item/Grammar.hs 219;" f
invCursorParams src/Dodge/ListDisplayParams.hs 36;" f
invDP src/Dodge/ListDisplayParams.hs 30;" f
invDT src/Dodge/Item/Grammar.hs 195;" f
invDT' src/Dodge/Item/Grammar.hs 200;" f
invDT src/Dodge/Item/Grammar.hs 196;" f
invDT' src/Dodge/Item/Grammar.hs 201;" f
invDimColor src/Dodge/DisplayInventory.hs 192;" f
invHead src/Dodge/Render/HUD.hs 404;" f
invIMDT src/Dodge/Item/Grammar.hs 228;" f
invIndents src/Dodge/Item/Grammar.hs 235;" f
invIMDT src/Dodge/Item/Grammar.hs 229;" f
invIndents src/Dodge/Item/Grammar.hs 236;" f
invItemEffs src/Dodge/Creature/State.hs 146;" f
invItemLocUpdate src/Dodge/Creature/State.hs 153;" f
invRootItemEffs src/Dodge/Creature/State.hs 146;" f
invRootMap src/Dodge/Item/Grammar.hs 207;" f
invRootMap src/Dodge/Item/Grammar.hs 208;" f
invSelectionItem src/Dodge/Inventory/SelectionList.hs 32;" f
invSetSelection src/Dodge/Inventory.hs 185;" f
invSetSelectionPos src/Dodge/Inventory.hs 193;" f
@@ -4768,7 +4775,7 @@ itemScrollDisplay src/Dodge/Inventory/SelectionList.hs 121;" f
itemScrollValue src/Dodge/Inventory/SelectionList.hs 148;" f
itemSidePush src/Dodge/HeldUse.hs 396;" f
itemString src/Dodge/Item/Display.hs 56;" f
itemToFunction src/Dodge/Item/Grammar.hs 102;" f
itemToFunction src/Dodge/Item/Grammar.hs 103;" f
itemTreeSPic src/Dodge/Item/Draw/SPic.hs 24;" f
itemTriggerType src/Dodge/BaseTriggerType.hs 16;" f
itemWeight src/Dodge/Creature/Statistics.hs 66;" f
@@ -4780,7 +4787,7 @@ itmSpaceInfo src/Dodge/Item/Info.hs 25;" f
itmUsageInfo src/Dodge/Item/Info.hs 230;" f
jShape src/Dodge/Placement/Instance/LightSource.hs 85;" f
jaggedShape src/Dodge/Block/Debris.hs 191;" f
joinItemsInList src/Dodge/Item/Grammar.hs 185;" f
joinItemsInList src/Dodge/Item/Grammar.hs 186;" f
joystick src/Dodge/Item/Scope.hs 149;" f
jps0' src/Dodge/LevelGen/PlacementHelper.hs 60;" f
jps0PushPS src/Dodge/LevelGen/PlacementHelper.hs 63;" f
@@ -4831,10 +4838,10 @@ ldtToIM src/Dodge/DoubleTree.hs 218;" f
ldtToIndentList src/Dodge/DoubleTree.hs 221;" f
ldtToLoc src/Dodge/DoubleTree.hs 267;" f
left src/DoubleStack.hs 16;" f
leftChildList src/Dodge/Item/Grammar.hs 164;" f
leftIsParentCombine src/Dodge/Item/Grammar.hs 154;" f
leftChildList src/Dodge/Item/Grammar.hs 165;" f
leftIsParentCombine src/Dodge/Item/Grammar.hs 155;" f
leftPad src/Padding.hs 15;" f
leftRightCombine src/Dodge/Item/Grammar.hs 176;" f
leftRightCombine src/Dodge/Item/Grammar.hs 177;" f
legsSPic src/Dodge/Item/Draw/SPic.hs 480;" f
liShape src/Dodge/Placement/Instance/LightSource.hs 98;" f
light src/Color.hs 104;" f
@@ -4886,7 +4893,7 @@ locGoLeft src/Dodge/DoubleTree.hs 318;" f
locGoRight src/Dodge/DoubleTree.hs 323;" f
locLDTToLocDT src/Dodge/DoubleTree.hs 19;" f
locLeftmost src/Dodge/DoubleTree.hs 305;" f
locMuzzles src/Dodge/HeldUse.hs 147;" f
locMuzzles src/Dodge/HeldUse.hs 146;" f
locOrient src/Dodge/Item/HeldOffset.hs 56;" f
locRightmost src/Dodge/DoubleTree.hs 308;" f
locToTop src/Dodge/DoubleTree.hs 300;" f
@@ -5231,6 +5238,7 @@ pauseMenuOptions src/Dodge/Menu.hs 61;" f
pauseSound src/Dodge/SoundLogic.hs 42;" f
pauseTime src/Dodge/Update.hs 190;" f
pbFlicker src/Dodge/Update.hs 481;" f
pbsHit src/Dodge/WorldEvent/ThingsHit.hs 59;" f
peZoneSize src/Dodge/Zoning/Pathing.hs 46;" f
pedestalRoom src/Dodge/Room/Containing.hs 50;" f
penThing src/Dodge/Bullet.hs 209;" f
@@ -5525,8 +5533,9 @@ reflVelWallDamp src/Dodge/Base/Wall.hs 20;" f
reflectAngle src/Geometry.hs 141;" f
reflectIn src/Geometry.hs 136;" f
reflectInParam src/Geometry.hs 229;" f
reflectLaserAlong src/Dodge/Item/Weapon/LaserPath.hs 13;" f
refract src/Dodge/Item/Weapon/LaserPath.hs 40;" f
reflectLaserAlong src/Dodge/Item/Weapon/LaserPath.hs 14;" f
reflectPulseLaserAlong src/Dodge/Item/Weapon/LaserPath.hs 66;" f
refract src/Dodge/Item/Weapon/LaserPath.hs 41;" f
refreshOptionsSelectionList src/Dodge/Menu/Option.hs 38;" f
regexCombs src/Dodge/DisplayInventory.hs 71;" f
regexList src/Dodge/DisplayInventory.hs 314;" f
@@ -5582,8 +5591,8 @@ rezText' src/Dodge/Story.hs 17;" f
rhombus src/Polyhedra.hs 72;" f
rifle src/Dodge/Item/Held/Cane.hs 19;" f
right src/DoubleStack.hs 16;" f
rightChildList src/Dodge/Item/Grammar.hs 170;" f
rightIsParentCombine src/Dodge/Item/Grammar.hs 159;" f
rightChildList src/Dodge/Item/Grammar.hs 171;" f
rightIsParentCombine src/Dodge/Item/Grammar.hs 160;" f
rightPad src/Padding.hs 19;" f
rightPadNoSquash src/Padding.hs 23;" f
rlPosDir src/Dodge/RoomLink.hs 94;" f
@@ -6069,10 +6078,10 @@ thickCircle src/Picture/Base.hs 272;" f
thickLine src/Picture/Base.hs 244;" f
thickLineCol src/Picture/Base.hs 255;" f
thinHighBar src/Dodge/Room/Foreground.hs 77;" f
thingHit src/Dodge/WorldEvent/ThingsHit.hs 61;" f
thingHitFilt src/Dodge/WorldEvent/ThingsHit.hs 49;" f
thingsHit src/Dodge/WorldEvent/ThingsHit.hs 31;" f
thingsHitExceptCr src/Dodge/WorldEvent/ThingsHit.hs 70;" f
thingHit src/Dodge/WorldEvent/ThingsHit.hs 80;" f
thingHitFilt src/Dodge/WorldEvent/ThingsHit.hs 68;" f
thingsHit src/Dodge/WorldEvent/ThingsHit.hs 33;" f
thingsHitExceptCr src/Dodge/WorldEvent/ThingsHit.hs 89;" f
threeLineDecoration src/Dodge/Placement/TopDecoration.hs 61;" f
throwItem src/Dodge/Creature/Action.hs 205;" f
tileTexCoords src/Tile.hs 11;" f
@@ -6175,7 +6184,7 @@ treeMaxDepthFromTrunk src/Dodge/Layout/Generate.hs 21;" f
treePath src/Dodge/Tree/GenerateStructure.hs 13;" f
treePaths src/TreeHelp.hs 138;" f
treePost src/TreeHelp.hs 45;" f
treeToPotentialFunction src/Dodge/Item/Grammar.hs 136;" f
treeToPotentialFunction src/Dodge/Item/Grammar.hs 137;" f
triLootRoom src/Dodge/Room/Treasure.hs 22;" f
triggerDoorRoom src/Dodge/Room/Door.hs 30;" f
triggerSwitch src/Dodge/Placement/Instance/Button.hs 47;" f
@@ -6485,8 +6494,8 @@ wlOpaqueDraw src/Dodge/Render/Walls.hs 45;" f
wlSeeThroughDraw src/Dodge/Render/Walls.hs 48;" f
wlZoneSize src/Dodge/Zoning/Wall.hs 52;" f
wlsFromIXs src/Dodge/Zoning/Wall.hs 35;" f
wlsHit src/Dodge/WorldEvent/ThingsHit.hs 84;" f
wlsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 92;" f
wlsHit src/Dodge/WorldEvent/ThingsHit.hs 103;" f
wlsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 111;" f
wlsNearCirc src/Dodge/Zoning/Wall.hs 49;" f
wlsNearPoint src/Dodge/Zoning/Wall.hs 39;" f
wlsNearRect src/Dodge/Zoning/Wall.hs 46;" f