{-# 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