John Bintz's Blog


Game Design Journal: CDS game, post 2

So it's been a few weeks since I was able to do some solid work on the card-driven strategy game I've been putting together and hope to have ready for Unpub 5. The last version of it was very rough, with just written-on cards for what all of the individual card abilities were.

During a slow time at Baltimore Comic-Con, I entered in all that textual data into the SVGGVS spreadsheet for the game and reworked the card template so that card effects and other information would show up properly:

I played this version a few times by myself before subjecting my friend Gavin to the game, and I'm glad I did, becaue the experience of playing it with another person showed me just where all the flaws were, and most of them came down to complexity and inconsistency.

One of the goals of this unnamed prototype is to bring in as much of the experience I enjoy from Twilight Struggle with much less overhead. The first things I found that made playing too complex were the following:

  • The text on the cards and all the different states I had to manage made it rough to keep track of what was going on. I even ended up making a ridiculously complex player aide that didn't do squat.
  • The method of invoking card powers that were "yours" was annoying.
  • The whole method for card power invocation was bad anyway.
  • Turn and year tracking was a pain.

So, back to the drawing board. This time, I decided to switch out the card text with a series of simple icons:

The icons allow you to do a number of resource/hand/discard pile manipulations, and in the Inkscape document, they're all clones, so when I polish up the icons, they'll all change at once. I make the generic Strength action (what would be an ops action in Twilight Struggle) a separate icon, so you didn't always have the option to do ops-y things. Finally, I decided to remove the dice for resolving certain events and use the dice card-like deck from Impulse to handle random chance things.

By switching to dice cards, it opened up an opportunity to simplfy how all the dice-based actions work, which also provided this game's version of the "Space Race", allowing you to dump cards from your hand that you don't want to play. The original dice actions were:

  • Riots: Each player rolls 1 die. A player adds 1 to their roll if they have the most resources in the disputed location, and 1 for each adjacent location they own. Loser removes difference of resources from location. If still rioting, repeat.
  • Generate resources: Roll 1 die and add the Strength of the card you played. 6+ = 1 resource on your castle.
  • Remove cards from discard pile: Roll 1 die. If less than the Strength of the card, remove the diference between Strength and roll from your discard pile.

Now, with dice cards:

  • Riots: Take 1 card, face down, for participating. Take an additional card if you have the most resources in the riot, or if you own an adjacent location. You may add 1 card from your hand to the riot pile. Flip all cards at once. Highest total card level wins and removes all opponent resources, and adds 1 card to their discard pile per resource removed this way. Silly player wins ties (since Serious player wins card reveal ties).
  • Generate resources: Using the Strength action on the card, flip that many cards from the deck. Total their levels and add that many resources to your castle.
  • Remove cards from discard pile: Same as generate resources, but remove discarded cards instead.

This also eliminates the "All resources on board = you win" win condition, since it'd be too easy to dump all 45 resources on the board this way. Additionally, years and turns are not controlled by sliders. If a player has 1 or less cards in hand at the start of a turn, the year ends. 5 cards are set aside from the deck at the beginning of the game. At the end of the year, the winner of the "play War with your discarded cards" stage takes one of those cards into their hand and the loser removes 2 resources from the board.

This second game went way faster, and was a lot smoother, and a lot more fun. We didn't finish a whole game, but we did move a lot faster through the game and had to deal with a lot fewer fiddly bits. The takeaway from this session was:

  • Removing the "all cards can be the board" mechanic. It's too much to worry about players purposely AP-ing if they have an idea of what's in the deck. I don't want that in this game. The less AP, the better. This means the board is now made out of a separate deck of cards, which will require coming up with some additional cards and bumping up the total card count to 126 to keep the costs in line, but that'll add 5 new game cards, which means I can have more generic Strength cards. Speaking of...
  • Gavin got a hand of cards that basically allowed him to do nothing of consequence. Several cards were "Opponent" or "Silly Lord" only (he was Serious) and he couldn't do anything with them, so he was boned. I don't want that to happen all the time, so I'm going to make sure each card has "You" as a target in some way.
  • The board is going to be smaller, 3x5 instead of 5x5. It should allow players to go more nuts on each other more quickly. This will mean I'll probably bump up the sizes of the locations, so you need more resources in there to butt heads. This would also allow me to easily design a 3 or 4 player expansion down the road.

