It is currently 09 Sep 2025, 00:20
   
Text Size

Quest thoughts

Post MTG Forge Related Programming Questions Here

Moderators: timmermac, Blacksmith, KrazyTheFox, Agetian, friarsol, CCGHQ Admins

Quest thoughts

Postby RumbleBBU » 03 Oct 2012, 14:52

Having spent enough time hacking the Sealed Deck mode, at least for now, I've (as you may have guessed already from my most recent commits) set my eyes on the Quest mode.

Quest mode is cool. My only real issue with it is...I'm not sure I want to play in a "full cardpool" mode all the time. Well yes, you can pick the format for your starting pool and boosters, but you will still get fully random cards as random rares and from spell stores. So I thought, why not extend that idea (chosen format) to all cards you acquire so you could play a sort of "limited environment" quest? All of this would of course be fully optional (preference-controlled) so the quest mode would work as before, if you want.

So here's what I'm planning to do:
- Add preference settings that allow you to use your Qpref.BOOSTER_FORMAT preference (instead of full cardpool) for spell store, random rares and jackpots.
- Add a button for explicitly selecting your Qpref.BOOSTER_FORMAT preference as and when you want.
- Of course, also write a HOW-TO on modifying your formats.txt file so that you can add any number of custom "fantasy" environments that you can switch between in the quest mode. You could, for example, start in a "Ravnica format", then switch to "Innistrad format" and start collecting cards from that format, and so on. Or whatever format you want (the formats.txt file allows that).
(- And after that, you would need enemy decks that are consistent with your selected format...)

Thoughts, comments? Also, if I add more QPrefs that will be stored, do I risk breaking old quest data files?
User avatar
RumbleBBU
 
Posts: 394
Joined: 18 Aug 2012, 04:24
Has thanked: 29 times
Been thanked: 66 times

Re: Quest thoughts

Postby friarsol » 03 Oct 2012, 14:57

I'll add my comments here since it wasn't particularly a bug, but relevant to an earlier commit:

Please, don't take this as me trying to call out your changes. I like what you've been doing on the SealedDeck side of things, but I'm nervous about the balance that your recent change affects Quest: "When you win a quest booster, you can now select a specific set (in addition to format-based boosters)."

Does this mean I can take an Alpha booster everytime I win a quest game? I don't think that's really a good idea, not only will people be running around with Power extremely early, they can also sell the mundane cards for super-cash and break the balance I've put into Quest mode.

I think the general idea of this feature works. But it needs some limitations.

For example, in the first 10 Wins you can pick any Set specific booster from Standard, in the first 25 Wins you can pick any Set specific booster from Extended. In the first 50 Wins, you can pick any Set specific booster from Modern. Etc.
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Quest thoughts

Postby RumbleBBU » 03 Oct 2012, 15:45

Guess I hadn't thought about that aspect. :( Obviously the concept needs some more work...

The ultimate aim was simply to allow limiting the quest cardpool in various ways instead of playing with the full cardpool all the time. Like, what would the Quest mode have looked like, if it had been implemented around Urza's Saga block? My personal interest was in the older sets, since I'm not really up to speed with the modern MtG - I originally lost interest sometime around the Time Spiral block). Which, in turn, gave me the idea of exploring the possibility of different "limited quest environments", and the possibility of "time travelling" between them.

Maybe, for starters, the chosen format should limit what booster sets can be picked individually?
User avatar
RumbleBBU
 
Posts: 394
Joined: 18 Aug 2012, 04:24
Has thanked: 29 times
Been thanked: 66 times

Re: Quest thoughts

Postby Sloth » 03 Oct 2012, 15:59

RumbleBBU wrote:So here's what I'm planning to do:
- Add preference settings that allow you to use your Qpref.BOOSTER_FORMAT preference (instead of full cardpool) for spell store, random rares and jackpots.
- Add a button for explicitly selecting your Qpref.BOOSTER_FORMAT preference as and when you want.
I think a lot of users will appreciate these features. There were some requests to restrict spell shop cards to one format (mostly Standard or Modern).
Last edited by Sloth on 03 Oct 2012, 16:00, edited 1 time in total.
User avatar
Sloth
Programmer
 
Posts: 3498
Joined: 23 Jun 2009, 19:40
Has thanked: 125 times
Been thanked: 507 times

Re: Quest thoughts

Postby friarsol » 03 Oct 2012, 16:00

RumbleBBU wrote:Guess I hadn't thought about that aspect. :( Obviously the concept needs some more work...

The ultimate aim was simply to allow limiting the quest cardpool in various ways instead of playing with the full cardpool all the time. Like, what would the Quest mode have looked like, if it had been implemented around Urza's Saga block? My personal interest was in the older sets, since I'm not really up to speed with the modern MtG - I originally lost interest sometime around the Time Spiral block). Which, in turn, gave me the idea of exploring the possibility of different "limited quest environments", and the possibility of "time travelling" between them.

Maybe, for starters, the chosen format should limit what booster sets can be picked individually?
I think a bunch of us are in the same boat. I played from around Homelands to Prophecy.

