Skip to content

Commit

Permalink
Cluttered Dormitory
Browse files Browse the repository at this point in the history
  • Loading branch information
halogenandtoast committed Dec 21, 2024
1 parent 3e5eb36 commit 48ad5db
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import Arkham.Capability
import Arkham.Card
import Arkham.Classes.HasGame
import Arkham.Classes.HasQueue (push)
import Arkham.Deck (toDeck)
import Arkham.Draw.Types
import Arkham.EncounterSet (EncounterSet (Tekelili))
import Arkham.Enemy.Cards qualified as Enemies
Expand Down Expand Up @@ -218,8 +217,10 @@ resolveTekelili
resolveTekelili iid tekelili = do
cardId <- field TreacheryCardId (asId tekelili)
mods <- getModifiers cardId
let deck = if PlaceOnBottomOfDeckInsteadOfDiscard `elem` mods then toDeck iid else toDeck TekeliliDeck
putOnBottomOfDeck iid deck (asId tekelili)
if
| PlaceOnBottomOfDeckInsteadOfDiscard `elem` mods -> putOnBottomOfDeck iid iid (asId tekelili)
| ShuffleIntoDeckInsteadOfDiscard `elem` mods -> shuffleIntoDeck iid (asId tekelili)
| otherwise -> putOnBottomOfDeck iid TekeliliDeck (asId tekelili)

drawTekelili :: (Sourceable source, ReverseQueue m) => InvestigatorId -> source -> Int -> m ()
drawTekelili iid source n = push $ DrawCards iid $ newCardDraw source TekeliliDeck n
7 changes: 7 additions & 0 deletions backend/arkham-api/library/Arkham/Game/Helpers.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3055,6 +3055,13 @@ windowMatches iid rawSource window'@(windowTiming &&& windowType -> (timing', wT
, deckMatch iid deck $ Matcher.replaceThatInvestigator who deckMatcher
]
_ -> noMatch
Matcher.ResolvingRevelation timing whoMatcher treacheryMatcher -> guardTiming timing \case
Window.ResolvingRevelation who treachery ->
andM
[ matchWho iid who whoMatcher
, treachery <=~> treacheryMatcher
]
_ -> noMatch
Matcher.DeckWouldRunOutOfCards timing whoMatcher -> guardTiming timing $ \case
Window.DeckWouldRunOutOfCards who -> matchWho iid who whoMatcher
_ -> noMatch
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,49 @@
module Arkham.Location.Cards.ClutteredDormitory (clutteredDormitory) where

import Arkham.Ability
import Arkham.Asset.Cards qualified as Assets
import Arkham.Card.CardDef
import Arkham.Enemy.Cards qualified as Cards
import Arkham.Helpers.Modifiers
import Arkham.Location.Cards qualified as Cards
import Arkham.Location.Import.Lifted
import Arkham.Matcher
import Arkham.Scenarios.FatalMirage.Helpers
import Arkham.Story.Cards qualified as Stories

newtype ClutteredDormitory = ClutteredDormitory LocationAttrs
deriving anyclass (IsLocation, HasModifiersFor)
deriving anyclass IsLocation
deriving newtype (Show, Eq, ToJSON, FromJSON, Entity)

clutteredDormitory :: LocationCard ClutteredDormitory
clutteredDormitory = location ClutteredDormitory Cards.clutteredDormitory 4 (PerPlayer 2)

mirageCards :: [CardDef]
mirageCards = [Cards.memoryOfAnUnspeakableEvil]

instance HasModifiersFor ClutteredDormitory where
getModifiersFor (ClutteredDormitory a) = do
modifySelfWhenM
a
( selectAny
$ mapOneOf
assetIs
[Assets.danforthBrilliantStudent, Assets.danforthBrilliantStudentResolute]
<> at_ (be a)
)
[ShroudModifier (-2)]

