diff --git a/Main.hs b/Main.hs index 672f85e..8fac63d 100644 --- a/Main.hs +++ b/Main.hs @@ -1,4 +1,6 @@ -data CardSym = Card1 -- | Card2 | Card3 | Card4 etc etc +{-# LANGUAGE MultiParamTypeClasses #-} + +data CardSym = StartShinji1 | StartUnitTwo1 | StopIt | SomethingLikeThis | ProgKnife | Maya | Adam | InstShinji1a | InstShinji1b deriving (Show) data TypeSym = Angel | Character | MainCharacter @@ -6,19 +8,171 @@ data TypeSym = Angel | Battle | Put | Drama - | Eva + | 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 - , ci -- etc etc etc etc etc - } + , 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