2019-05-16 06:08:02 -04:00
{- # LANGUAGE MultiParamTypeClasses # -}
data CardSym = StartShinji1 | StartUnitTwo1 | StopIt | SomethingLikeThis | ProgKnife | Maya | Adam | InstShinji1a | InstShinji1b deriving ( Show )
2019-05-16 00:04:32 -04:00
data TypeSym = Angel
| Character
| MainCharacter
| Instrumentality
| Battle
| Put
| Drama
2019-05-16 06:08:02 -04:00
| 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
}
2019-05-16 00:04:32 -04:00
2019-05-16 06:08:02 -04:00
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
}
2019-05-16 00:04:32 -04:00
data CardInfo = CardInfo
{ ciName :: String
, ciFaction :: Faction
2019-05-16 06:08:02 -04:00
, 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 )
2019-05-16 00:04:32 -04:00
data CardMeta = CardMeta
{ cmOwner :: PlayerId
}
2019-05-16 06:08:02 -04:00
2019-05-16 00:04:32 -04:00
type CardId = Integer
type PlayerId = Integer
class SymLookup where
getSym :: CardId -> CardSym
class MetaLookup where
getMeta :: CardId -> CardMeta
class CardLookup where
getCard :: CardSym -> CardInfo