packages feed

Allure-0.4.99.0: GameDefinition/Content/ModeKind.hs

-- Copyright (c) 2008--2011 Andres Loeh, 2010--2014 Mikolaj Konarski
-- This file is a part of the computer game Allure of the Stars
-- and is released under the terms of the GNU Affero General Public License.
-- For license and copyright information, see the file LICENSE.
--
-- | 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   = "You got stranded looting a once luxurious cruise liner and your current plan is to fight through, gathering your spoils, to the bridge at the giant spaceship's opposite end."
  }

duel = ModeKind
  { msymbol = 'u'
  , mname   = "duel"
  , mfreq   = [("duel", 1)]
  , mroster = rosterDuel
  , mcaves  = cavesSkirmish
  , mdesc   = "Let's settle the argument about this noble lady outside, in the woody biosphere behind the saloon."
  }

skirmish = ModeKind
  { msymbol = 'k'
  , mname   = "skirmish"
  , mfreq   = [("skirmish", 1)]
  , mroster = rosterSkirmish
  , mcaves  = cavesSkirmish
  , mdesc   = "You owe restorative surgery to one of our crew: if we win, we take all you have; if you win, you take ours old giant spaceship (if you still want it when you see it)."
  }

ambush = ModeKind
  { msymbol = 'm'
  , mname   = "ambush"
  , mfreq   = [("ambush", 1)]
  , mroster = rosterAmbush
  , mcaves  = cavesAmbush
  , mdesc   = "Conveniently, on the path to the Triton's spaceport, passengers can relax in a shady park."
  }

battle = ModeKind
  { msymbol = 'b'
  , mname   = "battle"
  , mfreq   = [("battle", 1)]
  , mroster = rosterBattle
  , mcaves  = cavesBattle
  , mdesc   = "Not even the unexplained ruin of the largest and tightest security Neptune's moon spaceport will prevent you from claiming your prize."
  }

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 half-witted humans derail your operation and flee, like the puny, naked, tentacle-less beasts that they are!"
  }


rosterCampaign, rosterDuel, rosterSkirmish, rosterAmbush, rosterBattle, rosterSafari, rosterPvP, rosterCoop, rosterDefense :: Roster

rosterCampaign = Roster
  { rosterList = [ playerHero
                 , playerMonster
                 , playerAnimal
                 , playerRobot ]
  , rosterEnemy = [ ("Spacefarer Crew", "Alien Hierarchy")
                  , ("Spacefarer Crew", "Animal Kingdom")
                  , ("Spacefarer Crew", "Robot Anarchy") ]
 , rosterAlly = [ ("Alien Hierarchy", "Animal Kingdom")
                , ("Alien Hierarchy", "Robot Anarchy")
                , ("Robot Anarchy", "Animal Kingdom") ] }

rosterDuel = Roster
  { rosterList = [ playerHero { fname = "Spacefarer Crew"
                              , fentryLevel = 3
                              , finitialActors = 1 }
                 , playerAntiHero { fname = "Red Collars"
                                  , fentryLevel = 3
                                  , finitialActors = 1 }
                 , playerHorror ]
  , rosterEnemy = [ ("Spacefarer Crew", "Red Collars")
                  , ("Spacefarer Crew", "Horror Den")
                  , ("Red Collars", "Horror Den") ]
  , rosterAlly = [] }

rosterSkirmish = rosterDuel
  { rosterList = [ playerHero { fname = "Spacefarer Crew"
                              , fentryLevel = 3 }
                 , playerAntiHero { fname = "Red Collars"
                                  , fentryLevel = 3 }
                 , playerHorror ] }

rosterAmbush = rosterDuel
  { rosterList = [ playerHero { fname = "Spacefarer Crew"
                              , fentryLevel = 5 }
                 , playerAntiHero { fname = "Red Collars"
                                  , fentryLevel = 5 }
                 , playerHorror {fentryLevel = 5} ] }

rosterBattle = Roster
  { rosterList = [ playerSoldier { finitialActors = 5
                                 , fentryLevel = 5 }
                 , playerMobileMonster { finitialActors = 30
                                       , fentryLevel = 5
                                       , fneverEmpty = True }
                 , playerMobileAnimal { finitialActors = 10
                                      , fentryLevel = 5
                                      , fneverEmpty = True }
                 , playerMobileRobot { finitialActors = 10
                                     , fentryLevel = 5
                                     , fneverEmpty = True } ]
  , rosterEnemy = [ ("Armed Spacefarer Crew", "Alien Hierarchy")
                  , ("Armed Spacefarer Crew", "Animal Kingdom")
                  , ("Armed Spacefarer Crew", "Robot Anarchy") ]
  , rosterAlly = [ ("Alien Hierarchy", "Animal Kingdom")
                , ("Alien Hierarchy", "Robot Anarchy")
                , ("Robot Anarchy", "Animal Kingdom") ] }

rosterSafari = Roster
  { rosterList = [ playerAntiMonster { fname = "Alien 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 = [ ("Alien Tourist Office", "Hunam Convict Pack")
                  , ("Alien Tourist Office",
                     "Animal Magnificent Specimen Variety")
                  , ("Alien 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 { fname = "Alien Hierarchy" }
                 , playerMonster { fname = "Leaderless Alien Hierarchy"
                                 , fleaderMode = LeaderNull }
                 , playerRobot ]
  , rosterEnemy = [ ("Coral", "Alien Hierarchy")
                  , ("Amber", "Alien Hierarchy")
                  , ("Animal Kingdom", "Leaderless Alien Hierarchy") ]
  , rosterAlly = [ ("Coral", "Amber")
                 , ("Coral", "Green")
                 , ("Amber", "Green")
                 , ("Green", "Animal Kingdom")
                 , ("Green", "Robot Anarchy")
                 , ("Green", "Alien Hierarchy")
                 , ("Green", "Leaderless Alien Hierarchy") ] }

rosterDefense = Roster
  { rosterList = [ playerAntiMonster { finitialActors = 1 }
                 , playerAntiHero { fname = "Yellow"
                                  , finitialActors = 10 }
                 , playerAnimal
                 , playerRobot ]
  , rosterEnemy = [ ("Yellow", "Alien Hierarchy")
                  , ("Yellow", "Animal Kingdom")
                  , ("Yellow", "Robot Anarchy") ]
  , rosterAlly = [ ("Alien Hierarchy", "Animal Kingdom")
                 , ("Alien Hierarchy", "Robot Anarchy")
                 , ("Robot Anarchy", "Animal Kingdom") ] }


cavesCampaign, cavesSkirmish, cavesAmbush, cavesBattle, cavesSafari :: Caves

cavesCampaign = IM.fromList
                $ [(1, ("caveRogue", Nothing))]
                  ++ zip [2..11] (repeat ("campaign random", Nothing))
                  ++ [(12, ("caveNoise", Just True))]

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)) ]