LambdaHack-0.4.101.1: 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.Common.Dice
import Game.LambdaHack.Common.Misc
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, battleSurvival, safari, safariSurvival, pvp, coop, defense, screensaver, boardgame]
}
campaign, duel, skirmish, ambush, battle, battleSurvival, safari, safariSurvival, pvp, coop, defense, screensaver, boardgame :: ModeKind
campaign = ModeKind
{ msymbol = 'n'
, 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."
}
battleSurvival = ModeKind
{ msymbol = 'i'
, mname = "battle survival"
, mfreq = [("battle survival", 1)]
, mroster = rosterBattleSurvival
, mcaves = cavesBattle
, mdesc = "Odds are stacked for those that breathe mathematics."
}
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)."
}
safariSurvival = ModeKind
{ msymbol = 'n'
, mname = "safari survival"
, mfreq = [("safari survival", 1)]
, mroster = rosterSafariSurvival
, mcaves = cavesSafari
, mdesc = "In this simulation you'll discover the joys of being hunted among the most exquisite of Earth's flora and fauna, both animal and semi-intelligent."
}
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!"
}
screensaver = safari
{ mname = "safari screensaver"
, mfreq = [("screensaver", 1), ("starting", 1)]
, mroster = rosterSafari
{ rosterList = (head (rosterList rosterSafari))
-- changing leader by client needed, because of TFollow
{fleaderMode = LeaderAI $ AutoLeader True False}
: tail (rosterList rosterSafari)
}
}
boardgame = ModeKind
{ msymbol = 'g'
, mname = "boardgame"
, mfreq = [("boardgame", 1)]
, mroster = rosterBoardgame
, mcaves = cavesBoardgame
, mdesc = "Small room, no exits. Who will prevail?"
}
rosterCampaign, rosterDuel, rosterSkirmish, rosterAmbush, rosterBattle, rosterBattleSurvival, rosterSafari, rosterSafariSurvival, rosterPvP, rosterCoop, rosterDefense, rosterBoardgame:: 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"
, fhiCondPoly = hiDweller
, fentryLevel = -3
, finitialActors = 1 }
, playerAntiHero { fname = "Red Iterative"
, fhiCondPoly = hiDweller
, 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"
, fhiCondPoly = hiDweller
, fentryLevel = -3 }
, playerAntiHero { fname = "Purple Agda"
, fhiCondPoly = hiDweller
, fentryLevel = -3 }
, playerHorror ]
, rosterEnemy = [ ("White Haskell", "Purple Agda")
, ("White Haskell", "Horror Den")
, ("Purple Agda", "Horror Den") ] }
rosterAmbush = rosterDuel
{ rosterList = [ playerSniper { fname = "Yellow Idris"
, fhiCondPoly = hiDweller
, fentryLevel = -5
, finitialActors = 4 }
, playerAntiSniper { fname = "Blue Epigram"
, fhiCondPoly = hiDweller
, fentryLevel = -5
, finitialActors = 4 }
, playerHorror {fentryLevel = -5} ]
, rosterEnemy = [ ("Yellow Idris", "Blue Epigram")
, ("Yellow Idris", "Horror Den")
, ("Blue Epigram", "Horror Den") ] }
rosterBattle = Roster
{ rosterList = [ playerSoldier { fhiCondPoly = hiDweller
, fentryLevel = -5
, finitialActors = 5 }
, playerMobileMonster { fentryLevel = -5
, finitialActors = 35
, fneverEmpty = True }
, playerMobileAnimal { fentryLevel = -5
, finitialActors = 30
, fneverEmpty = True } ]
, rosterEnemy = [ ("Armed Adventurer Party", "Monster Hive")
, ("Armed Adventurer Party", "Animal Kingdom") ]
, rosterAlly = [("Monster Hive", "Animal Kingdom")] }
rosterBattleSurvival = rosterBattle
{ rosterList = [ playerSoldier { fhiCondPoly = hiDweller
, fentryLevel = -5
, finitialActors = 5
, fleaderMode =
LeaderAI $ AutoLeader True False
, fhasUI = False }
, playerMobileMonster { fentryLevel = -5
, finitialActors = 35
, fneverEmpty = True }
, playerMobileAnimal { fentryLevel = -5
, finitialActors = 30
, fneverEmpty = True
, fhasUI = True } ] }
playerMonsterTourist, playerHunamConvict, playerAnimalMagnificent, playerAnimalExquisite :: Player Dice
playerMonsterTourist =
playerAntiMonster { fname = "Monster Tourist Office"
, fcanEscape = True
, fneverEmpty = True -- no spawning
-- Follow-the-guide, as tourists do.
, ftactic = TFollow
, fentryLevel = -4
, finitialActors = 15
, fleaderMode =
LeaderUI $ AutoLeader False False }
playerHunamConvict =
playerCivilian { fname = "Hunam Convict Pack"
, fentryLevel = -4 }
playerAnimalMagnificent =
playerMobileAnimal { fname = "Animal Magnificent Specimen Variety"
, fneverEmpty = True
, fentryLevel = -7
, finitialActors = 10
, fleaderMode = -- move away from stairs
LeaderAI $ AutoLeader True False }
playerAnimalExquisite =
playerMobileAnimal { fname = "Animal Exquisite Herds and Packs"
, fneverEmpty = True
, fentryLevel = -10
, finitialActors = 30 }
rosterSafari = Roster
{ rosterList = [ playerMonsterTourist
, playerHunamConvict
, playerAnimalMagnificent
, playerAnimalExquisite
]
, 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" )
, ( "Animal Magnificent Specimen Variety"
, "Hunam Convict Pack" )
, ( "Hunam Convict Pack"
, "Animal Exquisite Herds and Packs" ) ] }
rosterSafariSurvival = rosterSafari
{ rosterList = [ playerMonsterTourist
{ fleaderMode = LeaderAI $ AutoLeader True False
, fhasUI = False }
, playerHunamConvict
, playerAnimalMagnificent
{ fleaderMode = LeaderUI $ AutoLeader False False
, fhasUI = True }
, playerAnimalExquisite
] }
rosterPvP = Roster
{ rosterList = [ playerHero { fname = "Red"
, fhiCondPoly = hiDweller
, fentryLevel = -3 }
, playerHero { fname = "Blue"
, fhiCondPoly = hiDweller
, 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 = rosterCampaign
{ rosterList = [ playerAntiHero
, playerAntiMonster
, playerAnimal ] }
rosterBoardgame = Roster
{ rosterList = [ playerHero { fname = "Blue"
, fhiCondPoly = hiDweller
, fentryLevel = -3
, finitialActors = 6 }
, playerAntiHero { fname = "Red"
, fhiCondPoly = hiDweller
, fentryLevel = -3
, finitialActors = 6 }
, playerHorror ]
, rosterEnemy = [ ("Blue", "Red")
, ("Blue", "Horror Den")
, ("Red", "Horror Den") ]
, rosterAlly = [] }
cavesCampaign, cavesSkirmish, cavesAmbush, cavesBattle, cavesSafari, cavesBoardgame :: Caves
cavesCampaign = IM.fromList
$ [ (-1, ("shallow random 1", 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)) ]
cavesBoardgame = IM.fromList [(-3, ("caveBoardgame", Nothing))]