Nocturne Release Update, Plus Dominion Online Updates

Dominion: Nocturne is shipping out, and is expected to hit stores by the end of this week. It is estimated that stores should start getting them in on Thursday or the weekend at the latest. Obviously, some stores may not get them in until next week depending on when they get their copies from their distributor.

The newest expansion will go live on Dominion Online on Thursday at 10:00PM UTC or 2PM PDT/5PM EST. In addition, Stef posted an update on the ShuffleiT forum detailing a special update that goes into effect with Nocturne’s release plus also an update on the overall state of Dominion Online. Here is Stef’s exact quote:

I know there has been a lack of communication here, Nocturne has been pretty overwhelming. I still don’t have much time, but a bit of reflection never hurts.

We squeezed in some features with Nocturne that will help the general client.
– duration attacks are now visible, and enchantress has the pig
– your starting cards are shown at the start of the game
– revised kingdom layout in the client

Thursdays release will have Nocturne fully implemented, but also:
– autoplay (finally)
– improved undo vs bots

After Nocturne goes live, we will continue with…
– rewriting the client. The goal here is
  – clear domain model & readable/maintainable code
  – full control over zones displayed; always find a spot for all zones with cards in them on the screen
  – full control over animations; enable users to animate all cardmoves and do something special for moves that change ownership
  – visualize the ordering of abilities
  – if all of the above succeeded, we can by default turn the log off.

– refactor the gameserver. Currently my gameserver has a problem. It’s about states & asynchronous programming.
I use constructs like these:

public void onPlay(Context context, Player player, PlayCardAbility playCardAbility, Handler handler) {
List estates = player.getHand().getCards(c -> c.getName() == CardObjectName.ESTATE);
context.ask(new WhatCardToDiscardOptional(getCardObjectAssociation(), storyOf(QuestionId.BARON), estates), discardMe -> {
if (discardMe.isPresent()) {
player.discardFromHand (context, discardMe.get(), getCardObjectAssociation(), discarded -> {
player.addCoins(context, 4);
} else {
player.gain(context, getCardObjectAssociation(), CardObjectName.ESTATE, gained -> handler.handle(null));

This works fine, but I’m not in love with using handlers this way, and it’s no longer sufficient. Suppose you have played the baron, and there aren’t any Estates left in the supply. Now you could decide not to discard an Estate. After you decided that, the gamestate changed, even though there wasn’t a single card that moved or counter that got updated.

Also you see a difference in how I add buys and coins. Adding coins could have some side-effect which needs logging (the -1 coin token) and buys can not. I don’t like that it makes that distinction; in the new situation I want to have a more general idea of moving from one state to the next, even after something as insignificant as adding a buy.

The big problem here is that I can’t fully reflect on the state I’m in. This baron is only moving forward.

In the new situation, I want to add the concept of a “stage” I’m in while executing the Baron, and let every stage create some kind of Mutation I apply to the gamestate to move to the next stage. This Mutation will also have a function to undo itself, and needs to hold enough information to perform that undo.

Off course baron is one of the easiest cards here. It gets significantly trickier with cards that target other cards (throne room), could lose track of things or interact with your opponents. It will be quite an undertaking to apply these changes to all cards.

But the reward should be significant: then I can move forth and back through a game. This will allow the gameserver to support a much more powerful “delayed decisions” like we have on mining village now. But most importantly it will allow me to start working on a real AI.

I want to be able to synchronize both those gamestates and the Mutations. This should allow for a much more powerful logging system, allow you to save/load games, and most importantly: create a script that has direct instructions for the gameserver.

I want that to develop into a scripting language that allows the creation of campaigns and tutorials.

I would like to give more attention to compatibility with Android and iPad devices.

Oh and I want to hammer down the known card bugs; at least all the ones that aren’t interface related.

End quote.

So, there you have it. Auto play is coming, and that should be nice and make it so that players can play faster and not have to make “pointless” decisions over and over.

To discuss this announcement, click here.

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

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

You are commenting using your 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 )

Connecting to %s