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.Weapon.BulletGun.Rod --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] ) --,(sensorRoomRunPast Electrical, return SPARKGUN ) [(sensorRoomRunPast Flaming, return FLAMESTICK ) -- ,(sensorRoomRunPast Lasering, return LASGUN ) -- ,(const slowDoorRoomRunPast, return MINIGUN) -- ,(const longRoomRunPast, takeOne [SNIPERRIFLE,FLATSHIELD]) -- ,(const glassLessonRunPast, takeOne [LASGUN]) -- ,(const $ lasTunnelRunPast 400, return FLATSHIELD) ] itemRooms :: RandomGen g => [(CombineType, State g (SubCompTree Room))] itemRooms = [ (LAUNCHER , join $ takeOne [corridorBoss launcherCrit , rc $ map makeTypeCraft [TUBE,TUBE,HARDWARE] ] ) , (MINIGUN , join $ takeOne [roomMiniIntro, minigunFakeout] ) , (LASGUN , join $ takeOne [rc $ map makeTypeCraft [PRISM,TRANSFORMER,PIPE] ] ) , (SPARKGUN , join $ takeOne [rc $ map makeTypeCraft [TRANSFORMER,CAN,CAN] ] ) , (FLAMESTICK , join $ takeOne [rc $ map makeTypeCraft [LIGHTER,PUMP,CAN] ] ) , (FLATSHIELD , join $ takeOne [rc $ map makeTypeCraft [PLATE,PLATE] ,rc $ map makeTypeCraft [DRUM,DRUM,PLATE] ] ) , (SNIPERRIFLE , join $ takeOne [rc [sniperRifle] ] ) ] where rc its = do sc <- someCrits roomsContaining sc its someCrits :: RandomGen g => State g [Creature] someCrits = do nCrits <- state $ randomR (1,3) fmap (take nCrits) . shuffle $ [spreadGunCrit,pistolCrit,autoCrit,armourChaseCrit] ++ replicate 20 chaseCrit --addcrits :: RandomGen g => [Item] -> State g (SubCompTree Room) --addcrits its = do -- nCrits <- state $ randomR (1,3) -- crits <- takeN nCrits <=< shuffle $ fmap PutCrit $ [spreadGunCrit,pistolCrit,autoCrit,armourChaseCrit] -- return $ roomsContaining crits its corridorBoss :: RandomGen g => Creature -> State g (SubCompTree Room) corridorBoss cr = do endroom <- bossRoom cr return $ treeFromPost (replicate 5 $ PassDown corridor) (PassDown endroom)