This is the game Evilcon 2024. I originally made a first draft of this game in Game Maker for GMC Jam 51. I am now remaking it in Godot and expanding massively on the concept.
Some of the below notes are revised from my original design document. Most of it has been edited since then.
(Note: It’s now 2025 and I’m still working on this. Obviously the name is no longer “Evilcon 2024”, not least of all because it’s no longer that year. But also, I was never super attached to the name to begin with; I’ll probably come up with a cutesy acronym for the convention)
You play as Ravengirl, one of the sidekicks to well-known superhero and vigilante detective Ravenman. A convention of supervillains is meeting at a local hotel / conference hall under the guise of an International Clock Polishers’ Association, to discuss some unspecified evil plan. The rumor is that the fabled King of Crime will be there, and Ravenman wants to identify and arrest him.
You will go undercover as the hotel’s cleaning staff to infiltrate the evil convention and identify their secret leader. To do so, you must learn to play Evil Cards, the card game loved by supervillains everywhere.
Once you earn the trust of the supervillains, you’ll be able to tackle an Elite-Four-style final boss gauntlet, where you must face four enemies in a row without changing your deck in between. After that, you learn that Ravenboy (Ravenman’s other sidekick) has been secretly running the criminal underground and is the King of Crime.
Possibly multiple endings: You can choose to arrest Ravenboy or
work with him as a criminal?
The main game takes place as a top-down RPG-style world (think old Pokemon games). The entire game takes place in the hotel at which the conference is taking place. Most characters you meet will want to challenge you to a game of Evil Cards.
There are no consequences to losing a game of Evil Cards. If you win, you get some money and a common or uncommon card from the opponent’s loot pool. Additionally, every villain has secondary goals, and if you meet a secondary goal, you get a rare card associated with that goal. These rare cards are renewable and can be gotten multiple times. On top of that, if you’ve beaten every secondary goal (not necessarily in one card game, just cumulatively), you get an ultra rare card from that villain. The ultra rare cards are non-renewable and can only be gotten once from each villain. There is only one copy of each such card in the game, and they will never show up in the shop.
There will be a non-card-player NPC who rewards you for extremely difficult achievements. You can complete these achievements in any card game against any character and then redeem them with him at a later time. When you achieve one of his goals, the game will likely pop up and inform you in the corner or something. Some ideas for his achievements: (Some of these might also, on a smaller scale, be secondary goals for other NPCs)
- Deal X damage to the fortress in one turn.
- Win a game in the first X turns.
- Win a game in the first X turns, using Destiny Song.
- Win a game without using any Effect cards.
- Reduce enemy fort to zero using only Effect cards. (Doable with Pill Capsule, Life Force Cannon, etc.; might add more support for this strategy; phrased this way to carefully carve out Destiny’s Song strats as forbidden)
- Win a game using at most 4 EP each turn.
- Win a game using only Cost 2 or lower cards.
- Achieve a hand size limit of eight or more.
- Draw a total of eight cards in one turn. (Not necessarily during the draw phase, so Pot of Linguine or Boiling Pot of Water can help with this)
- Negate the effect of X Hero cards in one game. (Open question: Does blocking with a Ninja count as negating, or do only hostage cards suffice? I’m inclined to say blocking counts, but it is more work to program it that way.)
- Have a total of at least X Minions in play at once.
- Have a total of at least X Effect cards in play at once.
- Have at least 6 of your own cards exiled in one game.
- Successfully activate Ultimate Fusion.
- Successfully activate Team Cobra.
- Successfully power up one Wimpy with three Wimpy Smashes.
- Have 20 EP at one time.
- Note: I think 36 is the legit maximum with a deck fully structured around EP-generation. (36 = 8 Regular + 3 from Nuclear Power Plants + 3 from Nuclear Fusion Plants + 18 from Deals with Devil + 4 from Berry expiring with good timing). If we assume perfect Mystery Box luck, then you can get to 54 with three more Mystery Boxed Devil Deals. This isn’t really relevant to gameplay, but it’s amusing. I wonder if you could get higher with good draw from Pasta-themed cards.
- Have 11 EP per turn.
In addition to the achievements, there may be an NPC who lets you play “variants” of the main game against him, as a sort of challenge mode. All achievements are disabled in variants (since variants trivialize a lot of the achievements).
Variant ideas:
- Both players’ fort defense is insanely high
- Both players’ fort defense is insanely high, and Destiny’s Song is forbidden
- All cards cost 1 EP to play
- Both players start with completely randomized decks.
There are basic shops that sell common / uncommon cards for money. There may also be trading-style shops where you can trade specific common / uncommon cards for rarer cards. Some rare cards might only be obtainable in this way.
You may sell cards to the shop, except ultra rare cards. Ultra rare cards are non-renewable, so you may not sell them.
+Addendum: Maybe you can sell them, and if you do, then you can get another copy from the original NPC that gave them to you? Could be a decent late-game money farm.+
- Probably some RPG-style fetch quests.
- Some basic overworld puzzles like ice-sliding puzzles or block-pushing puzzles.
- Ravengirl
- The protagonist. Ravenman’s sidekick. Has no special powers but is a decent martial artist.
- Ravenman
- Prominent superhero detective. Has no special powers but is a master martial artist.
- Ravenboy
- Sidekick of Ravenman, secretly the leader of Evilcon. Has no special powers but is a decent martial artist.
- Flying Brickman
- Super-strong superhero capable of flight; a symbol of peace and justice. See also: Dr. Badguy Doomcake.
- King Cannoli
- Count Carbonara’s arch nemesis.
- Squaredude and Circlegirl
- The first to overthrow the Icosaking in Geometropolis.
- Prisman
- The hero who overthrew the Icosaking in Prismania.
- Plumberman and Plumberman’s Brother
- Two ordinary plumbers from Queens. One day, they were on a routine call fixing a drain pipe, when Bristlegaze emerged from the bathtub drain. The two defeated Bristlegaze and, somewhat reluctantly, became heroes overnight. Real names: Mar and Lou. They do not have secret identities and do still work as plumbers on their off time. No special powers, but they use a variety of plumbing instruments in cartoonish ways to fight.
- Clueless Man
- Believes he’s a hero and tries to do the right thing, but somehow it never works out.
- Wall Golem
- Hero for hire, does the right thing but has low intellect.
- Team Cobra
- Formerly minions to the Venomatrix, but they turned good a short time ago. The Evilcon folks haven’t had time to update their playing cards, so they’re still Minion cards.
- Destiny’s Singer
- A legend among heroes. His songs can rewrite reality. Was completely undefeated among heroes, but suddenly disappeared one day about ten years ago. Despite every villain claiming credit for the kill, no one knows who or what did him in.
- Minionman
- Gimmick villain obsessed with armies of low-level
Minion cards. Minionman is the first character you face in the
hotel and will later give you the Minion Stamp once you raid
his Minionmansion.
- The Minionmansion is a large tower, where you must face his minions in sequence. Normally, you’d have to face several, but the upper floors of the Mansion have been exploded by Barry’s accidental dynamite. So you only have to face a couple.
- Icosaking
- Supervillain from the geometry world. Holder of
the Geometry Stamp, operating in a tower of geometry with his
loyal Icosaklones. Believes he’s the rightful king of both
Prismania and Geometropolis.
- The Icosatower is a puzzle-based tower full of block-pushing puzzles.
- Berry
- Barry the Brainless Overlord’s much more competent
sister. The true leader of the factory / robot lair, and holder
of the Engineers’ Stamp.
- The robot lair (secretly run by Berry but publicly managed by Barry) consists of stealth sections, where Ravengirl must avoid a variety of sentry bots.
- True Ninja Master
- The ninja master over Dr. Meguruku. Holder
of the Silent Stamp and true leader of the ninja lair.
- Hides away (with Dr. Meguruku) in a papercraft town resembling Rabbit Hole. Only reveals himself after you defeat Dr. Meguruku and find his hiding place.
- Giggles Galore
- Clown boss. Leader of the clown lair and
holder of the Funny Stamp.
- Circus tent only allows admission if you’ve found his hidden mimes, who each give you an invitation.
- Count Carbonara
- Pasta-obsessed supervillain and holder of the Spaghetti Stamp. His minions are all sentient pasta-related foods taken from the pasta dimension. The Spaghetti Monsters that rule over that dimension are not happy about his intrusion.
- Venomatrix
- Human-sized queen bee, obsessed with replacing the human race with bees. Holder of the Insect Stamp.
- Catacomb Charmer
- Skeleton girl, was so obsessed with the undead that she decided to become one herself. Holder of the Graveyard Stamp out in the graveyard behind the hotel.
- Barry the Brainless Overlord
- Robot-obsessed supervillain
with unworkable evil schemes. He runs the robotic lair but
doesn’t have a Stamp. After you beat him, a doorway opens to
his sister’s factory.
- Right before the start of the game, he accidentally exploded some dynamite, destroying part of the Minionmansion and blocking one of the main corridors. The hotel staff finishes repairing the corridor right when you get the Minion Stamp. Additionally, they might repair the Minionmansion (for an optional post-game endurance test) after you beat the game.
- Dr. Meguruku
- Town physician who is secretly a powerful ninja. Guardian of the ninja lair. Once defeated, he will tell you how to find the True Ninja Master.
- The Mastermime
- Giggles Galores’ assistant, a silent mime in the clown lair.
- Milkman Marauder
- Milk delivery man by day, master thief by night. Often works for Count Carbonara but maintains a civilian identity to make a living.
- Beeatrice
- A human who has dedicated her life to the Venomatrix and seeks to make bees reign supreme.
The four villains you must face before meeting the King of Crime. Must be faced in order with no deck changes in betwee.
- Minionman
- Again but with his mask off and going by his real identity; he’s actually a powerful card player and just puts on the “Minionman” gimmick for show (TODO Do we need an ultra rare card for his unmasked variant?)
- Death
- The Pale Specter himself. He gets paid a hefty commission to serve on the Final Gauntlet, and he’s short on cash.
- Bristlegaze
- Weird alien floating eyeball thing. Bristlegaze
appeared randomly in a bathtub while Plumberman and his brother
were repairing it. They were able to defeat it for the moment,
but it keeps coming back. Bristlegaze’s true nature is unknown.
It has a variety of powers, including the ability to read minds
and telekinetically control nearby objects. It only
acknowledges and fights Plumberman and his brother, considering
no one else worth its time.
- Bristlegaze immediately recognizes Ravengirl despite her disguise, since it can read minds. However, it also doesn’t care. Its motives for attending the convention are unknown.
- ???
- ??? (We might just make Ravenboy be the fourth one if we can’t think of anyone else)
- Dr. Badguy Doomcake
- Just Flying Brickman in a paper-thin disguise.
- Maxwell Sterling
- Not a supervillain, just a CEO, but he gets invited to all of the important events anyway.
- Chris Cogsworth
- Not a supervillain, just cleans clocks and was disappointed to learn that the convention is about evil.
- Farmer Blue
- From Marty the Mole. There’s a farmer’s convention next week. He got the week wrong and showed up this week instead.
- B’aroni
- Barry the Brainless Overlord’s great grandson, a
time traveller with futuristic technology. Crashed into the
present day in a time machine and is hiding out near Barry’s
robot lair. For obvious reasons, he doesn’t want Barry or Berry
seeing him. Not a Stamp-holder, but is a powerful optional
boss.
- In the post-game, B’aroni finally fixes his time machine, and he offers to take you back to just before everyone was arrested (that way, we can have a post-game while you still get to wander around the pre-police-raid convention hall)
- Devil
- From Nail. A devil from the fiery pits who makes deals for people’s souls. Obsessed with meeting Death and heard a rumor that he was going to be at the convention.
- Maybe the boss from Mars God of War?
- Someone from Three Rules?
- Inquisitor from Suspicious City?
- Skunkman
- Doesn’t actually appear in game, but has a card and is mentioned as the reason that Ravenman cannot attent the convention himself.
- Human
- Maxwell Sterling
- Nature
- Turtle
- Shape
- Icosaking
- Pasta
- Count Carbonara
- Clown
- Giggles Galore
- The Mastermime
- Robot
- Barry the Brainless Overlord
- B’aroni
- Bee
- Venomatrix
- Beeatrice
- Ninja
- True Ninja Master
- Dr. Meguruku
- Undead
- Catacomb Charmer
- Death
- Farm
- Farmer Blue
- Demon
- Devil
- (Milk)
- Milkman Marauder
- (Hero)
- Dr. Badguy Doomcake
- (Hostage)
- (Maybe Minionman’s second appearance)
- (Factory)
- Berry
- B’aroni
- (Unplaced)
- Minionman
- Bristlegaze
- Chris Cogsworth
You first face a tutorial character (probably Minionman), who fights you and then, upon your victory, tells you about the stamps. You need to get all eight stamps and then face off against the Final Four.
THIS IS A DRAFT (3/25/2024)! Might modify it later!
- Minionman and his lair of minions
- Barry the Brainless Overlord (but it’s really his sister Berry who’s in charge)
- Dr. Meguruku and the Ninja Master
- Count Carbonara (and the Milkman Marauder?)
- Bristlegaze
- Catacomb Charmer
- Venomatrix
- Giggles Galore
The game proceeds on a turn-by-turn basis. The human player character always goes first, and play alternates from there. As a handicap, the CPU player always gets a +2 to their starting fort defense.
The two players are trying to raid each others’ forts. Whoever drops the enemy’s fort defense to zero first wins the game immediately. Both players start with five cards in hand. Each player’s deck must have exactly 20 cards in it.
A player’s hand limit is five, though cards can augment this. If a player should draw from his deck and is already at the hand limit, he does not draw. If a player ends up with more cards in hand than the hand limit allows, nothing special happens (this can occur if a card that was augmenting the hand limit expires, for instance).
A player’s turn starts with the Draw Phase. First, The player gains Evil Points, or EP for short. On the first turn, players get 2 EP each. On the second, they get 3, then 4, and so on up to a maximum of 8 EP per turn. Then the player draws cards. By default, he draws 3 cards per turn, though that can be augmented with effects. Again, if he’s already at his hand limit, he does not draw.
All Minions on the turn player’s side of the field attack the enemy’s fort. Generally speaking, this bypasses enemy Minions and goes straight for the fort. Each Minion, from left to right, deals damage to the fort equal to their Level.
All Minions on the turn player’s side of the field decrease in Morale by 1. This includes Minions whose Attack Phase was skipped for any reason.
A Minion whose Morale hits zero will expire and (usually) be removed from the field. This is not exclusive to the Morale Phase and can happen at other times if a card effect changes a Minion’s Morale, but it’s most common during this phase.
Any cards which “last X number of turns” tick down their counter and are discarded if the counter has hit zero. A handful of other cards also have effects that explicitly activate during the Standby Phase.
During this phase, the turn player can spend EP to play cards from his hand in any order he chooses. He can play any number of Minions and effect cards, provided he has the EP to do so. Cards are played one-at-a-time, and effects are fully evaluated before the next card is played.
The player’s turn ends. Any unspent EP is lost at this time. Some cards have special effects that operate during the End Phase.
Minion cards have a Level and a Morale. Level indicates attack power and Morale indicates how many turns, by default, the Minion will stay on the field before moving to the discard pile.
Effect cards have an effect. Effect cards are further subdivided into Instant, Hero, and Ongoing effects.
- Instant effects have an immediate effect on the game board and then move to the discard pile as soon as they’re done.
- Hero effects are like Instant effects but generally involve sabotaging or attacking the enemy’s Minions. There are several cards in play that specifically block or defend against Hero effects.
- Ongoing effects remain on the field. Some Ongoing effects explicitly last N turns, while others last until some condition triggers them, after which time they expire.
See library.ods
for a list of cards that are planned for the
game.
Here are the conventions for card description text, so we can try to be consistent.
Cards which have no effect shall feature flavortext in italics. This flavortext shall consist of one or more complete sentences, properly punctuated.
Cards which have an effect shall instead describe the effect, in non-italic font.
- Effect text may EITHER be in the form of a mathematical operation (e.g., “+1 Level to all Minions”), in the form of an imperative statement (e.g., “Summon a Chicken from your deck”), or in the form of a complete sentence describing a passive circumstance (e.g., “Hired Ninja is immune to enemy card effects”).
- Effect text shall NOT be written in the form of a passive verb phrase (e.g., prefer “Summon a Chicken” to “Summons a Chicken”)
- Effect text shall end in proper punctuation (such as a period), even in situations where it is not a complete sentence.
- Effect text may consist of multiple sentences. These may be separated by punctuation.
- Semicolons shall be used to separate sequential effects (e.g., “Destroy an enemy Minion; then destroy this card.”)
- Card names should be capitalized consistently in the same way they’re capitalized in the card’s title itself.
- Cards shall prefer to refer to themselves in the third person by name. A phrase such as “this card” may be used if it makes more grammatical sense.
- Cards may use “[icon]…[/icon]” formatting to indicate archetypes or other designators. Such designators shall ONLY be used to refer to their intended archetype or usage (for example, do NOT use [icon]HUMAN[/icon] simply to represent a generic person’s face, only use it to refer to the HUMAN archetype).
- When referencing an archetype, including both the icon and the archetype name (e.g., “All [icon]ROBOT[/icon] ROBOT Minions are destroyed”). Additionally, archetype names shall be written in ALL CAPS.
- Archetypes are adjectives. So for example effects should refer to “All [icon]BEE[/icon] BEE Minions”, NOT simply “All [icon]BEE[/icon] BEEs”.
- The following words are capitalized: Minion, Effect (in the context of an Effect card), Hero, Cost, Level, Morale, each phase name.
- The following words needn’t be capitalized: card, discard pile, fortress, phase (on its own), defense.
- The word “Spiky”, in the context of the pseudo-archetype of
cards, should be used as an adjective, capitalized, and
enclosed in quotation marks. Example: “All ‘Spiky’ Minions gain 1
Level.”.
- Note: This somewhat peculiar convention (involving the explicit quotation marks) intends to emphasize that the “Spiky” archetype is based on the presence or absence of the work “Spiky” in the card’s title.
- “Limited” cards (i.e. those that can only exist once per deck) shall indicate their status using the “LIMITED” icon in the icon row, as well as a sentence “Limit 1 per deck.” at the end of the card effect description.
- Card effects MAY use the second person “you”. If used, the second person pronoun always refers to the card’s current owner.
- Minions are always referred to with the pronoun “it”.
- The player’s fortress should be referred to with the word “fortress”. Its health is called “defense” or “fortress defense”.
Specific rulings on weird or potentially unintuitive interactions.
Miscellaneous definitions for words used on cards.
- Expire
- A Minion expires when its Morale hits zero. A Minion
is normally destroyed immediately after expiring. Effect cards
never expire, and a card removed from the field by means other
than having zero Morale is not considered to have expired.
- A Minion card can expire on the opponent’s turn if a card effect, such as Ice Moth, causes it to drop Morale outside of its Morale Phase.
- During expiration, a Minion can occasionally re-gain Morale
from a card effect. If it does so, then it is not destroyed as
a result of the expiration.
- The exact mechanics of this are somewhat technical in
nature, and players usually needn’t worry about the
specifics. A Minion whose Morale hits zero actually
undergoes two expiration phases: pre-expiration and proper
expiration. During pre-expiration, only effects which change
Morale run, and the Minion can still be saved. Once
pre-expiration is completed, the Minion checks its Morale
once more and cancels the process if
Morale > 0
. If not, then the Minion fully commits to expiring and runs the proper expiration phase, where any other “When X expires” effects run.
- The exact mechanics of this are somewhat technical in
nature, and players usually needn’t worry about the
specifics. A Minion whose Morale hits zero actually
undergoes two expiration phases: pre-expiration and proper
expiration. During pre-expiration, only effects which change
Morale run, and the Minion can still be saved. Once
pre-expiration is completed, the Minion checks its Morale
once more and cancels the process if
- Destroy
- A card is destroyed when it moves from the field to
the discard pile for any reason, including as a result of the
normal expiration process for Minions.
- When a card is destroyed, it always goes to its original owner’s discard pile, even if it changed ownership while on the field.
- Discard
- A card is discarded when it moves from the hand directly to the discard pile.
- Exile
- A card in any position on the board (field, hand, deck, or discard pile) can be exiled. When a card is exiled, it is completely removed from play for the remainder of this card game. There is no way to recover an exiled card.
- Play
- A card is “played” when it moves from a position not on
the field (i.e. deck, hand, or discard pile) to being on the
field.
- When a card is played from the hand as part of a player’s normal turn, that player must spend EP equal to the card’s cost in order to do so.
- Changing the ownership of a card that is already in play (such as via Brainwashing Ray) does not count as playing that card a second time.
- Creating a token card from nothing does not count as playing that card, since the card is not being moved from anywhere else.
- As a singular exception to the above, Mystery Box creates and plays a random card as part of its effect. This exception is carved out, since so many of the cards Mystery Box can spawn depend on being put into play in order to trigger.
- Summon
- This is a synonym for “Play”. You may see it in some old notes for this game. Generally the word “Play” should be preferred over “Summon”, but in some cases this word makes better grammatical sense.
- Field
- The “field” consists of all cards in play. This includes Minions and Effects that have been played but excludes cards in hand, in deck, in the discard piles, or exiled.
- Board
- The “board” consists of all cards on the field, in players’ hands, in players’ decks, and in discard piles. The board explicitly excludes cards which have been exiled.
- Token
- A token is a card created from thin air which was not part of your original deck. When a token is removed from the field for any reason, it is exiled.
- Copy
- When a card that’s already in play is copied, the new
card inherits all of the metadata of the original. This includes
Level, Morale, Doomed status, immunity from influence, and
several other stats. The new card counts as being created, not
played, and is always treated as a token, regardless of whether
or not the original was a token.
- At the time of writing this, the only card that copies another card is Pollination.
- Most Powerful / Least Powerful
- When a card refers to your “most powerful” or “least powerful” Minion, Minions are compared by Level first, then by Morale as a tiebreaker if necessary. If two Minions have the same Level and Morale, the one with the higher unique identifier is considered more powerful.
Influence checks for ninjas and ninja-themed effects apply whenever a card of any kind attempts to change or block another card.
- “Change”, in this context, includes modifying Level, Morale, or archetypes, or moving the card to another location on or off the field. (Examples: Rhombicuboctahedron, Forever Clown, Pasta Power)
- “Block”, in this context, includes skipping a phase for the card (Example: Hypercube Prison).
- Influence checks only apply when the target card is on the field (minion or effect strip). Influence checks do NOT apply to target cards in the discard pile, deck, or hand.
- Influence checks do not apply when a card specifically
self-targets, so no influence check can block an effect of the
form “This Minion is at +1 Level if <some condition>”.
- Corollary: Influence checks DO apply when a blanket effect happens to self-target. So influence checks do apply, even to the self-target, of a card with effect “All friendly Minions are at +1 Level if <some condition>”.
- When a card (usually a Clown-themed card) changes the archetype of a Minion, that change always overwrites any other archetypes. So, for instance, if a Masked Turtle (Ninja + Turtle) was “turned into a Clown”, then he is now just a Clown, not a Ninja or a Turtle anymore.
- When a card is removed from the field, any temporary changes that were made to that card are reverted. These include, but are not limited to, temporary increases or decreases to the Level, changes to the archetype of a Minion, and immunity to effects (e.g. Ninja Mask). Essentially, a card which is not on the field reverts back to its factory condition and only has the stats and abilities listed on the physical card.
(Written Oct 27, 2024)
We have officially reached the point where it’s time to write an
actually good AI for the game. The current one, called
GreedyAIAgent
, merely plays cards at random until it is no
longer legal to do so, then ends its turn.
My first idea (which has mostly been superseded by the idea I will
discuss later) was to make a one-lookahead engine by
hand-programming heuristics. That is, every card type would have a
function that determines its current value to the AI, given the
state of the playing field. For basic Minions, the value is zero,
since cost = level * morale
. But if the card synergizes with
something already on the field, its value goes up. This would
probably work well for basic stuff, but I feel like more
sophisticated cards (Ultimate Fusion, Team Cobra, etc) would never
get played, and if that’s the case then the AI may be playing
suboptimally in other situations as well. It also relies on me
being able to come up with reliable heuristics for every card. For
instance, how many fort health points is immunity from enemy
effects worth? Or how many points is drawing an extra card worth?
It depends heavily on the context in ways difficult to quantify.
So, instead, I’m thinking we design a Monte Carlo engine. The AI looks at its legal actions right now, which consist of either playing a card it can legally afford to play, or ending its turn. For each action, deep-copy the playing field (nontrivial but not terribly difficult to do), then run a couple hundred simulations of the next, say, five turns. At the end of that, see which card (or end-of-turn action) had the best value and play it (resp, end your turn). Notes on this approach:
- The utility value of the game board after running a simulation
is pretty simple to calculate. Assuming A is the AI and B is the
other player, we want to maximize
utility = A.fort_defense - B.fort_defense + (A.destiny_songs - B.destiny_songs) * 20
- A Destiny Song is worth 20 fort defense, because it’s effectively 1/3 of the way to winning the game, and the fort has 60 (or 62, but we’re ignoring that difference for now) defense. One third of 60 is 20.
- For the purposes of running the simulation, after deep-copying the playing field, we shuffle our remaining deck, since the AI can’t see the order of the cards in its own deck but does know what those cards are. There are no effects that blindly exile a card (even in the case of Ravenboy/Ravengirl, the exiled card is revealed publicly to all players), so the AI always has complete knowledge of what cards remain in the unordered multiset of its current deck.
- Likewise, we’ll need to randomize the AI’s opponent’s hand and deck. I’m thinking the AI will take notes of what cards it has seen, and fill out the remainder of its opponent’s deck from that context. For example, if the opponent has exhausted their deck once before, then the AI should know every card in that deck (and, again, since all exiles are public, the AI can reason about what cards have been exiled). If not, the AI can look at the cards it has seen and assume the remaining cards will be of similar archetypes to the existing ones. If it has no information, then assume random basic Minions. Since the main point of Monte Carlo is to figure out what’s best for the AI, I feel like the contents of the enemy’s deck (especially at the beginning of a game) are not as relevant, so we can probably just fill in unknown information with random basic Minions, normally distributed by Cost.
- I do worry about speed here. The greedy AI pauses for a bit to make things seem more natural. We’ll need to distribute our simulations across Godot frames as best as possible and hopefully still seem as fast as the greedy AI. This Will require some experimentation to tweak the best numbers. We can adjust, for instance, the depth of the Monte Carlo search, as well as the number of simulations.
We need to be able to deep-copy PlayingField
. Unfortunately,
while Godot’s duplicate
is nice to have, it has several
subtleties that make it not suitable for my use case (most
prominently, the 0-argument constructor requirement is a
non-starter). So I’ll be implementing a custom deepclone
method.
These are all of the things that PlayingField
directly or
indirectly depends on.
- [ ]
PlayingField
- [ ]
Deck
- [X]
CardContainer
- [X]
Card
- [X]
CardType
(Immutable so simply returnself
) - [ ]
DiscardPile
- [ ]
CardStrip
- [ ]
HiddenCardDisplay
- [ ]
PlayingCardDisplay
- [ ]
GameStatsPanel
+ all individual stats panels - [ ] All AI nodes
(Written Jan 6, 2025)
I have tried implementing a Monte Carlo simulation, but, at least right now, it seems too slow in GDScript. I can only run for a very small number of games and a small depth, not nearly enough to begin to “understand” the game even superficially.
With that in mind, I am currently working on implementing the other idea, involving manual heuristic-based valuations of every card in the game.
- [ ] Villain(s) from Three Rules Standing
- [ ] Costume shop for some cosmetic upgrades
- [ ] Turtle support: block enemy damage
- [ ] Fungus support: Progressively increase in power the longer effects stay in play
- [ ] Provide “collectors’ editions” of certain cards, when there’s original artwork from the source game that we can feature
- [ ] A card that prevents the opponent from winning (for any
reason) while in play
- If the opponent plays the third Destiny Song while this card is in play, they win as soon as the card goes out of play.
- [ ] The “thug” character from Nail?
- [ ] Ancient Demons are the salesmen who sell you cards at shops.
- [ ] Representation (cameos?) from Growing Up?
- [ ] Fast travel system is being dug by a new, original mole character who happens to know Marty the Mole.
- [ ] Boss support? The only boss interactions right now are Prisman and Evil Lair. And Prisman is a debuff for bosses.
- [ ] “Spaghetti Code” (Pasta + Robot synergy :))
- [X] Clarify on Squaredude/Circlegirl whether it counts as “playing” the other if a hero card intercepted it
- [ ] Reskin vitamin capsule to make it more clear that it’s a Dr. Mario reference
- [ ] A “jester” / “joker” card that makes a Minion count as all archetypes at once
- [X] Should Destiny’s Song be a Hero card? I like that idea because it means the opponent can defend against a Destiny’s Song strategy with Bristlegaze, Kidnapping the President, Damsel in Distress, or Skunkman (Skunkman becomes insanely powerful against a Destiny deck)
- [ ] Reskin Second Course to be, maybe, “Second Plate”. I keep forgetting which of it and “With Extra Cheese” is the hand limit and which is the extra draw.
- [ ] Rule 18 (Shape support) - Rule 18 looks like the triforce, so
let’s lean into that reference.
- [ ] Rule 18
- Effect card, lasts 3 turns, limit 1 per deck, no additional effects.
- [ ] Rule of Strength
- If you control Rule 18, then +2 Level to your strongest SHAPE Minion.
- [ ] Rule of Knowledge
- If you control Rule 18, then +2 Morale to your strongest SHAPE Minion.
- [ ] Rule of Bravery
- If you control Rule 18, then all of your SHAPE Minions are now immune to enemy card effects.
- [ ] BUG: Labels on cards (such as the level/morale or turn count) are blocking clicks on those cards. Also applies to deck and discard
- [ ] Change “Destiny’s Song” to “Destiny’s Singer”, so it makes more sense why it’s a hero card.
- [ ] Investigate fullscreen and window resizing behavior
Various ideas that didn’t end up working out or were cut for one reason or another.
Every archetype has an Instant +1 effect that benefits every Minion of its type (regardless of owner). These include “Pasta Power!”, “Rain Dance”, etc.
Originally, we were going to have a Field Effect, which is an Ongoing +1 to all Minions of that type, but you can only have one field effect in play per player. I didn’t really like that idea, since it required no strategy (you play a field effect, then forget about it forever and get a permanent +1). The field effect card names are listed below for historical purposes. Many of these names have been repurposed to do something else.
- Italian Restaurant: Pasta Field Effect
- Pentagon Palace: Shape Field Effect
- Mushroom Fields: Nature Field Effect
- Coastal Shore: Turtle Field Effect
- Circus Tent: Clown Field Effect
- Mainframe Room: Robot Field Effect
- Ancient Training Grounds: Ninja Field Effect
- Treetops: Bee Field Effect
- Dismal Cemetery: Undead Field Effect
- Office Building: Human Field Effect
- Greener Pastures: Farm Field Effect
- River Styx: Demon Field Effect
Making notes of where I get certain assets, so I don’t forget later.
- GDScript Promise Async Utils (kuruk-mm)
- https://godotengine.org/asset-library/asset/2351 and https://github.com/kuruk-mm/gdscript-promise-async-utils
- Merriweather
- https://fonts.google.com/specimen/Merriweather?stroke=Serif
- Raleway
- https://fonts.google.com/specimen/Raleway
- Maximum Impact
- https://www.dafont.com/maximum-impact.font
- Magical Childhood
- https://www.dafont.com/magical-childhood.font