I think if you chose a non-Eternal format as your starting cardpool we could save that and then allow set breakdown from that. This would limit access to expensive boosters, but still let people restrict the cardpool with a bit more customization.

And if you are curious, I had a similar idea to what it sounds like you are getting to a while back:

viewtopic.php?f=52&t=2804&p=36422&hilit=quest#p36422
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Quest thoughts

Postby RumbleBBU » 03 Oct 2012, 18:05

Yeah, you're right - that sounds frighteningly close to what I think I'm thinking of, in a good way. Perhaps the only difference is that I wouldn't necessarily want a 'linear' progression - rather, give the player a choice which expansion(s) he wants to "unlock" next (or, think of it, even starts with!). There might be different price tags attached to the different expansions.

Maybe the next step I will experiment with is an environment (or format) that you can choose when you start your quest (a bit like now), and if you do, it will be enforced for the rest of the quest: all your boosters, spell store purchases and random rares will be limited by this environment. In this context, being able to choose the exact booster set might work.
This would basically be like a variation of the current format-based quest, which only limits your starting pool.
User avatar
RumbleBBU
 
Posts: 394
Joined: 18 Aug 2012, 04:24
Has thanked: 29 times
Been thanked: 66 times

Re: Quest thoughts

Postby friarsol » 03 Oct 2012, 18:34

RumbleBBU wrote:Yeah, you're right - that sounds frighteningly close to what I think I'm thinking of, in a good way. Perhaps the only difference is that I wouldn't necessarily want a 'linear' progression - rather, give the player a choice which expansion(s) he wants to "unlock" next (or, think of it, even starts with!). There might be different price tags attached to the different expansions.
Yea there's no reason to force it to be limited in this fashion. Of course, 2 years ago Forge was a completely different beast. I think this was even before we broke out card files into individual txt files. (Imagine the conflicts!) And we didn't have any setinfo, or AbilityFactories, or a ton of major progress that we've made since then.

RumbleBBU wrote:Maybe the next step I will experiment with is an environment (or format) that you can choose when you start your quest (a bit like now), and if you do, it will be enforced for the rest of the quest: all your boosters, spell store purchases and random rares will be limited by this environment. In this context, being able to choose the exact booster set might work.
This would basically be like a variation of the current format-based quest, which only limits your starting pool.
Sounds like a good path. I still think we have to be careful with the Eternal formats and booster set choosing, but if you are going to force the restriction on a high level, it should work fairly well (and as Sloth said, we have had this request previously, but no major interest in trying to push the changes through)

I've never actually touched the save format of the Quest files, so maybe someone who did (Max or DoubleStrike possibly?) can speak up about how we handle backwards compatibility.
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Quest thoughts

Postby Max mtg » 03 Oct 2012, 19:54

RumbleBBU wrote:So here's what I'm planning to do:
- Add preference settings that allow you to use your Qpref.BOOSTER_FORMAT preference (instead of full cardpool) for spell store, random rares and jackpots.
- Add a button for explicitly selecting your Qpref.BOOSTER_FORMAT preference as and when you want.

Thoughts, comments? Also, if I add more QPrefs that will be stored, do I risk breaking old quest data files?
That should be a field in QuestData class - not a global preference. Different saves will store different settings. Isn't it better?
I suggest making the setting readonly, so that you choose the format only at the begining of the quest and cannot choose starting cardpool better than the cards player will gain while playing (disallow legacy starting poll with T2 boosters to receieve as prized)

If you have any trouble with olded quest saves, ask me. I have a huge experience dealing with quest mode.
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: Quest thoughts

Postby Xitax » 03 Oct 2012, 20:40

Just an idea: What if when you win a booster, you're given three to pick from? That way you can control what appears there and it would be exciting when you get a rare booster to pick.
Xitax
 
Posts: 918
Joined: 16 May 2010, 17:19
Has thanked: 183 times
Been thanked: 133 times

Re: Quest thoughts

Postby Jaedayr » 05 Oct 2012, 03:18

I like the idea of starting with the earliest cards and work your way up to current day with opponents and rewards to match your progress. Similar to what Everquest MMO does, start a new server with everyone starting at level 1, and only have the early expansions. After awhile, release the next expansion, etc. Even though you may have max level chars on other servers, the progression servers start all over. Even though you have ultimate card collections on other quests, the progression quest starts you all over. You could advance at the earliest opportunity or stay where you are in hopes of getting more rares.

Of course I could also see this turning into an epic length quest.... taking hundreds and hundreds of wins to get to the end. :D
Jaedayr
Tester
 
Posts: 523
Joined: 08 Jul 2010, 00:06
Has thanked: 16 times
Been thanked: 13 times

Re: Quest thoughts

Postby RumbleBBU » 05 Oct 2012, 12:06

Thanks for the comments. I have now committed what I have coded so far. I'm currently playing a Quest in a 'limited' mode, and it seems to work as I intended it to (I'm using a custom "Quest" format that limits my sets to those available in the old MtG Encyclopedia "godbook", plus some custom enemy decks that use more or less the same cardbase).

