-- | Game mode definitions. module Content.ModeKind ( cdefs ) where import qualified Data.IntMap.Strict as IM import Content.ModeKindPlayer import Game.LambdaHack.Common.ContentDef import Game.LambdaHack.Content.ModeKind cdefs :: ContentDef ModeKind cdefs = ContentDef { getSymbol = msymbol , getName = mname , getFreq = mfreq , validateSingle = validateSingleModeKind , validateAll = validateAllModeKind , content = [campaign, duel, skirmish, ambush, battle, safari, pvp, coop, defense] } campaign, duel, skirmish, ambush, battle, safari, pvp, coop, defense :: ModeKind campaign = ModeKind { msymbol = 'a' , mname = "campaign" , mfreq = [("campaign", 1)] , mroster = rosterCampaign , mcaves = cavesCampaign , mdesc = "Don't let wanton curiosity, greed and the creeping abstraction madness keep you down there in the darkness for too long!" } duel = ModeKind { msymbol = 'u' , mname = "duel" , mfreq = [("duel", 1)] , mroster = rosterDuel , mcaves = cavesSkirmish , mdesc = "You disagreed about the premises of a relative completeness theorem and there's only one way to settle that." } skirmish = ModeKind { msymbol = 'k' , mname = "skirmish" , mfreq = [("skirmish", 1)] , mroster = rosterSkirmish , mcaves = cavesSkirmish , mdesc = "The scoring system of a programming contest fails to determine the winning team and participants take matters into their own hands." } ambush = ModeKind { msymbol = 'm' , mname = "ambush" , mfreq = [("ambush", 1)] , mroster = rosterAmbush , mcaves = cavesAmbush , mdesc = "Surprising, striking ideas and fast execution are what makes or breaks a creative team!" } battle = ModeKind { msymbol = 'b' , mname = "battle" , mfreq = [("battle", 1)] , mroster = rosterBattle , mcaves = cavesBattle , mdesc = "Odds are stacked against those that unleash the horrors of abstraction." } safari = ModeKind { msymbol = 'f' , mname = "safari" , mfreq = [("safari", 1)] , mroster = rosterSafari , mcaves = cavesSafari , mdesc = "In this simulation you'll discover the joys of hunting the most exquisite of Earth's flora and fauna, both animal and semi-intelligent (exit at the bottommost level)." } pvp = ModeKind { msymbol = 'v' , mname = "PvP" , mfreq = [("PvP", 1)] , mroster = rosterPvP , mcaves = cavesSkirmish , mdesc = "(Not usable right now.) This is a fight to the death between two human-controlled teams." } coop = ModeKind { msymbol = 'o' , mname = "Coop" , mfreq = [("Coop", 1)] , mroster = rosterCoop , mcaves = cavesCampaign , mdesc = "(This mode is intended solely for automated testing.)" } defense = ModeKind { msymbol = 'e' , mname = "defense" , mfreq = [("defense", 1)] , mroster = rosterDefense , mcaves = cavesCampaign , mdesc = "Don't let the humans defile your abstract secrets and flee, like the vulgar, literal, base scoundrels that they are!" } rosterCampaign, rosterDuel, rosterSkirmish, rosterAmbush, rosterBattle, rosterSafari, rosterPvP, rosterCoop, rosterDefense :: Roster rosterCampaign = Roster { rosterList = [ playerHero , playerMonster , playerAnimal ] , rosterEnemy = [ ("Adventurer Party", "Monster Hive") , ("Adventurer Party", "Animal Kingdom") ] , rosterAlly = [("Monster Hive", "Animal Kingdom")] } rosterDuel = Roster { rosterList = [ playerHero { fname = "White Recursive" , fentryLevel = -3 , finitialActors = 1 } , playerAntiHero { fname = "Red Iterative" , fentryLevel = -3 , finitialActors = 1 } , playerHorror ] , rosterEnemy = [ ("White Recursive", "Red Iterative") , ("White Recursive", "Horror Den") , ("Red Iterative", "Horror Den") ] , rosterAlly = [] } rosterSkirmish = rosterDuel { rosterList = [ playerHero { fname = "White Haskell" , fentryLevel = -3 } , playerAntiHero { fname = "Purple Agda" , fentryLevel = -3 } , playerHorror ] , rosterEnemy = [ ("White Haskell", "Purple Agda") , ("White Haskell", "Horror Den") , ("Purple Agda", "Horror Den") ] } rosterAmbush = rosterDuel { rosterList = [ playerHero { fname = "Yellow Idris" , fentryLevel = -5 } , playerAntiHero { fname = "Blue Epigram" , fentryLevel = -5 } , playerHorror {fentryLevel = -5} ] , rosterEnemy = [ ("Yellow Idris", "Blue Epigram") , ("Yellow Idris", "Horror Den") , ("Blue Epigram", "Horror Den") ] } rosterBattle = Roster { rosterList = [ playerSoldier { finitialActors = 5 , fentryLevel = -5 } , playerMobileMonster { finitialActors = 30 , fentryLevel = -5 , fneverEmpty = True } , playerMobileAnimal { finitialActors = 20 , fentryLevel = -5 , fneverEmpty = True } ] , rosterEnemy = [ ("Armed Adventurer Party", "Monster Hive") , ("Armed Adventurer Party", "Animal Kingdom") ] , rosterAlly = [("Monster Hive", "Animal Kingdom")] } rosterSafari = Roster { rosterList = [ playerAntiMonster { fname = "Monster Tourist Office" , fcanEscape = True , fneverEmpty = True -- Follow-the-guide, as tourists do. , ftactic = TFollow , fentryLevel = -4 , finitialActors = 15 , fleaderMode = LeaderUI $ AutoLeader False False } , playerCivilian { fname = "Hunam Convict Pack" , fentryLevel = -4 } , playerMobileAnimal { fname = "Animal Magnificent Specimen Variety" , fneverEmpty = True , fentryLevel = -7 , finitialActors = 10 } , playerMobileAnimal { fname = "Animal Exquisite Herds and Packs" , fneverEmpty = True , fentryLevel = -10 , finitialActors = 25 } ] , rosterEnemy = [ ("Monster Tourist Office", "Hunam Convict Pack") , ("Monster Tourist Office", "Animal Magnificent Specimen Variety") , ("Monster Tourist Office", "Animal Exquisite Herds and Packs") ] , rosterAlly = [( "Animal Magnificent Specimen Variety" , "Animal Exquisite Herds and Packs" )] } rosterPvP = Roster { rosterList = [ playerHero { fname = "Red" , fentryLevel = -3 } , playerHero { fname = "Blue" , fentryLevel = -3 } , playerHorror ] , rosterEnemy = [ ("Red", "Blue") , ("Red", "Horror Den") , ("Blue", "Horror Den") ] , rosterAlly = [] } rosterCoop = Roster { rosterList = [ playerAntiHero { fname = "Coral" } , playerAntiHero { fname = "Amber" , fleaderMode = LeaderNull } , playerAntiHero { fname = "Green" } , playerAnimal { fhasUI = True } , playerMonster , playerMonster { fname = "Leaderless Monster Hive" , fleaderMode = LeaderNull } ] , rosterEnemy = [ ("Coral", "Monster Hive") , ("Amber", "Monster Hive") , ("Animal Kingdom", "Leaderless Monster Hive") ] , rosterAlly = [ ("Coral", "Amber") , ("Coral", "Green") , ("Amber", "Green") , ("Green", "Animal Kingdom") , ("Green", "Monster Hive") , ("Green", "Leaderless Monster Hive") ] } rosterDefense = Roster { rosterList = [ playerAntiMonster { finitialActors = 1 } , playerAntiHero { fname = "Yellow" , finitialActors = 10 } , playerAnimal ] , rosterEnemy = [ ("Yellow", "Monster Hive") , ("Yellow", "Animal Kingdom") ] , rosterAlly = [("Monster Hive", "Animal Kingdom")] } cavesCampaign, cavesSkirmish, cavesAmbush, cavesBattle, cavesSafari :: Caves cavesCampaign = IM.fromList $ [ (-1, ("caveRogue", Just True)) , (-2, ("caveRogue", Nothing)) , (-3, ("caveEmpty", Nothing)) ] ++ zip [-4, -5..(-9)] (repeat ("campaign random", Nothing)) ++ [(-10, ("caveNoise", Nothing))] cavesSkirmish = IM.fromList [(-3, ("caveSkirmish", Nothing))] cavesAmbush = IM.fromList [(-5, ("caveAmbush", Nothing))] cavesBattle = IM.fromList [(-5, ("caveBattle", Nothing))] cavesSafari = IM.fromList [ (-4, ("caveSafari1", Nothing)) , (-7, ("caveSafari2", Nothing)) , (-10, ("caveSafari3", Just False)) ]