55 lines
1.7 KiB
Haskell
55 lines
1.7 KiB
Haskell
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)
|
|
|