Basically, this is how it works now:
When you start a new quest, there is a new checkbox now below the format selection box: "Enforce format during quest". If you select this (it can be selected only when you have first selected the format-based starting pool), the game will remember the format setting and use it for the whole quest. It will affect the cards and boosters you are awarded when you win duels as well as the spell store inventory. There are only two exceptions:
- Theme decks that are not in the format can still be generated in the spell store. This is deliberate (because I couldn't think of a neat way to handle them for every imaginable format - except perhaps to disbale them completely when the format is being enforced).
- The enemy decks. Again, if the format were to be enforced here, we would need lots more enemy decks for all imaginable now and future formats. (If people submit them, this could be changed.)

There is also one more significant difference in game behavior: if you are playing in an enforced format, instead of selecting a format for your booster award, you get to choose a set. However, you may not choose freely. Typically, you are given a choice between two random sets that are in the format. Every 5 wins, you get to choose from 3 different sets, every 25 wins from 4 different sets, and every 50 wins, from 5 different sets. If you get a booster after losing a duel (Easy setting), you will not be able to choose at all: instead, you just get a booster from one random in-format set.

...and that's what I have coded and committed so far.

What next?
Maybe after winning a Challenge or a some other milestone achievement (every 100 wins? 200 wins? 500 wins?) you could see a screen that gives you the option to "unlock" one more expansion and add it to your current format. You would get a choice between, say, 3 more randomly picked expansions, and you would need to pay credits to unlock the expansion you choose. Unlocking an expansion could cost, for example, 3 * starter pack price for that expansion, but you would immediately get a free booster pack from that expansion. How does that sound? Any other suggestions?
User avatar
RumbleBBU
 
Posts: 394
Joined: 18 Aug 2012, 04:24
Has thanked: 29 times
Been thanked: 66 times

Re: Quest thoughts

Postby moomarc » 05 Oct 2012, 12:31

Sounds great to me. Perhaps unlocking a new set for your pool should cost more but you'd get a full sealed pack (60/75 cards) instead of a booster. That way you have more commons from that set to start giving some baseline strategy (if you're changing your strategy that is).
-Marc
User avatar
moomarc
Pixel Commander
 
Posts: 2091
Joined: 04 Jun 2010, 15:22
Location: Johannesburg, South Africa
Has thanked: 371 times
Been thanked: 372 times

Re: Quest thoughts

Postby Max mtg » 05 Oct 2012, 13:55

http://svn.slightlymagic.net/websvn/dif ... &peg=17354

Please do not make references from core classes to quest-related ones.
forge.game.GameFormatQuest should be in forge.quest.* package, and there should be no reference from any forge.game.* class to forge.quest.*

All the area-specific methods should stay in same package that defines that special functionality
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: Quest thoughts

Postby RumbleBBU » 05 Oct 2012, 14:06

Max mtg wrote:Please do not make references from core classes to quest-related ones.
forge.game.GameFormatQuest should be in forge.quest.* package, and there should be no reference from any forge.game.* class to forge.quest.*
Will fix in the next revision.
Thanks for pointing this out.
User avatar
RumbleBBU
 
Posts: 394
Joined: 18 Aug 2012, 04:24
Has thanked: 29 times
Been thanked: 66 times

Re: Quest thoughts

Postby Max mtg » 05 Oct 2012, 14:23

http://svn.slightlymagic.net/websvn/dif ... &peg=17354
Please keep in mind that external code might modify the lists you are returning from GameFormat class. If any code does, that would be a pity. So make sure that either a copy of source list is returned, or the collection (iterator) is immutable.

You have repeated a number of time the same structure:
Code: Select all
        Predicate<CardEdition> myFilter = CardEdition.Predicates.xxxxxx;
        if (qc.getFormat() != null) {
            myFilter = Predicates.and(myFilter , isLegalInQuestFormat(qc.getFormat()));
        }
It would be better to make a rotine like this:

Code: Select all
public Predicate<CardPrinted> applyFormatFilter(Predicate<CardPrinted> source)
{
   return qc.getFormat() == null ? source : Predicates.and(source, isLegalInQuestFormat(qc.getFormat()));
}
and apply that function to every predicate across QuestUtilCards. That will bring you:
Code: Select all
        Predicate<CardEdition> myFilter = applyFormatFilter(CardEdition.Predicates.xxxxxx);
Single class for single responsibility.
Max mtg
Programmer
 
Posts: 1997
Joined: 02 Jul 2011, 14:26
Has thanked: 173 times
Been thanked: 334 times

Next

Return to Developer's Corner

Who is online

Users browsing this forum: No registered users and 57 guests

Main Menu

User Menu

Our Partners


Who is online

In total there are 57 users online :: 0 registered, 0 hidden and 57 guests (based on users active over the past 10 minutes)
Most users ever online was 7303 on 15 Jul 2025, 20:46

Users browsing this forum: No registered users and 57 guests

Login Form