105 lines
3.9 KiB
Haskell
105 lines
3.9 KiB
Haskell
{-# LANGUAGE TupleSections #-}
|
|
--{-# OPTIONS_GHC -Wno-unused-imports #-}
|
|
{- | The tree of rooms that make up a level. -}
|
|
module Dodge.Floor
|
|
( initialRoomTree
|
|
) where
|
|
--import Geometry.Data
|
|
--import Dodge.Data
|
|
import Dodge.LockAndKey
|
|
--import Dodge.Creature.State.Data
|
|
import Dodge.Room
|
|
--import Dodge.Data.DamageType
|
|
--import Dodge.Placement.Instance.Button
|
|
import Dodge.Tree
|
|
import Dodge.PlacementSpot
|
|
import Dodge.Annotation
|
|
--import Dodge.Placement.Instance.Sensor
|
|
import Dodge.Creature
|
|
import Dodge.Room.Warning
|
|
--import Dodge.LevelGen.Data
|
|
import Dodge.Data
|
|
--import Dodge.LevelGen.Switch
|
|
--import Dodge.Item.Weapon.Launcher
|
|
--import Dodge.PlacementSpot
|
|
--import Dodge.RoomPos
|
|
--import Dodge.Room.RunPast
|
|
--import MonadHelp
|
|
import LensHelp
|
|
import RandomHelp
|
|
--import Color
|
|
--import Dodge.Wire
|
|
|
|
--import Data.Sequence hiding (zipWith)
|
|
--import Data.Maybe
|
|
--import qualified Data.IntMap.Strict as IM
|
|
|
|
initialAnoTree :: Tree [Annotation]
|
|
initialAnoTree = padSucWithDoors $ treeFromPost
|
|
[[AnoApplyInt 0 startRoom]
|
|
, [PassthroughLockKeyLists 2 keyCardRunPastRand itemRooms]
|
|
, [SpecificRoom $ warningRooms 7]
|
|
, [SpecificRoom $ return (return . useAll $ roomRectAutoLinks 400 400
|
|
& rmPmnts .++~ [spNoID anyUnusedSpot (PutCrit invisibleChaseCrit)
|
|
, spNoID anyUnusedSpot (PutCrit armourChaseCrit)
|
|
]
|
|
, TreeSubLabelling "chaseCrit+armourChaseCrit rectRoom" Nothing)
|
|
]
|
|
-- , [AnoApplyInt 100 healthTest]
|
|
, [PassthroughLockKeyLists 23
|
|
[(sensorRoomRunPast ELECTRICAL, takeOne [STATICMODULE,SPARKGUN] )] itemRooms]
|
|
, [SpecificRoom ((return . useAll <$> tanksRoom [] [])
|
|
<&> (, TreeSubLabelling "empty tanksRoom" Nothing))]
|
|
, [PassthroughLockKeyLists 222 lockRoomKeyItems itemRooms]
|
|
, [SpecificRoom randomChallenges]
|
|
, [AnoApplyInt 1 lasSensorTurretTest]
|
|
-- ,[SpecificRoom $ fmap pure roomCCrits]
|
|
-- ,[AirlockAno]
|
|
-- ,[Corridor]
|
|
------ ,[SpecificRoom roomCCrits]
|
|
------ ,[Corridor]
|
|
------ ,[SpecificRoom . pure . pure . useAll $ roomGlassOctogon 400
|
|
------ & rmPS %~ ([sPS (V2 0 50) 0 $ PutCrit armourChaseCrit
|
|
------ ,sPS (V2 50 25) 0 $ PutCrit armourChaseCrit
|
|
------ ,sPS (V2 50 0) 0 $ PutCrit armourChaseCrit
|
|
------ ]++)
|
|
------ ]
|
|
------ --,[SpecificRoom . pure . pure . useAll $ roomGlassOctogon 400
|
|
------ -- & rmPS %~ ([swarmPS 0 (x,y) 0 swarmCrit | x <- [-20,-19.5.. 20] , y <- [200,202] ]++)
|
|
------ -- ]
|
|
------ ,[SpecificRoom . pure . pure . useAll $ roomGlassOctogon 400
|
|
------ & rmPS %~ ([sPS (V2 0 50) 0 $ PutCrit pistolCrit ]++)
|
|
------ ]
|
|
------ ,[Corridor]
|
|
---- --,[SpecificRoom $ pure . useAll <$> twinSlowDoorChasers]
|
|
----- ,[SpecificRoom $ pure $ (pure . useAll) (twinSlowDoorRoom 80 200 40)]
|
|
----- ,[DoorAno]
|
|
----- ,[SpecificRoom $ pure . useAll <$> centerVaultExplosiveExit]
|
|
----- ,[SpecificRoom blockedCorridor]
|
|
----- ,[OrAno [[DoorAno]
|
|
----- ,[Corridor]
|
|
----- ,[DoorNumAno 0,AirlockAno]]
|
|
----- ]
|
|
----- ,[FirstWeapon]
|
|
----- ,[CorridorDebug]
|
|
----- ,[SpecificRoom $ fmap (pure . useAll) randomFourCornerRoom]
|
|
-- ,[OrAno
|
|
-- [[SpecificRoom $ branchRectWith $ fmap (fmap ) armouredChasers]
|
|
-- ,[BossAno $ addArmour launcherCrit & crHP +~ 800
|
|
-- & crState . crDropsOnDeath .~ DropSpecific [0] ]
|
|
-- ]
|
|
-- ]
|
|
---- ,[SpecificRoom $ fmap (pure . useAll) armouredCorridor]
|
|
-- ,[Corridor]
|
|
-- ,[TreasureAno [addArmour autoCrit,addArmour autoCrit] [launcher]]
|
|
-- ,[Corridor]
|
|
,[SpecificRoom $ (pure . useAll <$> randomFourCornerRoom [])
|
|
<&>(,TreeSubLabelling "randomFourCornerRoom" Nothing )]
|
|
]
|
|
[SpecificRoom $ fmap (pure . useAll) (telRoomLev 1)
|
|
<&> (,TreeSubLabelling "telRoomLev" Nothing)]
|
|
|
|
{- | A test level tree. -}
|
|
initialRoomTree :: State StdGen (Tree (Room -> Maybe (String,Room), Tree Room))
|
|
initialRoomTree = mapM anoToRoomTree initialAnoTree
|