Sealed!

I have been procrastinating like crazy… So unfortunately I have been unable to complete the limited feature as fully as I would have like to. The good news is that you get some limited play for x-mas anyway; “Sealed” kind of gameplay is now possible, starting with version 0.7!

So how does it work? Here are all the details:

First you start a game as usual. Then, instead of using File > Load Deck (Ctrl+L), you can use File > Start Limited Game (Ctrl+Shift+L). Please note that starting a limited game will affect everyone, so you’d better agree on who starts the limited game.

Choosing this option brings up this new dialog box:

image

You cannot choose a game kind other than Sealed at the moment. Then you have to add the packs, that each player will receive. Don’t forget to add some “special” pack if you need to, e.g. the “Lands” pack provides an unlimited supply of basic lands.

Please take note that each set defines its own packs (because they may change over time, e.g. the recent introduction of Mythic rares in Magic). So you will have to get updated sets definitions for your game, otherwise there will be no pack available. More about that later.

Unfortunately, you can’t remove a pack from the list at the moment. So if you made a mistake, click Cancel and start all over again.

When you’re done and ready to start, click OK.

When you do, everyone receives its packs and the screen looks like this:

image

One notable shortcoming is that it’s currently impossible to filter or sort the card lists (but I have plans for that!). You can pick whatever cards you want by double-clicking. If you click on multiple cards (e.g. in your deck, or in the unlimited supply), a small popup appears and asks how many cards you want. Enter a digit (or leave the default 1) and hit enter to move that many cards at once.

When you’re ready there’s a link at the bottom. The selected cards are loaded (as any normal deck would) and you can start playing.

As I said, defining packs is something each set must do, so you’ll have to get updated set definitions (at least for the sets you want to play sealed with). For game creators: here’s a reference example of how packs are defined:

<set ..>
  <packaging>
    <pack name="Booster" id="edb3a88e-8c29-4cf2-9d52-1660cd2841c8">
      <pick qty="1" key="Rarity" value="R" />
      <pick qty="3" key="Rarity" value="U" />
      <pick qty="11" key="Rarity" value="C" />
    </pack>
    <pack name="Lands" id="01bb17b6-3bf6-41e9-bfb3-51fe95147e3a">
      <pick qty="unlimited" key="Rarity" value="L" />
    </pack>
  </packaging> 
  <markers>..</markers> 
  <cards>..</cards>
</set>