instance HasAbilities ClutteredDormitory where
getAbilities (ClutteredDormitory attrs) =
extendRevealed attrs []
getAbilities (ClutteredDormitory a) =
extendRevealed
a
[ mirage a 2 mirageCards
, restricted a 1 (youExist $ at_ (be a))
$ forced
$ ResolvingRevelation #when You
$ TreacheryWithTitle "Tekeli-li"
]

instance RunMessage ClutteredDormitory where
runMessage msg (ClutteredDormitory attrs) = runQueueT $ case msg of
_ -> ClutteredDormitory <$> liftRunMessage msg attrs
_ -> ClutteredDormitory <$> mirageRunner Stories.clutteredDormitory mirageCards 2 msg attrs
1 change: 1 addition & 0 deletions backend/arkham-api/library/Arkham/Matcher/Window.hs
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ data WindowMatcher
| EnemyDiscarded Timing SourceMatcher EnemyMatcher
| TreacheryDiscarded Timing SourceMatcher TreacheryMatcher
| WouldPerformRevelationSkillTest Timing Who
| ResolvingRevelation Timing Who TreacheryMatcher
| InitiatedSkillTest Timing Who SkillTypeMatcher SkillTestValueMatcher SkillTestMatcher
| SkillTestResult Timing Who SkillTestMatcher SkillTestResultMatcher
| SkillTestEnded Timing Who SkillTestMatcher
Expand Down
1 change: 1 addition & 0 deletions backend/arkham-api/library/Arkham/Modifier.hs
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,7 @@ data ModifierType
| Omnipotent
| OnlyFirstCopyCardCountsTowardMaximumHandSize
| PlaceOnBottomOfDeckInsteadOfDiscard
| ShuffleIntoDeckInsteadOfDiscard
| PlayableModifierContexts [(CardMatcher, [ModifierType])]
| ReduceCostOf CardMatcher Int
| RemoveFromGameInsteadOfDiscard
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
module Arkham.Story.Cards.ClutteredDormitory (clutteredDormitory) where

import Arkham.Asset.Cards qualified as Assets
import Arkham.Enemy.Cards qualified as Enemies
import Arkham.Location.Cards qualified as Locations
import Arkham.Scenarios.FatalMirage.Helpers
import Arkham.Story.Cards qualified as Cards
import Arkham.Story.Import.Lifted

Expand All @@ -13,5 +17,10 @@ clutteredDormitory = story ClutteredDormitory Cards.clutteredDormitory
instance RunMessage ClutteredDormitory where
runMessage msg s@(ClutteredDormitory attrs) = runQueueT $ case msg of
ResolveStory _ ResolveIt story' | story' == toId attrs -> do
handleMemory
attrs
Assets.danforthBrilliantStudent
Locations.clutteredDormitory
Enemies.memoryOfAnUnspeakableEvil
pure s
_ -> ClutteredDormitory <$> liftRunMessage msg attrs
3 changes: 3 additions & 0 deletions backend/arkham-api/library/Arkham/Treachery/Runner.hs
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@ instance RunMessage TreacheryAttrs where
AddToVictory target | target `elem` treacheryAttachedTarget a -> do
push $ toDiscard GameSource a
pure a
When (Revelation iid (isSource a -> True)) -> do
pushM $ checkWhen $ Window.ResolvingRevelation iid a.id
pure a
After (Revelation iid (isSource a -> True)) -> do
pushWhen
(treacheryPlacement == Limbo)
Expand Down
1 change: 1 addition & 0 deletions backend/arkham-api/library/Arkham/Window.hs
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ instance HasField "needsAction" CardPlay Bool where

data WindowType
= AttemptToEvadeEnemy InvestigatorId EnemyId
| ResolvingRevelation InvestigatorId TreacheryId
| VehicleLeaves AssetId LocationId
| VehicleEnters AssetId LocationId
| FloodLevelChanged LocationId FloodLevel FloodLevel
Expand Down

0 comments on commit 48ad5db

Please sign in to comment.