module Dodge.LockAndKey where import Dodge.Data import Dodge.Tree import Dodge.LevelGen.Data import Dodge.Room import Dodge.RandomHelp import Dodge.Creature import Dodge.Item.Craftable --import Dodge.Item.Equipment import System.Random import Control.Monad.State lockRoomKeyItems :: RandomGen g => [ (Int -> State g (SubCompTree Room) , State g CombineType ) ] lockRoomKeyItems = [(lasCenSensEdge, takeOne [LAUNCHER,LASGUN,SPARKGUN,FLATSHIELD] ) ,(const slowDoorRoomRunPast, return MINIGUN) -- ,(longRoom or something, [sniper]) ] itemRooms :: RandomGen g => [(CombineType, State g (SubCompTree Room))] itemRooms = [ (LAUNCHER , join $ takeOne [corridorBoss launcherCrit ,roomsContaining $ map makeTypeCraft [TUBE,TUBE,HARDWARE] ] ) , (MINIGUN , join $ takeOne [roomMiniIntro, minigunFakeout] ) , (LASGUN , join $ takeOne [roomsContaining $ map makeTypeCraft [PRISM,PIPE,PIPE,HARDWARE] ] ) , (SPARKGUN , join $ takeOne [roomsContaining $ map makeTypeCraft [TRANSFORMER,CAN,CAN] ] ) , (FLATSHIELD , join $ takeOne [roomsContaining $ map makeTypeCraft [PLATE,PLATE] ,roomsContaining $ map makeTypeCraft [DRUM,DRUM,PLATE] ] ) ] roomsContaining :: RandomGen g => [Item] -> State g (SubCompTree Room) roomsContaining its = do endroom <- randomFourCornerRoom its return $ treeFromPost [] $ PassDown endroom corridorBoss :: RandomGen g => Creature -> State g (SubCompTree Room) corridorBoss cr = do endroom <- bossRoom cr return $ treeFromPost (replicate 5 $ PassDown corridor) (PassDown endroom)