If you wanted the updated XSD description, it’s available here: http://octgn.net/octgn-client/CardSet.xsd
The updated data access library (for coders) is here: http://octgn.net/octgn-client/Octgn.Data.dll
There’s access to packs definition inside it, and even a function to open random packs according to their definition.
(Remainder: you need the VistaDB.dll as well: http://octgn.net/octgn-client/VistaDB.NET20.dll)

This is my christmas gift to you all. I hope you’ll enjoy the holidays and have a great time. I’ll be mostly afk until 2010, so don’t expect answers or updates after the 26th!

Merry x-mas and happy new year!

Advertisements
Explore posts in the same categories: OCTGN.net

31 Comments on “Sealed!”

  1. HoiHo Says:

    Hello!!!

    When im trying to start the game, i’m getting this error

    [quote]System.Windows.Markup.XamlParseException: Nie można zainicjować obiektu (ISupportInitialize.EndInit).
    Error 126 (Provider v. 3.3.1.54 Express): Table is not found: Pack
    Error 125 (Provider v. 3.3.1.54 Express): Cannot open table: Pack
    Błąd w obiekcie „Octgn.Launcher.StartGame” w pliku znaczników „OCTGN;component/launcher/startgame.xaml” wiersz 137 pozycja 3. —> VistaDB.Diagnostic.VistaDBException:
    Error 126 (Provider v. 3.3.1.54 Express): Table is not found: Pack
    Error 125 (Provider v. 3.3.1.54 Express): Cannot open table: Pack
    —> VistaDB.Diagnostic.VistaDBException:
    Error 126 (Provider v. 3.3.1.54 Express): Table is not found: Pack

    how to fix it?

    • jods Says:

      I can’t understand how you managed to bypass the code, which upgrades your DB.
      Did you uninstall OCTGN, and then re-install it, pointing to a folder where there already was a OCTGN database?

      In that case, you should uninstall OCTGN, delete the master.vdb3, re-install OCTGN and re-install your games.

      If you did a built-in upgrade, or a fresh install (with no pre-existing master.vdb3 database), I don’t understand how this could happen.

  2. jods Says:

    Mmm… that’s a bug in the code, which is supposed to update your game database with the new elements. I’ll check that right now.

  3. HoiHo Says:

    ok sorry for disturbing you, i fixed it now by creating new octgn2 folder and reinstalling game database, now it lets me start.

  4. orca- Says:

    If someone updated the Magic set files, please give us a link to them :>

    • jods Says:

      I’ve released information about the new “packs” definitions just 1 hour ago, I’d be surprised if updated sets were already out! 😉

    • tourniquet Says:

      You can patch the .o8s files yourself in a couple of minutes; it’s easy as pi. Just rename to zip and you can edit that actual xml file within the archive. Jods posted the code so it’s a simple matter of cut and paste. I tried it today with 10th and it worked like a charm.

  5. Q Says:

    From what I see it it not possible to save the created sealed decks which is very unfortunate and should definately be implemented.
    I guess that shouldn’t be much of a problem since the saving functionality already exists for the deck editor anyway.

  6. jods Says:

    @Q:
    I’ll add saving your deck to limited playing. It’s extremely easy as all the required code is already there, I only need to put up one button 😉

    The mythic rares need an additional tag, to be able to say: you have 12.5% chances to get 1 Mythic rare plus 7 rares, or 87.5% chances to get 8 rares. This is not available in this release.

    The next releases will consolidate and complete the “Limited” aspect of OCTGN 2. So you can expect those improvements soon.

    • Jason Says:

      So unless I’m missing something it looks like you never got around to saving sealed decks/lists. Is there a workaround that I’m not aware of? I like the UI for sealed decks a lot, all I want is the ability to save the cards I drew into a set and save the decks I’ve built!

  7. tourniquet Says:

    Thanks Jods, I was really looking forward to this. Merry Christmas!

  8. Kurt Says:

    Awesome work jods! Merry Christmas!

  9. Gaspare Says:

    Wait a moment, since mythic rares rarity code is “M”, it will never show up in the editor… Can i add a “OR” statement in the xml code to tell octgn that R and M are the same kind of cards? If i add only “M” in the rarity list it should show a mythic rarein each booster, which is not really the intended behaviour 😛

    • Q Says:

      No you can’t really, that’s not the point of xml. Program code would have to be added to calculate the chance for a Mythical Rare.

  10. Gaspare Says:

    I think that for start only standard sets should be updated, and then when the mythic issue is solved also other sets. In the mean time, a workaround for mythics is to change rarity from “M” to “R”, much like Octgn1 does, avoiding for now the 1/8 ratio of boosters issue. That will be fixed when jods updates the client next time…

    What you think?

  11. jods Says:

    At the moment I think it’s best not to modify sets, which contain Mythic rares. I’ll add some tag to support the 12.5% chance of having a Mythic replacing a regular rare early in January.

  12. orca- Says:

    Btw Jods, isnt it possible you define in your program how booster/tournament packs are?

    So we dont have to edit our whole sets and most likely create rubbish since not everyone will use the same ID for their boosters/etc. 😡

    • jods Says:

      I don’t really see how that would be possible. Each game has a different definition of what a Booster/Starter/Tournament Pack is… Even worse, those definitions may change from set to set (e.g. the introduction of Mythic rares in Magic).

      There’s one important detail you are pointing out: if everyone edits their sets manually as tourniquet suggested, you’d better agree on the IDs! Each pack must have a unique id, and when you are playing against another player you have to use the same ids (and the same packs definition)! So probably letting people edit their sets manually isn’t a great idea!

  13. Gaspare Says:

    There is a package with updated xmls for T2 sets available at the usual place. Use them until sets are updated.

  14. Gjb Says:

    Thank you so much jods. Have a merry Christmas and a Happy New Year 🙂

  15. HoiHo Says:

    Hello, i want make all sets to be ready to play in sealed, what id should i use ex. for Kamigawa set, and what booster id and lands id should i use for other sets? How to check it?

  16. brinelol Says:

    I’d wait until the “official” sets are updated then download those

  17. Thronner Says:

    Hey, since jods deserve a little rest, I’ve created a little update with the following changelog:
    Order by Color button (wich orders by this order: Color > Creature or no creature > Rarity).
    – Every card that is not chosen when you press Load Deck, goes automatically to the end of the sideboard.
    – Mythics problem solved.
    – Only one click to add card.
    – Easily change between main and side by pressing F1 and F2

    If you are interested you can find more about it here:
    http://www.octgn.net/forum/index.php?topic=342.0

    Thanks jods, happy new year

  18. Oen Says:

    “There is a package with updated xmls for T2 sets available at the usual place. Use them until sets are updated.”

    When is the update? 🙂

  19. Gaspare Says:

    Standard sets are already updated 😉

    Other sets will be after jods fixes the mythic issue, in the next release of octgn that should be in early january

  20. Etienne Dupuis Says:

    Thanks Jod amazing job. I really like how you display the card pools in the seal draft, much better than the regular *datagrid* list when you build a deck.

    Anyway, great job.

    PS: is sound comming soon? 😛

  21. HoiHo Says:

    Ehhh….. Come on , still errors while playing , and its not sealed but normal t2 constructed game:

    [quote]System.Reflection.TargetInvocationException: Obiekt docelowy wywołania zgłosił wyjątek. —> System.ArgumentOutOfRangeException: Indeks i długość muszą mieścić się w granicach elementu Lista.
    Nazwa parametru: index
    w System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
    w System.Collections.ObjectModel.Collection`1.Insert(Int32 index, T item)
    w Octgn.Play.Group.AddAt(Card card, Int32 idx)
    w Octgn.Play.Actions.MoveCard.Do()
    w Octgn.Networking.Handler.MoveCard(Player player, Card card, Group to, Int32 idx, Boolean faceUp)
    w Octgn.Networking.BinaryParser.Parse(Byte[] data)
    w Octgn.Networking.Handler.ReceiveMessage(Byte[] data)
    — Koniec śladu stosu wyjątków wewnętrznych —
    w System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
    w System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
    w System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
    w System.Delegate.DynamicInvokeImpl(Object[] args)
    w System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
    w System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
    w System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
    w System.Windows.Threading.DispatcherOperation.InvokeImpl()
    w System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
    w System.Threading.ExecutionContext.runTryCode(Object userData)
    w System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
    w System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
    w System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    w System.Windows.Threading.DispatcherOperation.Invoke()
    w System.Windows.Threading.Dispatcher.ProcessQueue()
    w System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
    w MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
    w MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
    w System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
    w System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
    w System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
    w System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter)
    w System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
    w MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
    w MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
    w System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
    w System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
    w System.Windows.Threading.Dispatcher.Run()
    w System.Windows.Application.RunDispatcher(Object ignore)
    w System.Windows.Application.RunInternal(Window window)
    w System.Windows.Application.Run(Window window)
    w System.Windows.Application.Run()
    w Octgn.OctgnApp.Main()[/quote]

  22. lloyd irvin Says:

    I’ve been exploring for a bit for any high quality articles or weblog posts on this sort of area . Exploring in Yahoo I eventually stumbled upon this site. Studying this info So i’m glad to express that I’ve an incredibly excellent uncanny feeling I came upon just what I needed. I such a lot undoubtedly will make certain to do not put out of your mind this website and give it a glance regularly.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: