Dominion Strategy Forum

Please login or register.

Login with username, password and session length

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - chipperMDW

Filter to certain boards:

Pages: 1 2 [3] 4 5 ... 12
Feedback / Re: Chrome Extension for f.ds!
« on: November 06, 2018, 10:24:03 am »
It might be possible to allow plurals to work without the Goldthorpe problem; if I just look for "s" specifically.

What's a Goldthorpe problem? Did you mean Scunthorpe problem? ('Cuz there's an easy way to remember how to spell that.)

The Goldthorpe problem was that the first half of that guy's name was getting autolinked to Gold, and it was annoying. I don't remember who he was; but people were posting about him back then.

Oh, wow. I was going to guess that was a made-up name referencing the Scunthorpe Problem in a Dominion-specific context, but there's actually a playtester for Nocturne (mentioned in the secret history but not the credits) named David Goldthorpe. That's a little bit hilarious.

Feedback / Re: Chrome Extension for f.ds!
« on: November 06, 2018, 09:48:17 am »
It might be possible to allow plurals to work without the Goldthorpe problem; if I just look for "s" specifically.

What's a Goldthorpe problem? Did you mean Scunthorpe problem? ('Cuz there's an easy way to remember how to spell that.)

Rules Questions / A Couple of Buy Phase Clarifications
« on: November 06, 2018, 09:43:13 am »
1) The rulebook says:
A token [on the Coffers side of your mat] can be removed in your Buy phase, before buying anything, for +$.

Does that have the same "any time" implication that Villagers have? Like, if I play a Capitalist Vassal during the Buy phase and he turns over a Storyteller, can I spend Coffers at that moment in order to get Storyteller to draw more cards?

2) The rulebooks say that after you "buy something," you can no longer play treasures or spend Coffers. Now that you can play Black Market in various ways during the buy phase, you can technically buy something at a time that would normally be "in the middle of" playing treasures. Does buying something from the Black Market this way serve to prevent you from playing any more treasures? Or is it only "normal" buys that do that?

Dominion: Renaissance Previews / Re: Renaissance rulebook is up
« on: November 05, 2018, 09:54:35 am »
Technically both Lantern and Enchantress cause me to do something else than following the play instructions on a card. Do I get to choose the order, and does it make a difference?

I think Lantern effectively modifies a "how many cards to reveal" property unique to Border Guard (whose default value is 2), and Border Guard's on-play instructions use that property. Where Enchantress says don't even follow the on-play instructions, so it doesn't matter what the value of that property is.

Rules Questions / Re: Disciple on Band of Misfits
« on: November 01, 2018, 03:46:42 pm »
Tracking is just super weird.  Like, we can see your Fitbit, but we don't have permission to access your location.  Apparently.

Exactly. There are really two kinds of tracking going on simultaneously. Since a card's properties can depend on its location, you have to unerringly (and sometimes impossibly) track its location in order to be able to know what it looks like at the instant some instructions need that information. But then there's also the more fragile tracking referred to by "lose track," which you have to note has been broken in certain situations to know not to follow instructions that tell you to move the card. So, sometimes, your left hand has to pretend it doesn't know where a card is even though your right hand is required to know exactly where it is.

Rules Questions / Re: Wine Merchant + Debt
« on: October 23, 2018, 09:25:05 pm »
I guess "at the start of Clean-up" could work but end of Buy phase makes more sense as you don't associate Clean-up with left-over Coins.

Diadem looks around sheepishly.

like all autocorrects, it doesn't always get the context right.

ĎTis true.

I look forward to playing X+Sewers-as-only-trashing games, where X is any of the following:
Mine, Mining Village, Lurker, Embargo, Treasure Map, Transmute, Loan, Watchtower, Mint, Develop, Jack of All Trades, Farmland, Hermit, Death Cart, Procession, Counterfeit, Graverobber, Pillage, Taxman, Transmogrify, Trade, Salt the Earth, Necromancer, Acting Troupe

What do you have against Changeling?

Rules Questions / Re: Wine Merchant + Debt
« on: October 23, 2018, 02:09:40 pm »
3) Spend a villager.

