The Ultimate Card Game

_playground
My attempt at creating a deckbuilding game where players make the cards
Published

September 12, 2024

Game Setup/Layout

Traditional Deck + Hand style. How many in a hand? I’m thinking 7.

Players start with no mana, but can spend from life

Life: Players start with 16 life Life can also be used to cast cards, which is basically the only way to cast cards before “factory” type cards are on the field or via 0 or negative cost cards.

During the “block” phase of an attack, the blocking player can either cast 0 (or negative) cost cards, or cast cards using life. This makes cards effectively “instants”, allowing players to bring stuff on the field at the opponent turn, but at some price, as the cards must be either < 0 cost or paid with life.

Cards play in their “stunned” state. AkA: cards cannot attack first turn after playing (Might change if I adjust how cards do damage)

Card Design

Round up (?)

Rarity system:

Legendary: 32 + cost

Epic: 16 + cost

Rare: 8 + cost

Common: 4 + cost

30 cards in a deck

Card ratios must be: (minimum 15/30 cards, probably 30)

2 legendaries, 4 epic, 8 rare, and 16 common for 30 total. You can have more, but you must maintain that ratio.

Negative cost cards give player production points to use, in addition to being instants.

Attack/defense:

5 card draws at the beginning of the turn: Can be used instead to the card effect.

Cards:


Card name, mana cost

Poorly drawn image

Detail text/keywords

Flavor text

————- Attack Power/Health/Production power

Alternate Card design:

Card Name

Either under or next to name: base costs + addons – (negative production cost increaste) – rarity cost add = mana/production cost

attack/ power, vertically down the left side of the card

(number) Card trait

Flavor text

Card “Shop”

Traits cost Trait Number * N where N is the total amount of traits

Offensive Aspects:

Attack: X Give this card the ability to attack, and 1 + X attack power. Cards need at least one attack to be able to block.

Multi-Target-Attack: X attack more than one target/structure, to a total of 2 + X targets. Each attack/block/hit encounter is treated as an individual encounter — this multiplies damage essentially. Alternative description (same function): this card makes multiple attacks against multiple targets, and recovers health between each attack.

Multi-Blocker-Attack: X This card, when attacking a target, is treated as actually doing 2 + X attacks toward a target. Unblocked attacks go through. Each encounter with a blocker is kept seperate.

Goals: Replace mtg creature tokens, mtg evasion mechanics (keywords flying, horsemanship, unblockable, trample, etc)

https://mtg.fandom.com/wiki/Evasion_ability

AoE: X: 1 + X This cards deals it’s attack damage to 1 + X other blockers.

Idea: AoE has reversed cost. It targets ATK other targets, dealing some calculation of damage.

Totally not banding: Collective attack: Base + X. Allows for pooling of attackers up to 1 + X other attackers. Counts as one attack, even to multi block. Attacking player can choose how the damage is distributed to the cards in the merged attack. Merged attacks share offensive traits.

Double Tap: 1 + ??: Card has does a second attack which happens before the first one in an encounter, doing extra damage. Opponent can pay some porportion of production to remove some proportion of double tap from a card.

Goals: Shield-remove, replace mtg keyword deathtouch.

Defensive Aspects:

Health: Base + X Give this card health trait and 1 + X hit points. (note: If a card has no health, it disappears at the end of a turn).

Multi Block: 1 + X block more than one attacker of a target, per target blocked, up to 2 + X