Finally, SVGGVS got some work done to it. I had a ton of clone in the Inkscape document I was working with, and the original code I used to decide if I neede to unclone an object (if it's text and there needs to be text replacement) decided to loop through every <svg:use> tag in the document, look at its type, and decide what to do, for every card that was build. With a document with around 500 <svg:use> tags, Nokogiri fell to its knees. I reworked that part of the code so that the type evaluation only happens during the first card, and the results are cached for all further cards. Took processing time down from about 5 minutes just to generate SVG files down to about 2. Nice.


Scrum for One Week 17-18-19: Holy hand grenades, Batman, I've been busy!

Sorry for the lack of updates. Things have been ridiculously busy. I've been falling behind on pretty much everything, so this week's sprint goal is Get Back on the Horse. This includes working on the CDS game (which I'll be playtesting with another human this week, neat), the mobile version rewrite of Can't Catch Me, Olivia! (which I'm now doing using Snap.svg, neat), and doing cleanup on the Can't Catch Me, Olivia! Kickstarter (I have cards to draw and people to track down, neat).

My everything also exploded, so Keep Your Office Clean stays up as the kaizen.


Scrum for One Week Sixteen: Intervention and How I Do It

This was a busy week. I spent my time getting ready for Intervention in Rockville. The show went well, though I wished more people had stopeed by. I managed to sell my first copies of Can't Catch Me, Olivia! to non-Kickstarter backers at the show, and even did a custom character card! Sweet!

Before the show I had the bright idea of rewriting the almost-complete Can't Catch Me, Olivia! app I had originally done in ClojureScript. I figured out I had done several things wrong when I first built it, things that became extremely evident after playing a lot of Star Realms and seeing how they put together a turn-based card game with remote sync:

  • The game was built as pass and play first. State was a thing to be manipulated directly, one step at a time, and would have been hard to retrofit so that actions could be replayed on another device after a player's turn was over.
  • For the same reason, plugging in an AI would have been equally tough. I figured out that remote, AI, and pass and play had to go through the same pipeline, which the original code was far from being designed to do.
  • ClojureScript abstracts away JavaScript entirely too much for my liking. I got it to work with AngularJS and other libraries I reach for in my web development, but it was very very painful. It feels like it's either ClojureScript's way or the highway. I decided to get back on the highway and rewrite it in CoffeeScript.

So I decided to make this week's Sprint Goal Complete Game Logic Rewrite for Can't Catch Me, Olivia! Since I'm throwing one away (I really didn't plan to, honest!), development on this new version is going much much faster. I have 1/3 of the cards implemented, and should have the remaining ones done this week. Also this week is the big Kickstarter game dropoff at Brews & Board Games. So I'll be glad to have that over!

This week's kaizen is the usual Keep Your Office Clean. I'm doing it, really!

Finally, I have an article running over at Webcomic Alliance about this very process that I talk about here. It has cartoons! Go read it!



Game Design Journal: CDS Game, entry #1

I dropped out of the 5th Street Games contest because Mid-Life Chorus was taking over my life. I decided to pick up a much bigger project that had been back burnered for a while instead: a card-driven strategy game where the cards also form the board that players manage resources upon.

The game will be a loose combination of some of the mechanics from the following games:

  • Twilight Struggle: 2 players, cards have unique actions which trigger under certain circumstances, insta-win/lose happens in certain game states, some cards are removed from the game as you play
  • Impulse: Cards form the board, pawns are generated and moved between cards and interact with each other
  • Innovation: Every card is unique, some cards are removed from the game first thing
  • Race for the Galaxy: Actions are selected simultaneously
  • Can't Catch Me, Olivia!, Love Letter: Personal discard piles that are used for something
  • War (seriously!): Compare cards from tops of personal decks, highest takes all cards

I really like the "every card is unique" idea from Innovation and Twilight Struggle, but whereas Innovation and Twilight Struggle have a general progression upwards in the power of the cards, the game I'm working on won't have that luxury. Some cards may have some prerequisites, but that's about as far as I'll go. I also really like the simultaneous play option, and in my playtests, it's working quite well, making the gameplay go very fast. It does has a weird timing thing that TS doesn't have, which you'll see in a minute.

The game is intended to be a prequel to a long-form webcomic I want to start in 2015. Anything with "serious lord" and "silly lord" mean the blue player and red player. Each player has a castle at one of the corners of the board. The rest of the board is built with cards from the deck. the map is always the same on the map side, but on the action side, it's always different. This means there are some cards that will never be accessible in each game, though there is a way to potentially get a handful of these cards back into the deck. Each Map card has a Size in the middle.

The rest of the cards are shuffled and 9 are dealt to each player. The game itself is 9 "years" long, with a "year" consisting of 8 "turns" and an end of year resolution phase. Each player starts with Resources at and around their castle and more resources not on the board. These are real physical things in the game world, unlike the ephemeral "influence" in Twilight Struggle. At the start of the year, the player is dealt 9 cards.

At the start of each turn, each player takes a card from their hand and places it, face down, in front of them. Both players reveal at the same time, and the player with the lowest Strength value on their card goes first (like Headlining in TS, but every turn!). If there's a tie, whoever has the lowest Strength card on the top of their personal discard pile goes first. If it's still tied, the Blue player goes first. At that point, the first player has one of three ways to use the card they played:

  • They can move resources from any one card on the board to any other one card on the board, as long as there is at least 0 or more cards with their resource on them in an unbroken line. Map cards are connected by lines to show how resources can move (basically, not diagonally and not wrapping around). If, for instance, your castle's surrounding cards have no resources on them, you can't move resources from your castle to a remote location -- you need to add a resource to one of those cards adjacent to your castle to create a road of sorts to move resources along.
  • They can use the Strength value of the card to attempt to add 1 resource to their castle. They roll 1 die and add the Strength, and if they get 6 or more, they create a resource. Yay!
  • If they own the map location (have as many resources on the card as the Size of the card and no opponent resources) that this card shares, they can perform a Public Works action. They remove all resources from the map card, take the card from the map and put it in their discard pile, then put the just-played action card on the board map-side up. This is good if you are holding a particularly devestating card of your opponent's that you don't want to play, ever!

Each card has an event on it. Events always override game rules.

  • If you play a card that says "event happend automatically", it does!
  • If you play a card with an event of your color or a white card that doesn't happen automatically, you can choose to perform the event at this time. Put a card in your discard pile from the deck and follow the instructions.
  • If you play a card with an event of your opponent's color, the event triggers. You don't put a card in your discard pile.

Basically, if you choose to make an event happen, you put a card in your discard pile.

Once the first player is done, the other player then goes. After both players go, each map card is checked to see if any card has more resources than double the Size of the card on it. If so, the map card is Rioting. This is unlike Twilight Struggle, where the board (the world) was essentially the plaything of the two players (ah, the Cold War). In this game, the board doesn't want to be ruled over too strongly, and it fights back!

Each player rolls a die for each Rioting card and adds the following to their roll:

  • If they have the most resources on that card, they add 1.
  • If they Control (have more resources than the Size of that card and more than their opponent), they add 1.

If the modified rolls are tied, both players remove 1 resource and place 1 card in their discard piles. If not, the loser removes the difference in resources between the rolls, and the winner places a card in their discard pile. Continue until all Riots are resolved.

If at the end of the year, any player has no resources in their castle, or the map cards surrounding their castle are owned by their opponent, they lose.

After 8 turns, each player shuffles up their discard piles and, well, they play War. Not only do the towns fight against you, but the religious organization that gave you some leeway over governance (back story stuff) is watching you, and will step back into control if you push too far! Each player reveals the top card of their discard. The player who played the highest card takes both. If there's a tie, reveal another card until the tie is broken. The winner takes all of those cards. At then end, whoever has the most cards loses 2 resources of their choice. If they have 16 or more cards in their discard pile after this step, they lose the game. This means you can stuff a person's discard pile to DEFCON suicide them. :)

Once this is done, each player counts up the number of map cards they own and puts a resource on their castle for each card they own. Then it repeats for 8 more years.

So far I've completed several partial playthroughs and three complete playthroughs. The three complete playthroughs ended on discard pile detonation. With each playthrough I've been analyzing the strategy each player used and trying to come up with cards that will both help and hinder those strategies. I have about two dozen different approaches I'm compensating for in each direction now, and I have about 2/5 of the deck to still work through. So far it's super-promising. This will be the game I take to Unpub 5, I'm sure. If I can boil down the things I like about Twilight Struggle (and other CDS games like 1989, Labyrinth, and Hannibal: Rome vs. Carthage are on my "to play" list now) into a card game that takes half the time to play, I consider it a win. Impulse did it for 4X games for me (though the rules can be fiddly in places).

More updates as progress continues!


Scrum for One Week Fifteen: Mid-Life Chorus Art is DONE!

It's been a long two months of drawing, but I've finally finished all 48 original Mid-Life Chorus comics. I'm very happy to have the main art for the series done. I alos launched the Your Life's Chorus Kickstarter. This one is designed to be a very slow burn, since it goes along with the comic. It's an experiment, to be sure. We'll see what happens in the next 25 days or so. :)

