Feature Requests Thread
by mtgrares
Moderators: timmermac, Blacksmith, KrazyTheFox, Agetian, friarsol, CCGHQ Admins
Re: Feature Requests Thread
by BaloErets » 18 May 2013, 22:02
Really loving Forge. Play every day for a good 1/2 hour!
A feature that I would love to see would be the ability to save a constructed deck as a custom Card pool, and then be able to load this card pool as an alternative to the "every cards is available" default pool.
Wouldn't it be awesome to allow players to create cards pools that, for instance, only consisted of cards they physically owned? I would love to limit myself to build decks that I could only create in real life
A feature that I would love to see would be the ability to save a constructed deck as a custom Card pool, and then be able to load this card pool as an alternative to the "every cards is available" default pool.
Wouldn't it be awesome to allow players to create cards pools that, for instance, only consisted of cards they physically owned? I would love to limit myself to build decks that I could only create in real life

Re: Feature Requests Thread
by Max mtg » 18 May 2013, 23:09
save a deck, put its file into cubes folder and choose that cube from the dropdown list... starting from the next beta (unless other devs do mind this new way to start a quest game)
Single class for single responsibility.
- Max mtg
- Programmer
- Posts: 1997
- Joined: 02 Jul 2011, 14:26
- Has thanked: 173 times
- Been thanked: 334 times
Re: Feature Requests Thread
by BaloErets » 18 May 2013, 23:24
You Rock!! A gazillion thanks.Max mtg wrote:save a deck, put its file into cubes folder and choose that cube from the dropdown list... starting from the next beta (unless other devs do mind this new way to start a quest game)
Re: Feature Requests Thread
by Nordos » 19 May 2013, 20:22
if an AI looses control of a creature (for example if the human targets it with Mindcontrol or if an Act of Treason is about to end), while having the option to sacrifice it (via Bloodflow Connoisseur for example), it should sacrifice it.
Is there a possiblity to add that ... ?
Is there a possiblity to add that ... ?
Re: Feature Requests Thread
by Luxis » 19 May 2013, 22:43
Thank you, Hellsifh.Hellfish wrote:Should be. Why? Any particular bug you're seeing? Please report it in the beta thread if so.Luxis wrote:Is the Planechase game working properly?
Well, no, I was just wondering..
The AI doesnt seem to "know" it is a Planechase game, it doesn't use the planechase cards, doesnt roll dice and all.. And I know, it must be VERY hard to implement an intelligence to check when is it good to roll or not, or stuff like that.. and.. well, it gets kinda pointless play without it. haha
Another thing is that AI always attack players, and just players. : / Or maybe It's set to "All AI allied" and I just don't know how to change that. haha if so, sorry.. haha
Another thing I would like to know is where do I put the images of the planechase cards. I know this is not the thread for this question.
Thank you for your atention, sorry for my bad english. : )
Re: Feature Requests Thread
by BaloErets » 20 May 2013, 11:13
Would it be possible to have an option in the preferences to completely turn off the booster-packs that are rewarded when winning a match? As per my last request, I really want to limit myself strictly to the cards I already own. I'm quite confident that other players would like the challenge as well.
Much appreciated. Keep up the amazing work!
Dan
Much appreciated. Keep up the amazing work!
Dan
Re: Feature Requests Thread
by timmermac » 20 May 2013, 12:47
I don't know about turn off, but you can edit quest.preferences in a regular text editor to set the frequency to a really high number, which would have the basic effect that you're looking for.BaloErets wrote:Would it be possible to have an option in the preferences to completely turn off the booster-packs that are rewarded when winning a match? As per my last request, I really want to limit myself strictly to the cards I already own. I'm quite confident that other players would like the challenge as well.
Much appreciated. Keep up the amazing work!
Dan
"I just woke up, haven't had coffee, let alone a pee in 7 days, and I find out you stole my ass and made a ...mini-me! Carter, I should be irked currently, yes?" - Jack O'Neill
Re: Feature Requests Thread
by BaloErets » 21 May 2013, 05:10
Works like a charm.timmermac wrote:I don't know about turn off, but you can edit quest.preferences in a regular text editor to set the frequency to a really high number, which would have the basic effect that you're looking for.BaloErets wrote:Would it be possible to have an option in the preferences to completely turn off the booster-packs that are rewarded when winning a match? As per my last request, I really want to limit myself strictly to the cards I already own. I'm quite confident that other players would like the challenge as well.
Much appreciated. Keep up the amazing work!
Dan
Only thing I can't get around is winning the random rare when fighting a hard enemy. But when that happens, I simply sell it at the shop to stay legit

