LambdaHack-0.4.9.0: GameDefinition/Content/ModeKind.hs
-- | 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)) ]