I've also been doing a lot of prep work for the next Dawn's Dictionary Drama comic. I'll be making an annoucement about that in the next week, right around Intervention.

Finally, I've been working on a new game idea that's starting to come together. I'll be writing up a separate blog post all about that.

This week's Sprint Goal was Finish 4 Music Comics, and I took care of that by Tuesday. This week is Prepare for Intervention. It's my first real show of the year, and I want to make sure I have everything I need!

This week's kaizen was Keep Your Desk Clean. It's not too bad right now, but I'm going to expand the scope a bit this week (since all of my con supplies are in the office) and make it Keep Your Office Clean. The whole thing.

My tasks are all over the place until after Baltimore Comic-Con, when I'll start in heavy production mode for the next Dawn's Dictionary Drama comic. It's going to be in color, which will increase the workload, but I have a way of doing all the coloring and shading so that it should go almost as fast as a black-and-white comic. Yeah!


Scrum for One Week Fourteen: Kickstarter #2 home stretch

I'm on the verge of starting up my second Kickstarter campaign, this time for ylc, so this week involved lots of cleaning up and prep work. Additionally, I only have a small number of Mid-Life Chorus comics to complete before the series is completed. I had a few other things going on so I didn't get as much done this week as prior weeks, but that's ok. Still cranking through things!