Really fun trying out all the variations of decks I can build in real life. I highly suggest to other players out there to give this a try

Thanks again!
Re: Feature Requests Thread
by otherright » 22 May 2013, 01:52
Would it be possible to be able to add a couple of lines of description to a deck? The layout as it stands is great. Its just with the overwhelming options for decks, it can get confusing quickly.
It would be cool if when we highlight a deck in the menu, maybe an area below it could provide the description, or even double clicking. I know that double clicking now brings up a card list, but sometimes that just doesn't seem to be enough. Descriptors could be made by those of us who wouldn't mind adding one through the deck editor if that is doable.
For example, on the deck list, Goblin Caves could appear in the descriptor area as;
Goblin Caves (R/G)
From the Lab - 05/20/13
Create a vast army of goblin tokens.
It would be cool if when we highlight a deck in the menu, maybe an area below it could provide the description, or even double clicking. I know that double clicking now brings up a card list, but sometimes that just doesn't seem to be enough. Descriptors could be made by those of us who wouldn't mind adding one through the deck editor if that is doable.
For example, on the deck list, Goblin Caves could appear in the descriptor area as;
Goblin Caves (R/G)
From the Lab - 05/20/13
Create a vast army of goblin tokens.
- otherright
- Posts: 63
- Joined: 29 Sep 2009, 17:46
- Has thanked: 4 times
- Been thanked: 6 times
Re: Feature Requests Thread
by goonjamin » 23 May 2013, 01:45
I mentioned this with a bug report I filed tonight (which has already been fixed
) but thought I would post it here as this part is more of a feature request to tweak the AI playing Momir.
Most important how hard would it be to limit the AI playing lands when when there hand is empty so they don't just keep playing them normally never giving them the opportunity to get more creatures later in the game?
I used to play Momir Basic on Wagic when I still had a psp and had a good time with it. Looking at their source code the AI has a few rules to help it get to the 8 drop along with a little randomness to try and keep it unpredictable.
Here is a copy of the AIMomirPlayer.cpp from wagic that I was looking at in case it helps.

