Files
loop/src/Dodge/Creature.hs
T

244 lines
6.4 KiB
Haskell

module Dodge.Creature (
module Dodge.Creature,
module Dodge.Creature.ChaseCrit,
module Dodge.Creature.Inanimate,
launcherCrit,
pistolCrit,
ltAutoCrit,
spreadGunCrit,
autoCrit,
armourChaseCrit,
) where
import Control.Lens
import Dodge.Creature.ArmourChase
import Dodge.Creature.AutoCrit
import Dodge.Creature.ChaseCrit
import Dodge.Creature.Inanimate
import Dodge.Creature.LauncherCrit
import Dodge.Creature.LtAutoCrit
import Dodge.Creature.PistolCrit
import Dodge.Creature.SpreadGunCrit
import Dodge.Data
import Dodge.Default
import Dodge.Item
import Geometry.Data
import qualified IntMapHelp as IM
import Picture
spawnerCrit :: Creature
spawnerCrit =
defaultCreature
& crHP .~ 300
& crInv .~ IM.empty
& crType . skinUpper .~ light4 blue
miniGunCrit :: Creature
miniGunCrit =
defaultCreature
& crInv .~ IM.fromList [(0, miniGunX 3)]
& crType . skinUpper .~ light4 red
& crType . humanoidAI .~ MiniGunAI
longCrit :: Creature
longCrit =
defaultCreature
& crActionPlan .~
ActionPlan
{ _apImpulse = []
, _apAction = []
, _apStrategy = StrategyActions WatchAndWait [StartSentinelPost]
, _apGoal = []
}
& crInv .~ IM.fromList [(0, sniperRifle), (1, medkit 100)]
& crType . humanoidAI .~ LongAI
& crType . skinUpper .~ light4 red
multGunCrit :: Creature
multGunCrit =
defaultCreature
& crInv .~ IM.fromList [(0, volleyGun 4), (1, medkit 100)]
& crType . skinUpper .~ light4 red
& crType . humanoidAI .~ MultGunAI
addArmour :: Creature -> Creature
addArmour = over crInv insarmour
where
insarmour xs = IM.insert (IM.newKey xs) frontArmour xs
{- | The creature you control.
ID 0.
-}
startCr :: Creature
startCr =
defaultCreature
& crPos .~ V2 20 0
& crOldPos .~ V2 20 0
& crDir .~ pi / 2
& crMvDir .~ pi / 2
& crID .~ 0
& crHP .~ 1000
& crMaxHP .~ 1500
& crInv .~ startInventory
& crCorpse .~ MakeDefaultCorpse
& crFaction .~ PlayerFaction
& crMvType .~ MvWalking yourDefaultSpeed
& crType . skinUpper .~ light4 black
& crType . humanoidAI .~ YourAI
-- | Items you start with.
startInvList :: [Item]
startInvList = []
startInventory :: IM.IntMap Item
startInventory = IM.fromList $ zip [0 ..] startInvList
inventoryX :: Char -> [Item]
inventoryX c = case c of
'A' ->
[ clickDetector ITEMDETECTOR
, makeTypeCraftNum 1 TRANSFORMER
, makeTypeCraftNum 2 CAN
, makeTypeCraftNum 2 PIPE
]
'B' ->
[ forceFieldGun
, wristArmour
, wristArmour
, autoRifle
, smg
, machinePistol
, makeTypeCraftNum 4 MICROCHIP
, makeTypeCraftNum 2 TIN
, makeTypeCraftNum 2 HARDWARE
, makeTypeCraftNum 2 CAN
, makeTypeCraftNum 2 PIPE
, makeTypeCraftNum 1 CREATURESENSOR
]
'C' ->
[ autoDetector CREATUREDETECTOR
, autoDetector WALLDETECTOR
, autoDetector ITEMDETECTOR
, wristInvisibility
]
'D' ->
[ blinkGun
, unsafeBlinkGun
, autoDetector WALLDETECTOR
]
'E' ->
[ makeTypeCraftNum 3 PIPE
, makeTypeCraftNum 5 HARDWARE
, makeTypeCraftNum 1 TIN
, makeTypeCraftNum 1 SPRING
, makeTypeCraftNum 1 PLANK
, makeTypeCraftNum 1 PLATE
, makeTypeCraftNum 1 DRUM
, makeTypeCraftNum 1 MOTOR
]
'F' ->
[ makeTypeCraftNum 5 PIPE
, makeTypeCraftNum 5 TUBE
, makeTypeCraftNum 5 HARDWARE
, makeTypeCraftNum 5 TIN
, makeTypeCraftNum 5 CAN
, makeTypeCraftNum 5 SPRING
, makeTypeCraftNum 5 PUMP
, makeTypeCraftNum 5 MAGNET
, makeTypeCraftNum 5 PLANK
, makeTypeCraftNum 5 PLATE
, makeTypeCraftNum 5 DRUM
, makeTypeCraftNum 5 MOTOR
, makeTypeCraftNum 5 TRANSFORMER
, makeTypeCraftNum 5 PRISM
, makeTypeCraftNum 5 LIGHTER
, makeTypeCraftNum 5 INCENDIARYMODULE
]
'G' ->
[ autoPistol
, pistol
, makeTypeCraftNum 2 HARDWARE
, makeTypeCraftNum 2 MAGNET
, makeTypeCraftNum 5 INCENDIARYMODULE
, makeTypeCraftNum 5 CONCUSSMODULE
, makeTypeCraftNum 5 STATICMODULE
]
'H' -> [shatterGun]
'I' ->
[ makeTypeCraft TELEPORTMODULE
, makeTypeCraftNum 2 MICROCHIP
]
'J' ->
[ lasGun
, lasGun
, dualBeam
, makeTypeCraftNum 10 TRANSFORMER
]
'K' ->
[ autoRifle
, makeTypeCraftNum 7 MICROCHIP
, makeTypeCraftNum 4 HARDWARE
, makeTypeCraftNum 2 MAGNET
, makeTypeCraftNum 1 MOTOR
, makeTypeCraftNum 2 ANTIMATTER
, makeTypeCraftNum 1 LIGHTSENSOR
, makeTypeCraftNum 1 SOUNDSENSOR
, makeTypeCraftNum 1 HEATSENSOR
, makeTypeCraftNum 1 BOUNCEMODULE
, makeTypeCraftNum 1 PENMODULE
, makeTypeCraftNum 1 INCENDIARYMODULE
, makeTypeCraftNum 1 CONCUSSMODULE
, makeTypeCraftNum 1 STATICMODULE
]
_ -> []
testInventory :: IM.IntMap Item
testInventory =
IM.fromList $
zip
[0 ..]
[ makeTypeCraftNum 9 PIPE
, autoAmr
, brainHat
, headLamp
, autoDetector WALLDETECTOR
, magShield
, frontArmour
, wristArmour
, flatShield
, sniperRifle
, makeTypeCraftNum 1 MOTOR
, makeTypeCraft INCENDIARYMODULE
, makeTypeCraft STATICMODULE
, makeTypeCraft CONCUSSMODULE
, teleportModule
, makeTypeCraftNum 10 HARDWARE
, makeTypeCraftNum 3 SPRING
, makeTypeCraftNum 10 CAN
, makeTypeCraftNum 3 PLANK
]
stackedInventory :: IM.IntMap Item
stackedInventory =
IM.fromList $
zip
[0 ..]
[ burstRifle
, pipe
, rewindGun
, tractorGun
, autoPistol
, pistol
, teslaGun
, blinkGun
, miniGunX 3
, boosterGun
, remoteLauncher
, flatShield
, spawnGun (lamp 5)
, lasGun
, flameThrower
, poisonSprayer
, launcher
]