This week's Sprint Goal was Finish 3 Music Comics and the rest of the Your Life's Chorus materials. I definitely hit all of those. This week's will be Finish Mid-Life Chorus. Yeah!

This week's kaizen was Stay Off Reddit and I did pretty well at that. I'm going to go back to Keep Your Desk Clean. It could use it.

My first big show of the year, Intervention, comes up in two weeks. I'm really looking forward to it, and I hope to have a lot of material together for it. I might even try to get an ashcan of Mid-Life Chorus together! Yeah!


Join Kickstarter Backer Report CSV files easily with Ruby

I wanted to start putting together the shipping labels for Can't Catch Me, Olivia!, so I downloaded the CSV files from Kickstarter. I decided to use Ruby to join all of the CSV files in a way I could then use LibreOffice to print out labels. I found some weirdness in the CSV file when processing with Ruby's CSV module, so I had to cool up a weird little script to collate all the data together.


Roku 3 and minidlna: New files not showing up in Media Player

I've just run into an issue where a bunch of new files I added to the minidlna share I use for playing files on my Roku 3 (because you can totally do that) was getting out of whack. Several folders were showing up as (null) and one recently updated folder wasn't even visible. The solution was to run sudo minidlna -R to reindex the shares, then restart the service. It took a few minutes and drove CPU up on my poor plug computer to 100%, but it worked, and all files are showing up in Roku Media Player now, so there you go.


Scrum For One First Quarter Update: Whoa nelly!

Wow, what a quarter it's been! I started this Scrum for One thing 14 weeks ago, ever since I got my ScrumMaster certification, and it's pretty crazy-insane how well it's gone. Here's what I managed to do:

  • Finish a Dawn's Dictionary Drama story (I had started that in January, but I kicked it up to full gear starting in April)
  • Assemble, run, and fulfill a Kickstarter campaign for a card game (thanks again!)
  • Come up with three new game ideas, toss two of them, and have a third on the backburner ready to be playtested incrementally (and ready for UnPub 5!)
  • Plan, start drawing, and create promotional material for a one-shot autobio comic
  • And so many other smaller tasks, ideas, and maintenance things!

What worked?

Following what I believe to be the most important parts of Scrum and similar agile systems, like Kanban, was very important, and those are:

  • Limit the number of different things you're working on at one time. Ideally, that number should be one, because context switching is so expensive. Sorry, but you are not good at multitasking!
  • When adding something to the Backlog, write down the Definition of Done, even if you think what needs to be done for the task is the same as the title of the task. You might be surprised and, while working through what needs to be done, discover that this one task should be two or three, or that you shouldn't even do it at all!
  • Determining the value gained from actually doing a task, and deciding if it's worth pushing off or not even doing. I determined that doing a Kickstarter video for Can't Catch Me, Olivia! wasn't worth the effort, so I didn't do one, and it didn't prevent me from reaching my funding goal. I've been kicking around doing a video for Your Life's Chorus, and I think I'm coming to the same conclusion for that project, too. But that's a discussion for another blog entry about tiny Kickstarter campaigns. :)
  • Writing down ideas when I get them is extremely important. I always have Pivotal Tracker up on each computer, and I have P-Tracking for Android always available (annoying it may be at times). If I get an idea while running or standing in line, I'll throw it into the Backlog and flesh it out later.
  • Sprint Goals really kept me focused, and hard.

What didn't?

  • Having a kaizen was almost pointless. Sometimes I acted on it, and sometimes I didn't. It became a source of annoyance more than anything. I'll try to adhere to it for this next quarter, but it may go away at the half-year mark.
  • At the beginning, I didn't use Releases as aggressively as I should have. I started to in this past month, when I had several projects and deadlines overlapping each other. I need to add Releases like there's no tomorrow.

My kaizen was Stay Off Reddit. Moving back to Keep Desk Clean. We'll see how well that works.

Sprint Goal was Finish 4 Music Comics and 18 Character Cards. I finished the comics, but I ran out of cards to draw. :( This week is Finishing up the work on the text and image content for Your Life's Chorus and ripping through 3 comics. Yeah! Let's do this!

Unless otherwise indicated, all content is © 2009-2013 John Bintz. All rights reserved.