Most important how hard would it be to limit the AI playing lands when when there hand is empty so they don't just keep playing them normally never giving them the opportunity to get more creatures later in the game?
I used to play Momir Basic on Wagic when I still had a psp and had a good time with it. Looking at their source code the AI has a few rules to help it get to the 8 drop along with a little randomness to try and keep it unpredictable.
Here is a copy of the AIMomirPlayer.cpp from wagic that I was looking at in case it helps.
- Code: Select all
#include "PrecompiledHeader.h"
#include "AIMomirPlayer.h"
#include "CardDescriptor.h"
#include "DamagerDamaged.h"
#include "AIStats.h"
#include "AllAbilities.h"
AIMomirPlayer::AIMomirPlayer(GameObserver *observer, string file, string fileSmall, string avatarFile, MTGDeck * deck) :
AIPlayerBaka(observer, file, fileSmall, avatarFile, deck)
{
momirAbility = NULL;
agressivity = 100;
}
int AIMomirPlayer::getEfficiency(OrderedAIAction * action)
{
MTGAbility * ability = action->ability;
ManaCost * cost = ability->getCost();
if (cost && !(cost->isExtraPaymentSet())) return 0; //Does not handle abilities with sacrifice yet
int efficiency = AIPlayerBaka::getEfficiency(action);
if (observer->getCurrentGamePhase() < MTG_PHASE_FIRSTMAIN) return 0;
return efficiency;
}
MTGAbility * AIMomirPlayer::getMomirAbility()
{
if (momirAbility) return momirAbility;
momirAbility = observer->mLayers->actionLayer()->getAbility(MTGAbility::MOMIR);
return momirAbility;
}
int AIMomirPlayer::momir()
{
if (!game->hand->nb_cards) return 0; //nothing to discard :/
int result = 0;
int opponentCreatures = getCreaturesInfo(opponent(), INFO_NBCREATURES);
int myCreatures = getCreaturesInfo(this, INFO_NBCREATURES );
ManaCost * potentialMana = getPotentialMana();
int converted = potentialMana->getConvertedCost();
SAFE_DELETE(potentialMana);
int efficiency = 100;
int chance = 1 + (randomGenerator.random() % 100);
if (converted == 5 && myCreatures > opponentCreatures && game->hand->nb_cards < 4) efficiency = 5; //Strategy: skip 5 drop
if (converted == 7 && myCreatures > opponentCreatures && game->hand->nb_cards < 2) efficiency = 50; //Strategy: 7 drops have bad upkeep costs and the AI doesn't handle those right now...
if (converted > 8) converted = 8;
if (converted == 8) efficiency = 100 - (myCreatures - opponentCreatures);
if (efficiency >= chance)
{
std::vector<int16_t> _cost;
_cost.push_back(Constants::MTG_COLOR_ARTIFACT);
_cost.push_back(converted);
ManaCost * cost = NEW ManaCost(_cost);
MTGAbility * ability = getMomirAbility();
MTGCardInstance * card = game->hand->cards[0];
if (ability->isReactingToClick(card, cost))
{
payTheManaCost(cost);
AIAction * a = NEW AIAction(this, ability, card);
clickstream.push(a);
result = 1;
}
delete cost;
}
return result;
}
int AIMomirPlayer::computeActions()
{
//Part of the strategy goes here. When should we put a land into play ?
/*
Another gift from Alex Majlaton on my first day playing Momir, and it has served me well ever since. It goes a little something like this: (a) if you are on the play, hit your Two through Four, skip your Five, and then hit all the way to Eight; (b) if you are on the draw and your opponent skips his One, you make Two through Eight; (c) if you are on the draw and your opponent hits a One, you match him drop-for-drop for the rest of the game.
You skip your Five on the play because it is the weakest drop. There are plenty of serviceable guys there, but very few bombs compared to other drops
the general rule is this: if you want to get to Eight, you have to skip two drops on the play and one drop on the draw.
*/
Player * p = observer->currentPlayer;
if (!(observer->currentlyActing() == this)) return 0;
if (chooseTarget()) return 1;
int currentGamePhase = observer->getCurrentGamePhase();
if (observer->isInterrupting == this)
{ // interrupting
selectAbility();
return 1;
}
else if (p == this && observer->mLayers->stackLayer()->count(0, NOT_RESOLVED) == 0)
{ //standard actions
CardDescriptor cd;
MTGCardInstance * card = NULL;
switch (currentGamePhase)
{
case MTG_PHASE_FIRSTMAIN:
{
ManaCost * potentialMana = getPotentialMana();
int converted = potentialMana->getConvertedCost();
SAFE_DELETE(potentialMana);
if (converted < 8 || game->hand->nb_cards > 1)
{
//Attempt to put land into play
cd.init();
cd.setColor(Constants::MTG_COLOR_LAND);
card = cd.match(game->hand);
int canPutLandsIntoPlay = game->playRestrictions->canPutIntoZone(card, game->inPlay);
if (card && (canPutLandsIntoPlay == PlayRestriction::CAN_PLAY))
{
MTGAbility * putIntoPlay = observer->mLayers->actionLayer()->getAbility(MTGAbility::PUT_INTO_PLAY);
AIAction * a = NEW AIAction(this, putIntoPlay, card); //TODO putinplay action
clickstream.push(a);
return 1;
}
}
momir();
return 1;
break;
}
case MTG_PHASE_SECONDMAIN:
selectAbility();
return 1;
break;
default:
return AIPlayerBaka::computeActions();
break;
}
}
return AIPlayerBaka::computeActions();
}
Re: Feature Requests Thread
by BaloErets » 24 May 2013, 01:55
Thanks goonjamin! Just yesterday I made a similar request in the Card AI (Improvements) Requests thread! Happy to see I'm not the only one who loves this formatgoonjamin wrote:I mentioned this with a bug report I filed tonight (which has already been fixed) but thought I would post it here as this part is more of a feature request to tweak the AI playing Momir.
Most important how hard would it be to limit the AI playing lands when when there hand is empty so they don't just keep playing them normally never giving them the opportunity to get more creatures later in the game?
I used to play Momir Basic on Wagic when I still had a psp and had a good time with it. Looking at their source code the AI has a few rules to help it get to the 8 drop along with a little randomness to try and keep it unpredictable.
Here is a copy of the AIMomirPlayer.cpp from wagic that I was looking at in case it helps.
- Code: Select all
#include "PrecompiledHeader.h"
#include "AIMomirPlayer.h"
#include "CardDescriptor.h"
#include "DamagerDamaged.h"
#include "AIStats.h"
#include "AllAbilities.h"
AIMomirPlayer::AIMomirPlayer(GameObserver *observer, string file, string fileSmall, string avatarFile, MTGDeck * deck) :
AIPlayerBaka(observer, file, fileSmall, avatarFile, deck)
{
momirAbility = NULL;
agressivity = 100;
}
int AIMomirPlayer::getEfficiency(OrderedAIAction * action)
{
MTGAbility * ability = action->ability;
ManaCost * cost = ability->getCost();
if (cost && !(cost->isExtraPaymentSet())) return 0; //Does not handle abilities with sacrifice yet
int efficiency = AIPlayerBaka::getEfficiency(action);
if (observer->getCurrentGamePhase() < MTG_PHASE_FIRSTMAIN) return 0;
return efficiency;
}
MTGAbility * AIMomirPlayer::getMomirAbility()
{
if (momirAbility) return momirAbility;
momirAbility = observer->mLayers->actionLayer()->getAbility(MTGAbility::MOMIR);
return momirAbility;
}
int AIMomirPlayer::momir()
{
if (!game->hand->nb_cards) return 0; //nothing to discard :/
int result = 0;
int opponentCreatures = getCreaturesInfo(opponent(), INFO_NBCREATURES);
int myCreatures = getCreaturesInfo(this, INFO_NBCREATURES );
ManaCost * potentialMana = getPotentialMana();
int converted = potentialMana->getConvertedCost();
SAFE_DELETE(potentialMana);
int efficiency = 100;
int chance = 1 + (randomGenerator.random() % 100);
if (converted == 5 && myCreatures > opponentCreatures && game->hand->nb_cards < 4) efficiency = 5; //Strategy: skip 5 drop
if (converted == 7 && myCreatures > opponentCreatures && game->hand->nb_cards < 2) efficiency = 50; //Strategy: 7 drops have bad upkeep costs and the AI doesn't handle those right now...
if (converted > 8) converted = 8;
if (converted == 8) efficiency = 100 - (myCreatures - opponentCreatures);
if (efficiency >= chance)
{
std::vector<int16_t> _cost;
_cost.push_back(Constants::MTG_COLOR_ARTIFACT);
_cost.push_back(converted);
ManaCost * cost = NEW ManaCost(_cost);
MTGAbility * ability = getMomirAbility();
MTGCardInstance * card = game->hand->cards[0];
if (ability->isReactingToClick(card, cost))
{
payTheManaCost(cost);
AIAction * a = NEW AIAction(this, ability, card);
clickstream.push(a);
result = 1;
}
delete cost;
}
return result;
}
int AIMomirPlayer::computeActions()
{
//Part of the strategy goes here. When should we put a land into play ?
/*
Another gift from Alex Majlaton on my first day playing Momir, and it has served me well ever since. It goes a little something like this: (a) if you are on the play, hit your Two through Four, skip your Five, and then hit all the way to Eight; (b) if you are on the draw and your opponent skips his One, you make Two through Eight; (c) if you are on the draw and your opponent hits a One, you match him drop-for-drop for the rest of the game.
You skip your Five on the play because it is the weakest drop. There are plenty of serviceable guys there, but very few bombs compared to other drops
the general rule is this: if you want to get to Eight, you have to skip two drops on the play and one drop on the draw.
*/
Player * p = observer->currentPlayer;
if (!(observer->currentlyActing() == this)) return 0;
if (chooseTarget()) return 1;
int currentGamePhase = observer->getCurrentGamePhase();
if (observer->isInterrupting == this)
{ // interrupting
selectAbility();
return 1;
}
else if (p == this && observer->mLayers->stackLayer()->count(0, NOT_RESOLVED) == 0)
{ //standard actions
CardDescriptor cd;
MTGCardInstance * card = NULL;
switch (currentGamePhase)
{
case MTG_PHASE_FIRSTMAIN:
{
ManaCost * potentialMana = getPotentialMana();
int converted = potentialMana->getConvertedCost();
SAFE_DELETE(potentialMana);
if (converted < 8 || game->hand->nb_cards > 1)
{
//Attempt to put land into play
cd.init();
cd.setColor(Constants::MTG_COLOR_LAND);
card = cd.match(game->hand);
int canPutLandsIntoPlay = game->playRestrictions->canPutIntoZone(card, game->inPlay);
if (card && (canPutLandsIntoPlay == PlayRestriction::CAN_PLAY))
{
MTGAbility * putIntoPlay = observer->mLayers->actionLayer()->getAbility(MTGAbility::PUT_INTO_PLAY);
AIAction * a = NEW AIAction(this, putIntoPlay, card); //TODO putinplay action
clickstream.push(a);
return 1;
}
}
momir();
return 1;
break;
}
case MTG_PHASE_SECONDMAIN:
selectAbility();
return 1;
break;
default:
return AIPlayerBaka::computeActions();
break;
}
}
return AIPlayerBaka::computeActions();
}

