Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines
(2 edits)
1. COST ARROW ICON: Nonbolded text before the cost arrow icon must be paid and/or resolved in full before the text after the cost arrow icon can be resolved.
2. INITIATING ABILITIES: Determine the cost (or costs) to play the card or initiate the ability and the player’s ability to pay them, taking modifiers into account.

I would argue that in the 2. Initiating Abilities, the sentence "Determine the cost (or costs) to play the card or initiate the ability and the player’s ability to pay them"

This would take "Gauntlet Gun" (23005) into account that player actually can pay the cost.

Hi @Average4PlayersGame,

Thank you for your response.

To clarify my point, let me provide an example:

Imagine you are playing as Hero Spider-Ham “30001a” with the upgrade Clarity of Purpose “31029.” In this scenario, there are no ‘toon’ counters on your hero, and you only have one card in hand: Hogwashed “30004.”

Given these conditions, do you think you would be able to play “30004”?

Now, let me explain how this works in the game engine:

The script for “23008” is as follows:

def repulsor_beam(effect: 'Effect', message: 'Message.WhenPlayerInTurn') -> None:
    this.DealDamage(effect.targets, 4, effect)

return [
    AbilityFactory.WhenInYourPlayTurn(
        AbilityType.HeroAction,
        repulsor_beam
    ).SetPlay().SetLabel('attack')
    .SetCostFunc(CostFunc.Counter(Select.From(None, CardFinder(name="War Machine")), 1, 'ammo'))
    .SetTarget(Enemy),
]

In this case, the game engine checks all SetCostFunc to determine if the card can be played. If you don’t have any ‘ammo’ on “War Machine,” the condition is not met, and the card cannot be played.

Additionally, the engine cannot determine if you are paying for this card using “23005” or any other means, which is why it doesn’t work as you mentioned.

If we were to update the code to this:

def repulsor_beam(effect: 'Effect', message: 'Message.WhenPlayerInTurn') -> None:
    if remove 'toon' counter on "War Machine":  # Add this condition check
        this.DealDamage(effect.targets, 4, effect)

return [
    AbilityFactory.WhenInYourPlayTurn(
        AbilityType.HeroAction,
        repulsor_beam
    ).SetPlay().SetLabel('attack')
    .SetTarget(Enemy),  # Remove `SetCostFunc`
]

It could work as you suggested. However, since “23008” follows a standard “COST ARROW” description, we believe that updating it to the second code is not a good idea.

Looking forward to your thoughts!

Yeah, I see your point, the code could not actually function the way game supposed to.

Since declaring to play a card consider the future (player's abilities to pay the cost) that no code could predict.

Only make sense to us Human.

I have dived into the RRG 1.6 and found something that might work. (I don't know how to code at all. I am just good at logical thinking)

in RRG 1.6 page 23 under INITIATING ABILITIES section

When a player wishes to play a card or initiate a triggered ability, that player first declares their intent. Then, the player checks the following conditions in order:
1. Check play restrictions: can the card be played, or the ability initiated, at this time?
» » If the card or ability specifies one or more targets, check that it has at least one valid target. If the card or ability does not have at least one valid target, it cannot be played or initiated.
2. Determine the cost (or costs) to play the card or initiate the ability and the player’s ability to pay them, taking modifiers into account.

If both conditions are met, follow these steps in order:
3. If playing a card, the player places that card faceup on the table in front of them. (This card is not in play.)
4. Apply any modifiers to the cost(s).
5. Pay the cost(s). If this step is reached and the cost(s) cannot be paid, abort this process without paying any costs.
6. The card commences being played, or the effects of the ability attempt to initiate.
7. The card is played or the ability (if not canceled in the previous step) resolves. The card enters play or, if it is an event card, its effects resolve and it is then placed in its owner’s discard pile.
• If any of the above steps would make the triggering condition of an interrupt ability true, that ability may be initiated just before that triggering condition becomes true.
• If any of the above steps would make the triggering condition of a response ability true, that ability may be initiated immediately after that triggering condition becomes true

The number 2 suggests that players must review themselves that they can actually pay the cost.

The cost paying step is actually number 5 that allows players to generate resources (using Gauntlet Gun for War Machine, or Clarity of Purpose for Spider-Ham in your example)

or the hard way I suggest that you could write a code to detect Gauntlet Gun for War Machine Card and detect CoP for Spider-Ham. The CON is that when the new card is released, it would be hell to keep adding card that it should detect.

or another way is that, add a little extra 6.5 in between, "If all cost is not paid, abort the process and rewind to before card selection"