• Hey! Guest! The 40th (!!!) GMC Jam will take place between February 25th, 12:00 UTC to March 1st 12:00 UTC. Why not join in this very special anniversary jam! Click here to find out more!

I Need Your Foresight :) (New Game Concept)


I've been working on a TCG-type game, and it's my first project coding on my own without following tutorials or anything. I feel like it's going good so far, just trying to get the mechanics down, but after looking ahead at everything I need to do, I was thinking I'm bound to do something horribly wrong at some point. So, that's why I'm asking for the foresight of more experienced programmers, and hopefully some suggestions on how to implement the features I'm planning. That way, I don't go in trying to implement a feature one way, just for it to cause problems elsewhere because there's a much better way I should have done it. I could save a lot of time and headaches if I have a better understanding of what I need to do and how I need to do it. Also, opinions on the game idea itself are welcome. :)

So, first, here's what I already have:

-Phased combat system (that is, there is a 'setup' phase and a 'battle' phase) (still debugging this)
-Cards with functional Attack, Defense, and Agility stats (agility is used to determine the order in which cards attack each other during the battle phase, regardless of which side they're on; attack is the damage done per attack, obviously; defense is how much damage the card can take before dying)
-Decks (each player is currently starting with a deck of 25 randomly selected cards, just for testing; it won't be random in the finished game)
-The board (currently 9 playable tiles on each side, I plan on adding more rows for a total of 27 tiles per side)
-Player hand (holding 7 cards at once; a new card is automatically drawn from the deck when one is played; drag and drop cards from the hand to a tile on the board to play them) (drag-and-drop is still buggy)

Planned features: (organized roughly in order of importance/how soon I think I'll get to them)

-Win/loss conditions
-Inventory for all cards collected
-Deck editor
-Structured decks (you can't just put anything in your deck, you must have certain types in certain quantities)
-Competitive AI! (this is the big one; by that I mean, really important, and probably very difficult)
-'Skill' stat for each card (used to boost the effects of special abilities, see below)
-Special abilities (various things individual cards may do besides a normal attack during its turn)
-Graveyard (pile of deceased cards; certain special abilities may be able to utilize this pile)
-Card movement (you can move one card per setup phase, the number of tiles perhaps dependent on agility?)
-Some more advanced battle mechanics (only once I get the basic system fully working)
-A world to explore, with a story to take you through it (RPG-style, I'm thinking)
-Multiplayer? Online card trading? PvP? Team activities?
-More to be added!

Also, it may be worth noting:
I made the cards all using a single object, which gets initialized to the stats of whatever card was selected. The card object draws the appropriate sprite and stats for the card ID given to it when it is created. The stats for all the different cards are stored in a 2D array in a control object.
The deck is created using a ds_stack, which I chose because of how simple it is to 'pop' a new card from the stack. The only feature I'm wanting is the ability to shuffle, but I figure I can just put all the information in a ds_list first, shuffle it, then put it in the stack.
The agility system is done using a ds_grid that stores the instance ID of each card in play, along with its agility stat. The grid is then sorted by agility, and each card attacks in order, starting with the highest agility. Cards with the same agility stat attack simultaneously. All non-simultaneous attacks are separated by a timer, so the player can see the 'action' happening.
The board is created using individual instances of a card_slot object, which change into the desired card when a card from your hand is dropped on it. This was initially done as a fast way to test the other aspects of the game, but the system seems to work pretty good. I was thinking using a ds_grid would be better in the long run, so I may switch the whole process over to that. However, I was thinking of combining the two, just using the ds_grid to spawn my card_slot objects. This way, I don't have to undo so much, and I should still be able to easily access each slot individually through the grid.
I was originally going to create an array or something for the hand, but I just used my control object to draw the first seven cards from the deck across the bottom on the screen. Then, whenever a drag-able card object is destroyed (its stats going into the card slot) it spawns a new card in the original location of the old one, popping the new card from the ds_stack(deck). I don't know if assigning them to an array would be better or not, but it seems to work pretty good as it is (besides one particular bug I'm having with the drag and drop system, but that shouldn't have anything to do with whether or not I use an array).

And here were my ideas for how to handle some of the other ideas:

I would probably handle the graveyard just the same as the deck, using a ds_stack.
For the inventory I was thinking I'd use a ds_map, because that way I can also have multiples of cards.
The deck editor sounds a bit difficult, but I was thinking I could use a drag and drop thing similar to what I have in the battle system. I could display the contents of the inventory (ds_map) and allow the player to scroll through it and drag the cards they want into their deck (with the aforementioned structuring). Contents would be subtracted from the inventory as they are placed in the deck (no duplicates!), and the deck would be saved for later use. To get a little more advanced, I'd even like to see some sorting/searching functions in the inventory, as there will eventually be a myriad of cards. Finding what you're looking for could get, as one would imagine, rather difficult without any form of sorting.
I was thinking, for the special attacks, I could just create a script for each one, and call it when the card attacks. Just as I have the card names and attack stats and agility stats and so on saved in a 2D array, I think I could also save the name of the scripts to be used along with some numbers to modify the effect (I'd probably mostly use the skill stat for this). At least, if I'm not mistaken, I can save the name of a script in my array, then run the script later... right?
As far as the win/loss conditions, I was thinking I'd have each deck contain one sort of 'leader' card (see deck structuring above) which is always the first card on the field for both sides. It would have an extremely high health stat, and winning or losing is dependent on who can kill the other leader card first. Like the king in a game of Chess. This is the reason for the card movement feature, so the leader doesn't get stuck in a position where it can't be attacked.

Anyways, any help, feedback, opinions on the game, or anything else is appreciated! I can tell more about specific details or post code if anyone requests. I may add more to this post later as I come up with/recall more stuff. Thanks for reading!


Yeah, I figured it was your character's name. :p
I could take a screenshot, but the graphics are really nothing to look at. :p Everything is a placeholder right now.