Thread: [Essentials Script] Pokémon TCG mod
View Single Post
Old February 8th, 2013 (9:00 AM).
Maruno's Avatar
Maruno Maruno is offline
Lead Dev of Pokémon Essentials
    Join Date: Jan 2008
    Location: England
    Posts: 5,189
    Originally Posted by the__end View Post
    Maybe you are interested in adding the decks from the GBC game?

    And do you plan on adding the tcg decks like "Blackout", "Overgrowth", "Zap!" and "Brushfire"?
    I've already added the Blackout, etc. decks that came alongside the first 3 sets (9 decks in total). As for the decks in the GBC game, some of them use cards that aren't included in this project, so they'd need to at least be altered accordingly by someone who knows more about deck-building than I. They're all listed on Bulbapedia.

    Originally Posted by the__end View Post
    A suggestion how to manage the AI:
    Why not add some check for strategies to the prefabricated decks in the PBS file?
    For example you could make a check if the deck is an "Evolution deck" or if you mainly use Basic cards.
    And because the AI can only use prefabricated decks you have to make different AI for "Evolution decks" and "Basic Card decks".
    For example "Evolution decks" should concentrate to evolving their pokemon as fast as possible and using them and "Basic Card" decks (with cards like Electabuzz) should try to overwhelm the opponent at the beginning of the game.
    This way you can even combine different checks.
    As an example lets use the both strategies above. If you have selected "Evolution deck" and "Basic Card deck" the AI should try to overwhelm the opponent with strong Basic cards at the beginning and try to evolve their other Basic cards as fast as possible. After the weak Basic Cards are evolved the AI should stop using strong Basic cards and start using evolved pokemon cards.
    You see that if you combine strategies you need a priority for each one. In the above example the "Basic Card deck" strategy should have a little bit higher priority then the "Evolution Deck" strategy. This way the AI should use the "Basic Card deck" as its main strategy but it doesn't ignore the "Evolution deck" strategy.
    Of course you need conditions for each strategy when to get higher or lower priority. For example the "Basic Card deck" should have a condition that this strategy gets lower priority when you have evolved cards. And because the "Basic Card deck" strategy has now lower priority then the "Evolution deck" strategy the AI starts to use evolved pokemon.
    And you need to determine which cards can be called "strong" Basic cards so the "Basic Card deck" AI knows with which cards it should try to overwhelm the opponent.

    Hope the stuff i said makes sense. I am not a programmer so i don't know how programming actually works. So sorry if i talked nonsense.
    I really don't think such strategies need to be separated. It all boils down to "use the best cards", and what constitutes a "best card" depends on the environment (i.e. what other cards are in play, etc.). This can certainly become convoluted very quickly as the AI develops, as there'll be all sorts of checks and evaluations. This is especially true when you start thinking of combos.

    Of course, the AI is going to cheat. That is, it'll make its choices while knowing about cards it shouldn't be able to know about (e.g. cards in the player's hand, which prize card is best to take, whether it'll draw something good because of Professor Oak). However, it won't influence the outcomes of coin flips or whatever, so it'll be fair that way. I think making the AI omniscient is the only way it can be made to stand a chance against players.

    As for how the AI will actually work, I have a vague idea. At the start of its turn, it looks around the duel and lists everything it is able to do (play a card from the hand, use an in-play effect such as a Pokémon Power, retreat, etc.), and then assign a desirability value to it. Calculating this value for each action depends a lot on the environment, and is the convoluted part. Once all the values are calculated, it will do the most desirable action and repeat (recalculating the values for what's left). Once there's nothing left to do, it will attack if possible and desirable - the good thing is that an attack is always the last thing in a turn (and there's always just 1 attack per turn), which makes it a bit simpler.

    It sounds simple when I write it in just one paragraph, and some actions will always be desirable (e.g. play Bill) and some will never be worth using (e.g. Mankey's Pokémon Power, as the AI will know all those cards via cheating anyway). However, when is the best time to play Energy Removal, and which Pokémon/energy should be hit by it? How about Super Energy Removal, which involves a cost to the user and may not be worth it (and if so, which card should the AI pay)? There's a huge amount of thought that needs to go into the AI for even a single effect, and I think that such thought needs to be done in order to make the AI worthwhile.

    Tuning can come much later, e.g. deciding the threshold desirability value below which an action shouldn't be done, and how much randomness to involve in the choices.

    As you can see, any emergent "strategy" will depend entirely on the make-up of the deck. It can only depend on the cards you've got available ("work with what you've got"), and it's up to the AI calculations for each card to decide how useful (and therefore desirable) it is. The overall behaviour of the AI will simply look like what it does the most, which depends on what it's got (e.g. an energy-controlling strategy will appear if there are a lot of energy-controlling effects in the deck). I don't think there's any need to include deck-specific AI profiles (particularly as it would tend to rail-road and hurt decks which could sometimes benefit from profiles they don't have), and instead throw every situational calculation into the one AI used for everything.
    Go to the Pokémon Essentials Wiki

    | Downloads | Tutorials | Fangames |
    | All Animations Project |

    Follow me on Twitter: @maruno42