BaloErets wrote:Hi guys. Just want to start by saying that I love Forge, and I love the idea that this is a passion-driven project by some truly amazing programmers/developers. I couldn't even begin to imagine how hard it must be to attempt to get thousands and thousands of cards to interact with each other. Kudos all the way!
I've been playing some games of Mormir Basic, and although it works quite well for the early game, there is a slight problem with the AI in late game.
Main problem being is that the AI will always play a land card no matter what, even if it only has one card left in its hand. Since the deck is all land, and you have to discard a card in order to put a creature on the battlefield, the AI seems to always play land, leaving no cards in its hand to discard in order to bring out another creature.
Longs story short (too late), the AI should only play a land if it's hand size is >= 2, or if handsize=1, it could also activate the Mormir ability and use that card as the discard.
Much appreciated
Re: Feature Requests Thread
by Sloth » 24 May 2013, 07:24
@BaloErets and goonjamin: AI using Momir Avatar has improved a lot yesterday. Please test the next beta or snapshot build.
-
Sloth - Programmer
- Posts: 3498
- Joined: 23 Jun 2009, 19:40
- Has thanked: 125 times
- Been thanked: 507 times
Re: Feature Requests Thread
by Rack » 27 May 2013, 17:37
I'm really impressed with how far Forge has come along since the last time I checked it out (which admittedly was quite a while...) There's a few features I'd like to see, though I'm not sure if any are implemented and I just haven't found them.
In the deck editor you can filter down to colours and multicolour but there doesn't seem to be a way to filter to specific colours. For example if I want to make a Red/Green deck I can look at red cards and green cards and multicolour cards but not specifically red/green cards.
In game it would be good if there was a skip to next major decision. So no matter where you set the turn markers it would go to either your next turn or the declare blockers step.
One other thing (and this is a personal preference) is there seems to be no way in the quest mode to transition from a sealed strategy to a constructed strategy. I'd like to see an additional shop that let you buy any card at an additional cost. This would be set by the options but I'm imagining something like 5x at default.
In the deck editor you can filter down to colours and multicolour but there doesn't seem to be a way to filter to specific colours. For example if I want to make a Red/Green deck I can look at red cards and green cards and multicolour cards but not specifically red/green cards.
In game it would be good if there was a skip to next major decision. So no matter where you set the turn markers it would go to either your next turn or the declare blockers step.
One other thing (and this is a personal preference) is there seems to be no way in the quest mode to transition from a sealed strategy to a constructed strategy. I'd like to see an additional shop that let you buy any card at an additional cost. This would be set by the options but I'm imagining something like 5x at default.
Re: Feature Requests Thread
by Hib » 29 May 2013, 09:40
It would be nice to save different layouts for the Variant modes, since you need to view the command zone and additional playfields for them, but not for normal play.
Re: Feature Requests Thread
by Max mtg » 29 May 2013, 11:14
That has been already made a long ago - see buttons in dockHib wrote:It would be nice to save different layouts for the Variant modes, since you need to view the command zone and additional playfields for them, but not for normal play.
Single class for single responsibility.
- Max mtg
- Programmer
- Posts: 1997
- Joined: 02 Jul 2011, 14:26
- Has thanked: 173 times
- Been thanked: 334 times
Who is online
Users browsing this forum: No registered users and 39 guests