Multi-Target-Block: 1 + X: Block for more than one card, although only one attacker per target, up to 2 + X (stacks with multi block with

Anti-AoE: Base:1 + X add this cards health power to hower many

Merged Block: Base:1 + X: This card can do a merged block, which is mostly treated as one block. The health of merged blockers is “pooled” where they all share damage. To kill all cards in the merged block, and attacker must outdamage the pool. (Should merged block allow merging of traits?) (and should merged block allow blocking multi-block?)

Idea: No merging of traits. Stacks with other defensive traits. Allows for multi-blocking, of one card, but doesn’t

Collective Block: 1 + X. If multiple cards are blocking one card, they gain a “health” pool, where they all share damage. To kill all cards pooling cards, they must deal enough damage to overcome the “health pool” This card can pool with X cards. Cannot health pool with cards with greater health than itself. Blocking is treated as a merged block, where something like “damage multiplication” can split up the health pool again.

Do I want collective block to merge traits as well?

Shield: X: Card gets a seperate “shield of X hit points. If they are damaged by one attack/encounter, it doesn’t rollover into their HP. Opponent(s) can pay production points to reduce the shield value. Shield points can also be spent to reduce active effects

Goals: Replace mtg keywork indestructuble. Replace clash royale shield mechanic Maybe replace hexproof with a resist spell mechanic?

Misc Aspects:

Integrate: X: X Pay N * N production points to combine this card with another card, stacking all values. Integrated cards count as one card, even when targeted by another integrate card, but the calculation becomes N * (N1 + N2)

Goals: Replace mtg archetype voltron, mtg keywords equip, fortify, enchant, mutate, merge, meld

Problem: Polarity reversal doesn’t effect integrate. Offensive/defensive equivalent? : Debuff

Solution: Pay some amount of production to dissasemble integrated cards. Don’t like, as it kinda defeats the points of “green” decks. Maybe: Opponent can pay production to keep integrate card integrated

Debuff: X: Pay N + N – X points to apply a debuff to a card with value N, where all the aspects of this card are subtracted from that card. Actives and Curses carry over.

How to remove?

Active Traits:

Idea: Cards with active traits can’t block. This forces them to be seperate structures players must defend.

Mana Generation: X: X * N . Generate mana for casting things

Give opponent production points: Goal: replicate elixir golem mechanic from clash royale. Problems: Too weak. Decks which use less or no production won’t be affected by this. Needs an alternate ability along with give opponent production points, such as giving opponent another active.

Idea for both: decrease cost of the fibonacci sequence. This appeals because it has a fixed cost.

Stealth: Base:1 + X Take 1 + X cards off the field… and then put them back on face down in new spots. Stealthed cards are revealed when they take action, attack, or are dealt damage. Stealth can also be used to move around cards during the blocking phase.

Cost:

Goal: Twofold: Obscure cards on board, but also allow to move cards in blocking (or attacking?) phases around. Blue idea, playing with information

Necromancy: Base:1 + X Search 1 + X through the bottom of the deck/graveyard. Cast a cards base cost, rather than their total creation point cost.

Goal: Play the roal of black deck, bringing cards back from the dead. Replace mtg https://mtg.fandom.com/wiki/List_of_Magic_slang#Recursion recursion

Tutor: Cost Base:1 + X, look at the top X cards of your deck and show them to your oppnent. You can cast directly from these cards. Problem: Recursive scry/tutor too op

Goal: Play the role of blue deck, increasing options player has.

Polarity Reversal Base: X: Change offensive abilities to their defensive equivalents defensive and vice versa, of a single card, up to X * N of a single trait

Goal: Buff and nerf at the same time. Can be used to reduce health

Counterspell/reflect: Base:1 + X: You “take control” of 1 + X “spell” aspects targeting individual things. Problem: How will counterspell and react phases work? Do I want this? It adds extra complexity to casting. Idea: Counter either 1 + X damage/protection/production (distributed) or 1 + X spell effects targeting stuff.

Goal: play the role of the blue counterspell, while also allowing them to deny production points

Aspect Enhancement: X: Enhance any aspect of card(s) up to X. Costs (initial aspect cost) + X * N production points.

Gain Life: X: X and pay X production points to do so

Also want active?

Triggers:

Familiar friends: X: When you play a card with similar trait and valuet and value appears, including this specific trigger + active, Do up to 1 + X of an active trait, based on the common traits and values that are shared.

Note: Too op if it includes health, attack, and friends… but is it?

Damage dealt via attacking or blocking (including or excluding overkill): X : X

Damage taken (including or excluding shield?): X : X

Goal: Replace elixir golem clash royale

Card enters play: X: X * N

Instead of card draw: X: X * N

Pay production points: I want this mechanic, but do not know how to balance it

Getting attacked by X cards: X: X

Lifegain: X: X

On card draw:

Curses:

Negative managen/production: Take X mana from the player every turn, or if they can’t provide that, life. In exchaninge, offer X * N card creation points for players to use. Essentially for each negative mana point, they can add one of each trait for each negative manapoint during the turn. Must be paid before the attacking step.op starting slowing down, I switched to a Linux based operating system, in an attempt to make it faster, using knowl

  • Should it die if no mana given?
  • Or should it take from life?
  • What about production? Probably not effect actives… but I like the idea of cumulative upkeep for a spell tower.

Day/Night: Opponent gains control of this card during their turn, except the card doesn’t have full stats. It only has X stats, X for each trait in place. It also gains X stats in the opposite section of held traits. So 4 hp, but 0 attack, but 2 x becomes 2 hp, 2 attack.

How to handle one time spell cards? * Day/night results in the card staying alive, even when it has 0 or less health * Opponent gets a portion of spell effects * Daynight straight up doesn’t affect actives ← I like this one

May need different name, mtg already has daynight. Traitor? Betrayal? Doublecross? Doubleagent?

Card on field goes to hand, in exchange for a card that has a base cost less than Cost – X base cost. If there is no such card, then this card goes to the graveyard. You can keep the card on the field in exchange for a sacrifice of at least Cost + X * N from your hand or the field, straight to the graveyard.

  • Beginning or end of turn (it would be nice to bounce immediately)
  • How to have card be persistent?

At beginning of turn, or when card is attempted to be played, take it off the field for a card in hand with base value < cost – X, or sacrifice card from field with cost + X?

AKA: some kind of bounce curse

At beginning of turn or before played, take cards on the field that are worth more/less than something off the field and put them back into your hand. If you cannot do this, because of a full hand or because of the

On/before turn, bounce cards value back to hand. If you can’t do that, then bounce this card, exchanging it for something in your hand with less than X. If can’t do that, then graveyard.

Siege/Battle: X: X card is cast as an X health card under an opponents control. They must defend it, if the attacking player manages to kill it, then it becomes the normal card

  • Allow spell damage to kill the battle?

Goal: replace siege/battle from mtg

Two ideas:

Half of cards in graveyard go to exile, the other half go to the bottom of the players deck. Either completely random, pseudorandom, or complete player choice. Note: why is this better than multiple rounds? This could also be a seperate gamemode.

Potential keywords:

Recursion: X : X Pay Cost – X to cast this card from your graveyard

Buyback: X : X Pay Cost – X in addition to casting this spell to return it to your hand when you cast it.

Sacrifice: X : X sacrifice cards with base values up to X to decrease this cards cost by X

See also: MTG emerge

MTG Surge

MTG rebound

MTG storm: Pay X to duplicate the on-cast effects of this card?

Combat

Defensive player sets up layout at the end of their attacking turn, and cannot change it or reoganize it.

Attack player sets a layout, and then either chooses to make the first move, or to pick how the connections work.

Played on something equivalent to a hex grid, but not an actual hex grid. A square grid where each row is offset by ½, and touching squares are considered connected.

Moves cards can make:

Move: Move onto an adjacent card.

Swap: Replace adjacent card with this one

Pull: Pull connected card under this card.

  • Pull into spot, and move this card out of the way?

Push: Move card out of way? Maybe can push in place to move a card to an adjacent spot

Spawn: Spawn new piece in a blank spot adjacent to your own pieces, and only your own pieces

All of these moves can be done over a chain of your color’s cards, including attacking/defending ones.

Stacked cards are considered as attacking eachother, and cannot move on/off, but they can be moved over.

The attacker round ends immediately when a player stalemates is unable to make a swap, push, or pull move. ???

One hive rule (from hive): Players cannot make a move that results in their being two groups of cards.

https://en.wikipedia.org/wiki/Hive_(game)

So… how does a player actually do damage? And how should collective defense/attack and multi attack/defense work?

Two ways I am thinking of doing damage: Getting a card onto/past all defenders

Or creating a chain that connects it past defenders. Maybe like 1 damage for each card in the chain?

How should cards launch an attack against valuable cards? Surrounding them? Building a chain which accesses them?

Should cards being on top or below matter? Maybe? Only on top cards count for purposes of a chain, and also can surround other cards.

But also: How about targeting production towers?

Anyway, this is good, but I need to calculate the fairness of this game. I think the only way to calculate fairness is to write a program that solves this game.

Combat ends immediately where a player cannot make another move (either attacker or defender).

What about drawish rules, like 3 fold repetition?

Programming This

I think I need to convert this to a python program that will solve any set of rules I give it, in order to actually ensure my game is fair., I’ve done some testing on my own, but I don’t think just one person can play chess.

So… how can I make a hexagonal grid in order to calculate solutions to my game?

I really, really like the idea of representing hexagonal coordinates as a cube.

Pseudocode of what I want:

HexGrid = 2d array

CheckLegality: Function that checks if a hex grid config is legal (all nodes are connected)

GetMovesJump: Get Possible moves of the Jump on top of another card type

GetMovesShove: Get possible moves of the shove card out of the way type

GetMovesPull: Get possible moves of the pull card under type

GetMovesSwap: Get possible moves of the swap type
[moonpie@lizard flux-system]$ kubectl get pods -n flux-system
NAME                                       READY   STATUS    RESTARTS   AGE
helm-controller-76dff45854-g8tff           1/1     Running   0          3h4m
kustomize-controller-6bc5d5b96-sdzql       1/1     Running   0          3h4m
notification-controller-7f5cd7fdb8-v9672   1/1     Running   0          3h4m
source-controller-54c89dcbf6-kjjsb         1/1     Running   0          3h4m
traefik-6f6c897d6-j7g8z                    1/1     Running   0          9m34s
GetWin: Get the amount of damage a winning attacker would do

I would also need several other functions/features, like I would have to be able to detect the


height = 20
width = 20

HexGrid = [[[0, 0] for x in range(width)] for y in range(height)]

print(HexGrid)


def CheckLegality