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 ]