Add generic item placement rooms
This commit is contained in:
@@ -68,9 +68,14 @@ itemCombinations =
|
|||||||
|
|
||||||
, p [o PRISM,p 2 PIPE,o HARDWARE] lasGun
|
, p [o PRISM,p 2 PIPE,o HARDWARE] lasGun
|
||||||
|
|
||||||
|
, p [o TRANSFORMER,p 2 CAN] sparkGun
|
||||||
|
, p [o SPARKGUN,p 2 PIPE] teslaGun
|
||||||
|
|
||||||
, po [MAGNET,TIN] magShield
|
, po [MAGNET,TIN] magShield
|
||||||
|
|
||||||
, p [p 4 CAN] plateCraft
|
, p [p 4 CAN] plateCraft
|
||||||
|
, p [p 3 TIN] plateCraft
|
||||||
|
, p [p 2 DRUM] plateCraft
|
||||||
|
|
||||||
, p [p 2 PLATE] flatShield
|
, p [p 2 PLATE] flatShield
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ data CombineType
|
|||||||
| SPREADGUN
|
| SPREADGUN
|
||||||
| MULTGUN
|
| MULTGUN
|
||||||
| LONGGUN
|
| LONGGUN
|
||||||
|
| SPARKGUN
|
||||||
| TESLAGUN
|
| TESLAGUN
|
||||||
| LASGUN
|
| LASGUN
|
||||||
| SONICGUN
|
| SONICGUN
|
||||||
@@ -84,6 +85,7 @@ data CombineType
|
|||||||
| SHARDGLASS
|
| SHARDGLASS
|
||||||
| PUMP
|
| PUMP
|
||||||
| MOTOR
|
| MOTOR
|
||||||
|
| TRANSFORMER
|
||||||
| PRISM
|
| PRISM
|
||||||
| LIGHTER
|
| LIGHTER
|
||||||
| MAGNET
|
| MAGNET
|
||||||
@@ -101,7 +103,7 @@ data CombineType
|
|||||||
| SOUNDSENSOR
|
| SOUNDSENSOR
|
||||||
| HEATSENSOR
|
| HEATSENSOR
|
||||||
| CREATURESENSOR
|
| CREATURESENSOR
|
||||||
| COPPERWIRE
|
| WIRE
|
||||||
| BATTERY
|
| BATTERY
|
||||||
| FUELCELL
|
| FUELCELL
|
||||||
| PORTABLEFUSION
|
| PORTABLEFUSION
|
||||||
|
|||||||
+1
-1
@@ -89,7 +89,7 @@ initialAnoTree = padSucWithCorridors $ treeFromTrunk
|
|||||||
-- ,[Corridor]
|
-- ,[Corridor]
|
||||||
-- ,[TreasureAno [addArmour autoCrit,addArmour autoCrit] [launcher]]
|
-- ,[TreasureAno [addArmour autoCrit,addArmour autoCrit] [launcher]]
|
||||||
]
|
]
|
||||||
$ treeFromPost [[Corridor,SpecificRoom $ fmap (pure . UseAll) randomFourCornerRoom]]
|
$ treeFromPost [[Corridor,SpecificRoom $ pure . UseAll <$> randomFourCornerRoom []]]
|
||||||
[EndRoom]
|
[EndRoom]
|
||||||
|
|
||||||
{- | A test level tree. -}
|
{- | A test level tree. -}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
module Dodge.Item.Weapon.BatteryGuns
|
module Dodge.Item.Weapon.BatteryGuns
|
||||||
( lasGun
|
( lasGun
|
||||||
|
, sparkGun
|
||||||
, teslaGun
|
, teslaGun
|
||||||
, tractorGun
|
, tractorGun
|
||||||
, lasRayAt
|
, lasRayAt
|
||||||
@@ -31,6 +32,10 @@ import LensHelp
|
|||||||
import System.Random
|
import System.Random
|
||||||
--import Data.Tuple
|
--import Data.Tuple
|
||||||
import qualified Data.IntMap.Strict as IM
|
import qualified Data.IntMap.Strict as IM
|
||||||
|
sparkGun :: Item
|
||||||
|
sparkGun = teslaGun
|
||||||
|
& itName .~ "SPARKGUN"
|
||||||
|
& itType .~ SPARKGUN
|
||||||
teslaGun :: Item
|
teslaGun :: Item
|
||||||
teslaGun = defaultGun
|
teslaGun = defaultGun
|
||||||
{ _itName = "TESLA"
|
{ _itName = "TESLA"
|
||||||
|
|||||||
@@ -80,10 +80,7 @@ bangCane = defaultGun
|
|||||||
, _dimSPic = \it -> noPic $ baseCaneShape
|
, _dimSPic = \it -> noPic $ baseCaneShape
|
||||||
<> makeSingleClipAt (V3 5 0 3) it
|
<> makeSingleClipAt (V3 5 0 3) it
|
||||||
}
|
}
|
||||||
} & itUse . useAim . aimSpeed .~ 0.4
|
} & itUse . useAim . aimStance .~ OneHand
|
||||||
& itUse . useAim . aimRange .~ 1
|
|
||||||
& itUse . useAim . aimStance .~ OneHand
|
|
||||||
& itUse . useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5}
|
|
||||||
bangCaneX :: Int -> Item
|
bangCaneX :: Int -> Item
|
||||||
bangCaneX i = bangCane
|
bangCaneX i = bangCane
|
||||||
{ _itName = "BANGCANEx"++show i
|
{ _itName = "BANGCANEx"++show i
|
||||||
@@ -133,7 +130,6 @@ caneClipX i it = case it ^? itConsumption . ammoLoaded of
|
|||||||
. (\k -> fromIntegral k * 5 - ((fromIntegral i - 1) * 2.5)))
|
. (\k -> fromIntegral k * 5 - ((fromIntegral i - 1) * 2.5)))
|
||||||
[0..la-1]
|
[0..la-1]
|
||||||
_ -> mempty
|
_ -> mempty
|
||||||
|
|
||||||
rifle :: Item
|
rifle :: Item
|
||||||
rifle = bangCane
|
rifle = bangCane
|
||||||
{ _itDimension = ItemDimension
|
{ _itDimension = ItemDimension
|
||||||
@@ -151,7 +147,9 @@ rifle = bangCane
|
|||||||
& itName .~ "RIFLE"
|
& itName .~ "RIFLE"
|
||||||
& itType .~ RIFLE
|
& itType .~ RIFLE
|
||||||
& itConsumption . ammoBaseMax .~ 1
|
& itConsumption . ammoBaseMax .~ 1
|
||||||
|
& itUse . useAim . aimSpeed .~ 0.4
|
||||||
|
& itUse . useAim . aimRange .~ 1
|
||||||
|
& itUse . useAim . aimZoom .~ defaultItZoom {_itZoomFac = 1.5}
|
||||||
repeater :: Item
|
repeater :: Item
|
||||||
repeater = rifle
|
repeater = rifle
|
||||||
& itModules . at ModRifleMag ?~ DefaultModule
|
& itModules . at ModRifleMag ?~ DefaultModule
|
||||||
|
|||||||
@@ -92,32 +92,16 @@ flameWall :: Item
|
|||||||
flameWall = flameThrower
|
flameWall = flameThrower
|
||||||
& itName .~ "FLAMEWALL"
|
& itName .~ "FLAMEWALL"
|
||||||
& itType .~ FLAMEWALL
|
& itType .~ FLAMEWALL
|
||||||
& itParams . sprayNozzles .~
|
& itParams . sprayNozzles .~ zipWith makeNozzle [0,0.6,-0.6] [2,2.5,2.5]
|
||||||
[ Nozzle
|
where
|
||||||
{ _nzPressure = 2.5
|
makeNozzle dir pres = Nozzle
|
||||||
, _nzDir = 0
|
{ _nzPressure = pres
|
||||||
, _nzMaxWalkAngle = 0.2
|
, _nzDir = dir
|
||||||
, _nzWalkSpeed = 0.01
|
, _nzMaxWalkAngle = 0
|
||||||
|
, _nzWalkSpeed = 0
|
||||||
, _nzCurrentWalkAngle = 0
|
, _nzCurrentWalkAngle = 0
|
||||||
, _nzLength = 20
|
, _nzLength = 20
|
||||||
}
|
}
|
||||||
, Nozzle
|
|
||||||
{ _nzPressure = 3
|
|
||||||
, _nzDir = 0.5
|
|
||||||
, _nzMaxWalkAngle = 0.2
|
|
||||||
, _nzWalkSpeed = 0.01
|
|
||||||
, _nzCurrentWalkAngle = 0
|
|
||||||
, _nzLength = 20
|
|
||||||
}
|
|
||||||
, Nozzle
|
|
||||||
{ _nzPressure = 3
|
|
||||||
, _nzDir = -0.5
|
|
||||||
, _nzMaxWalkAngle = 0.2
|
|
||||||
, _nzWalkSpeed = 0.01
|
|
||||||
, _nzCurrentWalkAngle = 0
|
|
||||||
, _nzLength = 20
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
flameThrower :: Item
|
flameThrower :: Item
|
||||||
flameThrower = defaultAutoGun
|
flameThrower = defaultAutoGun
|
||||||
|
|||||||
+20
-2
@@ -5,6 +5,7 @@ import Dodge.LevelGen.Data
|
|||||||
import Dodge.Room
|
import Dodge.Room
|
||||||
import Dodge.RandomHelp
|
import Dodge.RandomHelp
|
||||||
import Dodge.Creature
|
import Dodge.Creature
|
||||||
|
import Dodge.Item.Craftable
|
||||||
--import Dodge.Item.Equipment
|
--import Dodge.Item.Equipment
|
||||||
|
|
||||||
import System.Random
|
import System.Random
|
||||||
@@ -15,16 +16,33 @@ import Control.Monad.State
|
|||||||
|
|
||||||
lockRoomKeyItems :: RandomGen g => [ (Int -> State g (SubCompTree Room) , State g CombineType ) ]
|
lockRoomKeyItems :: RandomGen g => [ (Int -> State g (SubCompTree Room) , State g CombineType ) ]
|
||||||
lockRoomKeyItems =
|
lockRoomKeyItems =
|
||||||
[(lasCenSensEdge, takeOne [LAUNCHER] )
|
[(lasCenSensEdge, takeOne [LAUNCHER,LASGUN,SPARKGUN] )
|
||||||
,(const slowDoorRoomRunPast, return MINIGUN)
|
,(const slowDoorRoomRunPast, return MINIGUN)
|
||||||
]
|
]
|
||||||
|
|
||||||
itemRooms :: RandomGen g => [(CombineType, State g (SubCompTree Room))]
|
itemRooms :: RandomGen g => [(CombineType, State g (SubCompTree Room))]
|
||||||
itemRooms =
|
itemRooms =
|
||||||
[ (LAUNCHER , corridorBoss launcherCrit )
|
[ (LAUNCHER , join $ takeOne
|
||||||
|
[corridorBoss launcherCrit
|
||||||
|
,roomsContaining $ map makeTypeCraft [TUBE,TUBE,HARDWARE]
|
||||||
|
]
|
||||||
|
)
|
||||||
, (MINIGUN , join $ takeOne [roomMiniIntro, minigunFakeout] )
|
, (MINIGUN , join $ takeOne [roomMiniIntro, minigunFakeout] )
|
||||||
|
, (LASGUN , join $ takeOne
|
||||||
|
[roomsContaining $ map makeTypeCraft [PRISM,PIPE,PIPE,HARDWARE]
|
||||||
|
]
|
||||||
|
)
|
||||||
|
, (SPARKGUN , join $ takeOne
|
||||||
|
[roomsContaining $ map makeTypeCraft [TRANSFORMER,CAN,CAN]
|
||||||
|
]
|
||||||
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
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 :: RandomGen g => Creature -> State g (SubCompTree Room)
|
||||||
corridorBoss cr = do
|
corridorBoss cr = do
|
||||||
endroom <- bossRoom cr
|
endroom <- bossRoom cr
|
||||||
|
|||||||
@@ -15,14 +15,14 @@ import Dodge.Default.Wall
|
|||||||
import Dodge.PlacementSpot
|
import Dodge.PlacementSpot
|
||||||
import Dodge.Placement.Instance
|
import Dodge.Placement.Instance
|
||||||
import Dodge.RoomLink
|
import Dodge.RoomLink
|
||||||
import Dodge.Item.Weapon.Utility
|
--import Dodge.Item.Weapon.Utility
|
||||||
import Dodge.Room.Link
|
import Dodge.Room.Link
|
||||||
import Dodge.Room.Path
|
import Dodge.Room.Path
|
||||||
import Dodge.Default.Room
|
import Dodge.Default.Room
|
||||||
import Dodge.Item.Consumable
|
--import Dodge.Item.Consumable
|
||||||
import Dodge.Item.Equipment
|
--import Dodge.Item.Equipment
|
||||||
import Dodge.Room.Foreground
|
import Dodge.Room.Foreground
|
||||||
import Dodge.Item.Weapon
|
--import Dodge.Item.Weapon
|
||||||
import Dodge.RandomHelp
|
import Dodge.RandomHelp
|
||||||
import Dodge.LevelGen.Data
|
import Dodge.LevelGen.Data
|
||||||
import Dodge.LevelGen.Switch
|
import Dodge.LevelGen.Switch
|
||||||
@@ -108,21 +108,20 @@ combineFloors f _ = f
|
|||||||
Add a light and a 'PutNothing' placement. -}
|
Add a light and a 'PutNothing' placement. -}
|
||||||
quarterRoomFlat :: RandomGen g => Float -> State g Room
|
quarterRoomFlat :: RandomGen g => Float -> State g Room
|
||||||
quarterRoomFlat w = do
|
quarterRoomFlat w = do
|
||||||
|
let commonPlacements =
|
||||||
|
[ mntLS iShape (V2 (w-20) w) (V3 (w-20) (w-20) 70)
|
||||||
|
, sPS (V2 (w-20) (w-20)) pi PutNothing
|
||||||
|
, sPS (V2 (w-15) (w-25)) pi PutNothing
|
||||||
|
]
|
||||||
b <- takeOne
|
b <- takeOne
|
||||||
[ [ mntLS vShape (V2 0 w) (V3 0 (w-20) 70)
|
[ [ mntLS vShape (V2 0 w) (V3 0 (w-20) 70)
|
||||||
, mntLS iShape (V2 (w-20) w) (V3 (w-20) (w-20) 70)
|
|
||||||
, sPS (V2 (w-20) (w-20)) pi PutNothing
|
|
||||||
, blockLine (V2 (w/2) (w/2)) (V2 (w/2) w)
|
, blockLine (V2 (w/2) (w/2)) (V2 (w/2) w)
|
||||||
]
|
] ++ commonPlacements
|
||||||
, [ mntLS iShape (V2 (w-20) w) (V3 (w-20) (w-20) 70)
|
, blockLine (V2 (w/2) (w/2)) (V2 (negate $ w/2) (w/2))
|
||||||
, sPS (V2 (w-20) (w-20)) pi PutNothing
|
: commonPlacements
|
||||||
, blockLine (V2 (w/2) (w/2)) (V2 (negate $ w/2) (w/2))
|
, [ blockLine (V2 (w/2) (w/2)) (V2 0 (w/2))
|
||||||
]
|
|
||||||
, [ mntLS iShape (V2 (w-20) w) (V3 (w-20) (w-20) 70)
|
|
||||||
, sPS (V2 (w-20) (w-20)) pi PutNothing
|
|
||||||
, blockLine (V2 (w/2) (w/2)) (V2 0 (w/2))
|
|
||||||
, blockLine (V2 (-29) w) (V2 0 (w/2))
|
, blockLine (V2 (-29) w) (V2 0 (w/2))
|
||||||
]
|
] ++ commonPlacements
|
||||||
]
|
]
|
||||||
pure $ defaultRoom
|
pure $ defaultRoom
|
||||||
{ _rmPolys = [ [V2 0 0,V2 w w,V2 (-w) w] ]
|
{ _rmPolys = [ [V2 0 0,V2 w w,V2 (-w) w] ]
|
||||||
@@ -138,7 +137,6 @@ quarterRoomFlat w = do
|
|||||||
, _rmPmnts = b
|
, _rmPmnts = b
|
||||||
, _rmBound = [[V2 0 0,V2 w w,V2 (-w) w]]
|
, _rmBound = [[V2 0 0,V2 w w,V2 (-w) w]]
|
||||||
}
|
}
|
||||||
|
|
||||||
fourthCornerWall :: RandomGen g => Float -> State g Room
|
fourthCornerWall :: RandomGen g => Float -> State g Room
|
||||||
fourthCornerWall w = do
|
fourthCornerWall w = do
|
||||||
b <- takeOne
|
b <- takeOne
|
||||||
@@ -199,16 +197,14 @@ shufflePlacements r = do
|
|||||||
return $ r & rmPmnts .~ newPSs
|
return $ r & rmPmnts .~ newPSs
|
||||||
{- | A randomly generate room based on four randomly generated corners.
|
{- | A randomly generate room based on four randomly generated corners.
|
||||||
Tight corridors, random placements. -}
|
Tight corridors, random placements. -}
|
||||||
randomFourCornerRoom :: RandomGen g => State g Room
|
randomFourCornerRoom :: RandomGen g => [Item] -> State g Room
|
||||||
randomFourCornerRoom = do
|
randomFourCornerRoom its = do
|
||||||
corners <- replicateM 4 . join $ takeOne [quarterRoomFlat 100, fourthCornerWall 100]
|
corners <- replicateM 4 . join $ takeOne [quarterRoomFlat 100, fourthCornerWall 100]
|
||||||
nItms <- state $ randomR (1,2)
|
itms <- shuffle its
|
||||||
itms <- takeN nItms $ fmap PutFlIt $ [autoRadar,autoSonar,remoteLauncher,jetPack,blinkGun]
|
|
||||||
++ replicate 5 (medkit 500)
|
|
||||||
nCrits <- state $ randomR (1,3)
|
nCrits <- state $ randomR (1,3)
|
||||||
crits <- takeN nCrits $ fmap PutCrit $ [spreadGunCrit,pistolCrit,autoCrit,armourChaseCrit]
|
crits <- takeN nCrits <=< shuffle $ fmap PutCrit $ [spreadGunCrit,pistolCrit,autoCrit,armourChaseCrit]
|
||||||
++ replicate 20 chaseCrit
|
++ replicate 20 chaseCrit
|
||||||
randomiseAllLinks . fillNothingPlacements (crits ++ itms) =<<
|
randomiseAllLinks . fillNothingPlacements (crits ++ map PutFlIt itms) =<<
|
||||||
( shufflePlacements
|
( shufflePlacements
|
||||||
. over rmPmnts ( sps0 putLamp :)
|
. over rmPmnts ( sps0 putLamp :)
|
||||||
. foldr1 combineRooms
|
. foldr1 combineRooms
|
||||||
|
|||||||
Reference in New Issue
Block a user