188 lines
5.0 KiB
Haskell
188 lines
5.0 KiB
Haskell
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
||
|
|
||
|
data CardSym = StartShinji1 | StartUnitTwo1 | StopIt | SomethingLikeThis | ProgKnife | Maya | Adam | InstShinji1a | InstShinji1b deriving (Show)
|
||
|
data TypeSym = Angel
|
||
|
| Character
|
||
|
| MainCharacter
|
||
|
| Instrumentality
|
||
|
| Battle
|
||
|
| Put
|
||
|
| Drama
|
||
|
| Eva deriving (Show)
|
||
|
|
||
|
data Faction = Blue | Red | White | Green | Yellow | Black | Purple deriving (Show)
|
||
|
data Mark = Circle | Triangle deriving (Show)
|
||
|
type LineMark = (Mark, Faction)
|
||
|
type LineMarks = [LineMark]
|
||
|
data Trait = Reaction | Other | Male | Female | Weapon deriving (Show)
|
||
|
type Traits = [Trait]
|
||
|
|
||
|
instShinji1a = CardInfo
|
||
|
{ ciName = "3rd Child - Shinji Ikari"
|
||
|
, ciFaction = Blue
|
||
|
, ciDP = Nothing
|
||
|
, ciType = Instrumentality
|
||
|
, ciLineMarks = Nothing
|
||
|
, ciTraits = []
|
||
|
, ciSpeaks = Nothing
|
||
|
, ciLine = Nothing
|
||
|
, ciText = "Asuka is down."
|
||
|
, ciStrength = Nothing
|
||
|
, ciLevel = Just 1
|
||
|
, ciNextInst = Just InstShinji1b
|
||
|
}
|
||
|
|
||
|
instShinji1b = CardInfo
|
||
|
{ ciName = "I'm such a loser..."
|
||
|
, ciFaction = Blue
|
||
|
, ciDP = Nothing
|
||
|
, ciType = Instrumentality
|
||
|
, ciLineMarks = Nothing
|
||
|
, ciTraits = []
|
||
|
, ciSpeaks = Nothing
|
||
|
, ciLine = Nothing
|
||
|
, ciText = "All main characters other than Shinji and Asuka are down."
|
||
|
, ciStrength = Nothing
|
||
|
, ciLevel = Just 2
|
||
|
, ciNextInst = Nothing
|
||
|
}
|
||
|
|
||
|
adam = CardInfo
|
||
|
{ ciName = "The 1st Angel - Adam"
|
||
|
, ciFaction = Purple
|
||
|
, ciDP = Nothing
|
||
|
, ciType = Angel
|
||
|
, ciLineMarks = Nothing
|
||
|
, ciTraits = []
|
||
|
, ciSpeaks = Nothing
|
||
|
, ciLine = Nothing
|
||
|
, ciText = "When Adam is defeated, discard all Put cards in Neo-Tokyo."
|
||
|
, ciStrength = Just 3
|
||
|
, ciLevel = Nothing
|
||
|
, ciNextInst = Nothing
|
||
|
}
|
||
|
|
||
|
maya = CardInfo
|
||
|
{ ciName = "Maya Ibuki"
|
||
|
, ciFaction = Yellow
|
||
|
, ciDP = Just 1
|
||
|
, ciType = Character
|
||
|
, ciLineMarks = Just [(Circle, Yellow)]
|
||
|
, ciTraits = [Other, Female]
|
||
|
, ciSpeaks = Just 1
|
||
|
, ciLine = Just "That's the Doctor I know!"
|
||
|
, ciText = "Can speak one yellow Battle card each turn. Cards spoken by Maya get +1 DP."
|
||
|
, ciStrength = Nothing
|
||
|
, ciLevel = Nothing
|
||
|
, ciNextInst = Nothing
|
||
|
}
|
||
|
|
||
|
progKnife = CardInfo
|
||
|
{ ciName = "Progressive Knife"
|
||
|
, ciFaction = Blue
|
||
|
, ciDP = Just 2
|
||
|
, ciType = Put
|
||
|
, ciLineMarks = Just [(Triangle, White), (Triangle, Green), (Triangle, Yellow), (Triangle, Black)]
|
||
|
, ciTraits = [Other, Weapon]
|
||
|
, ciSpeaks = Nothing
|
||
|
, ciLine = Just "That's just a selfish excuse."
|
||
|
, ciText = "Target Eva gains +1 Strength."
|
||
|
, ciStrength = Nothing
|
||
|
, ciLevel = Nothing
|
||
|
, ciNextInst = Nothing
|
||
|
}
|
||
|
|
||
|
startShinji1 = CardInfo
|
||
|
{ ciName = "3rd Child - Shinji Ikari"
|
||
|
, ciFaction = Blue
|
||
|
, ciDP = Just 0
|
||
|
, ciType = MainCharacter
|
||
|
, ciLineMarks = Just [(Circle, Blue)]
|
||
|
, ciTraits = [Male]
|
||
|
, ciSpeaks = Just 1
|
||
|
, ciLine = Just "I feel like I belong here!"
|
||
|
, ciText = "Can speak one blue card every turn."
|
||
|
, ciStrength = Nothing
|
||
|
, ciLevel = Nothing
|
||
|
, ciNextInst = Nothing
|
||
|
}
|
||
|
|
||
|
startUnitTwo1 = CardInfo
|
||
|
{ ciName = "Evangelion Unit Two"
|
||
|
, ciFaction = Red
|
||
|
, ciDP = Just 1
|
||
|
, ciType = Eva
|
||
|
, ciLineMarks = Just [(Circle, Red)]
|
||
|
, ciTraits = []
|
||
|
, ciSpeaks = Nothing
|
||
|
, ciLine = Just "They picked me! I'm gonna be an elite pilot protecting humanity!"
|
||
|
, ciText = "If put on Unit Two, it gains +1 Strength and can use one additional *weapon* every Battle phase. Cannot be assigned to battle if Asuka is down."
|
||
|
, ciStrength = Just 1
|
||
|
, ciLevel = Nothing
|
||
|
, ciNextInst = Nothing
|
||
|
}
|
||
|
|
||
|
stopIt = CardInfo
|
||
|
{ ciName = "Stop it! This isn't the time..."
|
||
|
, ciFaction = Blue
|
||
|
, ciDP = Just 1
|
||
|
, ciType = Battle
|
||
|
, ciLineMarks = Just [(Triangle, Red), (Triangle, White), (Triangle, Green), (Triangle, Black)]
|
||
|
, ciTraits = [Reaction]
|
||
|
, ciSpeaks = Nothing
|
||
|
, ciLine = Just "Stop it!"
|
||
|
, ciText = "Cancel target Drama card."
|
||
|
, ciStrength = Nothing
|
||
|
, ciLevel = Nothing
|
||
|
, ciNextInst = Nothing
|
||
|
}
|
||
|
|
||
|
somethingLikeThis = CardInfo
|
||
|
{ ciName = "But when it comes to something like this..."
|
||
|
, ciFaction = Blue
|
||
|
, ciDP = Just 2
|
||
|
, ciType = Drama
|
||
|
, ciLineMarks = Just [(Circle, Red), (Circle, White), (Circle, Green)]
|
||
|
, ciTraits = []
|
||
|
, ciSpeaks = Nothing
|
||
|
, ciLine = Just "That reminds me..."
|
||
|
, ciText = "All characters grouped with Shinji can speak one additional card this turn."
|
||
|
, ciStrength = Nothing
|
||
|
, ciLevel = Nothing
|
||
|
, ciNextInst = Nothing
|
||
|
}
|
||
|
|
||
|
data CardInfo = CardInfo
|
||
|
{ ciName :: String
|
||
|
, ciFaction :: Faction
|
||
|
, ciDP :: Maybe Integer
|
||
|
, ciType :: TypeSym
|
||
|
, ciLineMarks :: Maybe LineMarks
|
||
|
, ciTraits :: Traits
|
||
|
, ciSpeaks :: Maybe Integer
|
||
|
, ciLine :: Maybe String
|
||
|
, ciText :: String
|
||
|
, ciStrength :: Maybe Integer
|
||
|
, ciLevel :: Maybe Integer
|
||
|
, ciNextInst :: Maybe CardSym
|
||
|
} deriving (Show)
|
||
|
|
||
|
data CardMeta = CardMeta
|
||
|
{ cmOwner :: PlayerId
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
type CardId = Integer
|
||
|
type PlayerId = Integer
|
||
|
|
||
|
class SymLookup where
|
||
|
getSym :: CardId -> CardSym
|
||
|
|
||
|
class MetaLookup where
|
||
|
getMeta :: CardId -> CardMeta
|
||
|
|
||
|
class CardLookup where
|
||
|
getCard :: CardSym -> CardInfo
|
||
|
|