(I think you're only allowed to do that one in your action phase.)

Rules Questions / Re: Wine Merchant + Debt
« on: October 23, 2018, 11:31:35 am »
I think it's not a matter of whether or not you're in the buy phase at that time (I'd say you definitely are), but of what the rules mean when they say "A player removes Debt tokens in the player's Buy phase... this is done after playing Treasures, but can be done both before and after buying cards." If you interpret that to mean you may pay off debt at any time you would otherwise be allowed to buy a card (or event/project), then by the time Wine Merchant triggered, you'd be past the point where you could buy cards, so you'd also be past the point where you could pay off debt. If you interpret it to mean that you can do it at any time during the buy phase (similar to the apparent rule for Villagers) after you've played treasures, then you'd still be in that window after Wine Merchant triggered.

I assume the former was intended. (But I also would have assumed you would be allowed to spend Villagers only at a time you could play an action card, so what do I know?)

Dominion General Discussion / Re: Theme and mechanics themes
« on: October 18, 2018, 11:26:52 am »
So why are trashers religious in nature? My assumption is that it's about "cleansing"; at least the original ideal would go back to going to a Chapel to cleanse yourself of Curses. But with so many non-evil things being trashed; one could also think that it's about religion being responsible for burning books, or hindering scientific progress.

Or accepting donations.

Dominion General Discussion / Re: Complexity of Dominion
« on: October 09, 2018, 12:05:38 am »
That doesn't mean that... the game was ever actually in the intermediate states you considered on the way to the final one.

Actually, let me take this one statement back.  The game's state actually is identical to all the intermediate states when you consider the intermediate states to include the effects that have yet to be applied, which my script does.  Each iteration of the loop in upper_substate() essentially performs a simplification on the game state, transforming it into an exactly equivalent state where one effect that is outstanding in the "lower" state is no longer outstanding in the simpler state "above" it. Sorta like how a + or * "disappears" from an expression when you transform it to an equivalent expression by applying that operator.

Dominion General Discussion / Re: Complexity of Dominion
« on: October 08, 2018, 04:48:52 pm »
So, your whole algorithm depends on effects taking place at an instance in time.  Which maybe comes from the Magic layers system, I dunno.

But Quarry's effect isn't written to take place at an instant in's a continuous effect. As is inheritance's effect.  Which is what crj was trying to get at, I believe.

It does not depend on "effects taking place at an instant in time." I'm aware that continuous effects are meant to always apply, and that they don't "occur" at instants in time.  There's absolutely no "time" involved in the algorithm I'm discussing (nor is time involved in Magic's layer system, for that matter). In these lines from the last section of my script:
Code: [Select]
print "1. Play Quarry Before Buying Inheritance:"
s = State()
print "\t" + s.as_str() + "\n"

the concept of "time passing" is present only in the instructions "play_quarry" and "inherit_village".  The game has only one state at any given time.  Those two are the only instructions that mutate the game's state from one moment in time to the next.  Specifically, it starts at an initial state, progresses to a state where a Quarry has been played, then progresses to a state where Inheritance has been bought.  The algorithm I'm discussing doesn't involve any of that (and, as is demonstrated, is independent of the time order in which those two things occurred).

The algorithm I'm discussing occurs entirely within the call to as_str(), which does not mutate the game state; it merely determines a string representation of the game's current state at this one instant in time.  Of course, the algorithm progresses through a series of steps in order to reach its result, where certain things happen logically before other things.  As any algorithm must do.  That doesn't mean that those steps represent a passage of time, or that the game was ever actually in the intermediate states you considered on the way to the final one.

Take the equation x = 2 + 3 * 5.  In order to determine x, you have to follow a sequence of steps.  You have to follow them in the correct order, and one step along the way is that you find one of the subexpressions is equal to 15.  That doesn't somehow mean that x is equal to 15 from that moment in time until you finish the next step, after which it "becomes" 17.  Just because you're following the steps in a procedure doesn't mean you're representing the passage of time.

Likewise, just because you consider a game state where Inheritance's effect has been evaluated, but not Quarry's, that doesn't mean you're saying the game actually has that state at any given point in time.  It's just an intermediate concept you use on the way to evaluating the actual state at a given moment.  Just like the subexpression 3 * 5 is an intermediate concept you use on the way to evaluating x.

When translating such continuous effects into code, or making them instantaneous otherwise, you must add additional constraints, because "we can't go back".  I believe in this case rather than saying it's a "priority" thing (which sounds arbitrary), it should be considered as a "dependency" thing.  Quarry's cost-reduction depends on type, Inheritance effects type, so Quarry depends on Inheritance.  Thus I(Q(G)) evaluated as a single point-effect doesn't make sense, because Q depends on I, and dependencies should always be evaluated first.

I entirely agree that a priority order is completely arbitrary, and would probably not be the desirable way to describe an evaluation order in Dominion.  I also agree that a dependency order is probably what is intended.

I used the priority order in the code only because my intent was to show that, as I keep saying, the order of evaluation matters.  Even if what you're evaluating is a game state at one instant in time.  The simplest way to represent an order of evaluation is to assign a number to each thing you're evaluating. I wasn't trying to write a complete Dominion rules engine there.

My point, from the start, was that a hypothetical Dominion "Comprehensive Rules" document would explain what order to evaluate those effects. Nowhere am I saying that "dependency order" is somehow unacceptable. I'm just saying it's not called out anywhere (and doesn't really need to be, as far as I'm concerned). So one reason that the page counts of the rules that have been written for Dominion and those written for Magic are not directly comparable is because Magic's Comprehensive Rules are... more comprehensive. There are topics covered in Magic's rules that are not covered in Dominion's, but are nonetheless present (in fewer instances) there.

Dominion General Discussion / Re: Complexity of Dominion
« on: October 07, 2018, 08:53:36 pm »
For a concrete example of why you have to think in those terms, consider this:
  • You play Quarry A
  • You play Quarry B
  • You buy Bonfire and trash Quarry A
  • You buy a Village
How much does the Village cost when you buy it? $1. You cannot reach that conclusion by reducing the cost of Village by $2 (minimum $0) when you play Quarry A, then by another $2 (minimum $0) when you play Quarry B, then increasing it by $2 when you remove Quarry A from play.

The only correct option is to think in terms of evaluating the cost of Village at the moment when you buy it, using an algorithm which is dynamically adjusted by the course of play.

So, I think I figured out why you made this comment, and why you don't agree that Q(I(G)) produces a different result from I(Q(G)). You must still be thinking that Q(I(G)) is supposed to represent a sequence of states that a game progresses through as time passes. Like, you think Q(x) effectively means "play a Quarry." I explained before that that's not what I mean, and that the notation is intended to describe an evaluation order. The expressions inside parentheses don't represent past states, but substates.

I'm not sure how to explain better than I already have in text, so I wrote this instead. It's a Python script that uses the model I've been describing to process the effects we've been talking about in a very simple Dominion-inspired game state. The evaluation of effects is ordered by a simple priority order, with Inheritance always happening before Quarry (although it could be modified to use a dependency system like you effectively describe). Hopefully the code speaks for itself and makes it more clear what I've been saying. (Assuming you want to read/run it at all.)

(It assumes all Estates are "yours," by the way.)

Code: [Select]
class Substate(object):
    def __init__(self, effects):
        self.effects = effects
    def has_outstanding_effects(self):
        return len(self.effects) > 0
    def next_state(self):
        effects = sorted(self.effects, key = lambda e: e.priority)
        return effects[0](self, effects[1:])

# First element is cost; second element is whether it's an action
carddefs = { "Estate": [2, False], "Village": [3, True] }

class RawState(Substate):
    def __init__(self):
        Substate.__init__(self, [])
    def card_cost(self, name):
        return carddefs[name][0]
    def card_is_action(self, name):
        return carddefs[name][1]
    def as_str(self):
        return "G"

class ModifiedState(Substate):
    def __init__(self, underlying_state, outstanding_effects):
        Substate.__init__(self, outstanding_effects)
        self.underlying_state = underlying_state
    def card_cost(self, name):
        return self.underlying_state.card_cost(name)
    def card_is_action(self, name):
        return self.underlying_state.card_is_action(name)
    def as_str(self):
        return self.sym() + "(" + self.underlying_state.as_str() + ")"

class InheritanceEffect(ModifiedState):
    def card_is_action(self, name):
        action = self.underlying_state.card_is_action(name)
        return True if name == "Estate" else action
    def sym(self):
        return "I"
    priority = 0

class QuarryEffect(ModifiedState):
    def card_cost(self, name):
        action = self.underlying_state.card_is_action(name)
        cost = self.underlying_state.card_cost(name)
        return max(0, cost - 2) if action else cost
    def sym(self):
        return "Q"
    priority = 1

class State:
    def __init__(self):
        self.raw = RawState()
    def upper_substate(self):
        substate = self.raw
        while substate.has_outstanding_effects():
            substate = substate.next_state()
        return substate
    def card_cost(self, name):
        return self.upper_substate().card_cost(name)
    def card_is_action(self, name):
        return self.upper_substate().card_is_action(name)
    def as_str(self):
        return "%s: Estate $%u, Village $%u" % (
    def play_quarry(self):
    def unplay_quarry(self):
    def inherit_village(self):

print "1. Play Quarry Before Buying Inheritance:"
s = State()
print "\t" + s.as_str() + "\n"

print "2. Buy Inheritance Before Playing Quarry"
s = State()
print "\t" + s.as_str() + "\n"

print "3. How Not To Do It"
InheritanceEffect.priority = 2
print "\t" + s.as_str() + "\n"
InheritanceEffect.priority = 0

print "4. Play Two Quarries..."
s = State()
print "\t" + s.as_str()
print "...Then Remove One From Play"
print "\t" + s.as_str()

Here's the output:
Code: [Select]
1. Play Quarry Before Buying Inheritance:
        Q(I(G)): Estate $0, Village $1

2. Buy Inheritance Before Playing Quarry
        Q(I(G)): Estate $0, Village $1

3. How Not To Do It
        I(Q(G)): Estate $2, Village $1

4. Play Two Quarries...
        Q(Q(G)): Estate $2, Village $0
...Then Remove One From Play
        Q(G): Estate $2, Village $1

The first two cases demonstrate both orders of playing Quarry and buying Inheritance. They both produce the correct results (which are identical to one another), and they both result in state Q(I(G)) due to the priority used to decide the evaluation order of the two types of effects. The third case temporarily mucks around with the priority ordering to show that evaluating the effects in the order I(Q(G)) produces a different (incorrect) result. Also, the last case demonstrates that the model doesn't have the issue you were describing with playing multiple Quarries and then removing one from play.

Rules Questions / Re: Band of Misfits as Reserve Cards
« on: October 07, 2018, 02:06:14 am »
I play BoM as Embargo. I follow the instructions on Embargo top to bottom (like I'm pretty sure I should) get +$2, then trash the Embargo that is actually a BoM. Since the card is no longer in play, do I get to put an embargo token on a supply pile? The BoM left play, and BoM doesn't tell me to put embargo tokens on things. Logic tells me I don't get to put an embargo token on anything. Am I wrong? And if so, why?

Imagine that, as the first step of playing a card, you start by copying its on-play ability onto a Post-it. Then, you follow the instructions on the Post-it. If the text on the card changes while you're playing it, who cares? You're not looking at the card; you're following the instructions written on the Post-it. Then, when you're done playing the card, throw the Post-it away.

Now, imagine that you want to save trees and ink, so, instead of writing stuff on Post-its all the time, you do the same thing mentally.

Thare are rulings (even in the rulebook) saying that when you trash a BoM-as-Fortress, the when-trash-ability of the Fortress is resolved, even though you actually resolve it when the Fortress is a BoM. So this supports the rule that you always resolve a triggered ability.

This doesn't affect BoM as a card with a when trash ability because when you trash the card with a when trash ability, two things are happening at the same time, the when trash ability triggers, and BoM loses all of its abilities it got from being played as an action card from the supply. You can simply choose to resolve the when trash ability before BoM loses it.

That's not a "two things happen at the same time" scenario. There's only one thing happening there: a card is trashed. As part of being trashed, it stops being in play, so if an effect is causing it to have abilities as long as it's in play, it stops having those abilities.

Dominion General Discussion / Re: Complexity of Dominion
« on: October 06, 2018, 01:29:08 am »
For a concrete example of why you have to think in those terms, consider this:
  • You play Quarry A
  • You play Quarry B
  • You buy Bonfire and trash Quarry A
  • You buy a Village
How much does the Village cost when you buy it? $1. You cannot reach that conclusion by reducing the cost of Village by $2 (minimum $0) when you play Quarry A, then by another $2 (minimum $0) when you play Quarry B, then increasing it by $2 when you remove Quarry A from play.

The only correct option is to think in terms of evaluating the cost of Village at the moment when you buy it, using an algorithm which is dynamically adjusted by the course of play.

I described Q(x) as a state where the costs of actions are $2 less than they are in x. I would have hoped it was clear that moving one Quarry out of play would cause one Q to be removed from the evaluation order (i.e. the game state would change from Q(Q(G)) to Q(G)), so the resulting final state would evaluate an action's cost by applying a single cost reduction of $2 to the printed cost. It would say Village costs $1. I'm not sure whether something I described actually led you to understand that I'd be trying to add $2 whenever I removed a Quarry from play, but that's not the case.

I think I understand the model you're describing. It's different from how I think about it (which is closer to the layer system described in M:tG's rules), but I think it provides the same results, and it's nice that your algorithm imposes an implicit dependency order on evaluations so that the "intuitive and obvious" result is the only one you can arrive at.

Dominion General Discussion / Re: Complexity of Dominion
« on: October 05, 2018, 01:08:24 pm »
Both of those are ongoing effects, which will compound in the obvious way: once you've Inherited an Action, all of your Estates cost $2 while a Quarry is in play. The relative ordering of buying Inheritance, taking ownership of the Estate and playing a Quarry is unimportant.

First, I think you may have typoed this statement. All your (Inherited) Estates cost $0, not $2, while Quarry is in play. That's the "obvious way" they compound, right?

Second, nowhere was I claiming that the order of buying Inheritance and playing Quarry had any effect on the resulting state. In fact, I'm claiming the exact opposite: the order in which the effects come into being cannot matter; the result must be the same either way (your Inherited Estates cost $0). And in order for that to be the case, there must be an understood evaluation order.

Say Q(x) represents a game state like x, but with Quarry's effect applied. I(x) represents a game state like x, but with the effects of Inheriting Village applied. G is a game state where everything is as printed.

If you evaluate Q(I(G)), you get $0 Estates. If you evaluate I(Q(G)), you get $2 Estates. In order to get a consistent result of $0 Estates, you should only ever be picking Q(I(G)) whenever you have to evaluate both of them.

Now, say you're at G, and you play Quarry. You're now at Q(G). Now Inherit Village. You can't just apply I(x) to the current game state, or you end up at the incorrect I(Q(G)) and you have $2 Estates. Instead, you have to insert the evaluation of I at an intermediate point in order to get Q(I(G)). In other words, you need a rule that says I(x) effects to be evaluated inside the parentheses of Q(x) effects.

Donald says there'd need to be a "timing" if you had both cost increasers and cost reducers. Presumably, that's because cost reducers say they cap the result at $0. Say B(x) is the effect of Bridge and J(x) is a hypothetical effect that increases all card costs by $1. If you evaluated B(J(G)), then Coppers would cost $0 because the effects canceled out; if you evaluated J(B(G)), then Coppers would cost $1 because the cost increase was not "visible" at the point you evaluated B, so it capped at $0. Presumably, you'd always want Coppers to cost $0 in this case, so you'd need a rule that says increasers have to be evaluated "before" (inside the parentheses of) reducers.*

I'm saying that the exact same thing is true with Quarry and Inheritance: the order of evaluation matters. In either case, you can say that the result is "obvious," but you'd still following a rule (perhaps an obvious, intuitively understood rule) to get the result, even if you didn't realize it. And everyone else would need to follow the same rule in order to get the same result you did.

* Or else say that the capping at $0 isn't part of B but something that gets evaluated after all the cost-modifying effects, which I recall was also considered as an option.

Dominion General Discussion / Re: Complexity of Dominion
« on: October 05, 2018, 12:59:45 am »
This is only possible due to the particular set of effects. If I had both "cards cost $1 less" and "cards cost $1 more" then you'd need timing.

I'm pretty certain that having both Quarry and Inheritance means you need "timing" as well. Inheritance's effect modifies types. Quarry's effect cares about types. I'm not aware of a way to evaluate them other than one at a time, and the order you choose matters. One way (the correct way, I believe) makes your Estates $0 because the modifications made by Inheritance's effect are visible to Quarry at this point; the other way makes them stay $2 because Inheritance's modifications are not visible to it.

Dominion General Discussion / Re: Complexity of Dominion
« on: October 04, 2018, 05:47:16 pm »
One section in Magic's big rules document is on "interaction of continuous effects," which explains what order to evaluate abilities that do things like change an object's color or power/toughness. It can matter what order you apply these in, so the game's rules explain how you can determine that order.

Dominion also deals with such effects, albeit in much smaller quantities. The order in which they're applied can matter in Dominion, too. For example, you have to apply Inheritance's type-changing effect before you apply Quarry's cost-changing effect, because the latter depends on the former. But there's no rule that explains why you evaluate them in that order, or that you're not allowed to evaluate them in the other order. There's not even an official name for that type of effect. It's just a thing people seem to know intuitively.

I guess my point is that there are things that are not explicitly covered in Dominion's rules documents, but are nonetheless necessary concepts for precisely describing Dominion's rules (and thus contributing to its complexity).

Dominion: Renaissance Previews / Re: Your reviews of the previews
« on: October 04, 2018, 09:59:00 am »
Thr hndrd thrt mlln ppl spk smtc lnggs rnd th wrld, hw hrd cn t b?

What are osmotic languages?

Most of the obscure bugs are known about, and are just a much lower priority than the other work. And in most cases, what people would encounter arenít actually bugs at all, so I donít think this would help. They donít have the problem of not enough things to do.

Really?  Wow.  I thought that Rio Games bought Dominion and I was assuming that under that corporate umbrella it made sense. 

So is shuffle IT independent of dominion, or just like a third party contractor?

Shuffle iT is Stef, he has some kind of a contract with RGG.

I thought it was Stef and SCSN?

I think he said no.

It's B. You are at the window of time for resolving when-trashed abilities for the cards you trashed to Chapel. But then Rats shows up with a new window of time, resolving when-trashed abilities for trashing Rats. You handle that first and then resume resolving the "when-trashed for Chapel" stuff.

Thanks! I was hoping it was that one. So it sounds like Chris is me is correct regarding a stack.

I'm sure this has been answered at some point years ago, but... what happens here?

Buy Sewers.  Use Chapel to simultaneously trash a Catacombs and an Estate.  You now have 3 pending triggered effects: Catacombs, Sewers, Sewers. Decide to order a Sewers effect first.  Use it to trash a Rats.  This produces another pending triggered effect.

Which is true at this point?

   A) You may order the Rats, Catacombs, and Sewers effects any way you like.

   B) You must resolve Rats' effect immediately after the instruction that triggered it, so you cannot resolve the Catacombs or Sewers effects until after that.

   C) You must resolve the first set of effects (Catacombs and Sewers) before you can resolve the new one from Rats. (In which case there would have to be some follow up questions to about what that actually means.)

   D) Other.

In other words, and more generally, is there only one set of pending triggered effects at any given time, or can there be multiple sets, which have to be handled in a certain order themselves?

Dominion: Renaissance Previews / Re: Renaissance name BINGO
« on: September 27, 2018, 11:31:41 am »
Maybe the next Dominion expansion is Dominion: In Space, to avoid this problem.

Looking forward to Star Port, Mars Colony, Moon Rocks, and Space Explorer.

Rules Questions / Re: Order of Resolution with Imp and Royal Carriage
« on: August 30, 2018, 08:42:54 pm »
In other words, I assumed that the confusion arose because Imp happened to have "play a card" as its final instruction, but since it's obvious that "play a card" has to behave the same in all instances, Golem and TR tell us that it's always part of resolving the original card.

Dominion doesn't support tail call optimization.

Pages: 1 2 [3] 4 5 ... 12

Page created in 0.087 seconds with 19 queries.