Triple pepper chicken, dry sautee is one of my favorite Chinese dishes ever. See attempt 1 and attempt 2.
I did it again. This time, with a much bigger batch of chicken, so we'd have a bunch for leftovers. I used 4 chicken breasts and some to start. The chicken was still a little frozen, so it started to froth up a bunch just like the beef did.
I drained the water and some of the oil off and cooked it a bunch more. I got the chicken to dry out pretty well.
After a while, the chicken was ready to have more stuff added to it. I put in a cup of sichuan peppercorns, about a dozen thai chilis, eight sliced up garlic cloves, and three tablespoons of bean paste. Then I started sauteeing like crazy.
Finally, I added two big bunches of spring onions, and two cups of peppers.
This time, the chicken was pretty dry and the whole mixture wasn't as oily as before, but it was still quite tasty. Also, I did basically the whole recpie from memory this time. Next time, no reference needed. ;)
Some things happened this weekend that made me rethink why I'm actually interested in doing this game design thing. I realized that, like with most projects, I got into it for three reasons:
I wanted to try my hand at a creative activity I enjoyed. I did this with animation, comics, video work, and now, game design.
I wanted something I could draw my cartoons for.
I wanted to build some software solutions to make the workflow easier.
As with pretty much every thing I get into, I go pretty deep, think it will really turn into a "thing", pursue it too hard, then realize that I need to step back for a while, since I don't seem to want to go the long haul for that particular creative expression. For animation, that took about 4 years. For video stuff, about 5. For game design, about a year. I think once I get the rulebook done for Lie Your Face Off!, I'll run a basic, two or three week campaign, for the game, just to have it done. I may do expansions, I may not. I just want to finish the project and be done with it. If I do any other game design work, it'll be small stuff. Maybe a Game Crafter contest or two. Nothing as complex as Lie Your Face Off!
However, I still want to do comics. They still meet my three requirements very well, and don't take as much time to do, and I am pretty well rewarded personally when I do them. I had been telling everyone that I started doing LYFO because "I wanted an art project." Doing art for a game was certainly different, but the graphic design elements, rulebook writing, constant playtesting, balancing, rounding up playtesters and keeping them interested became more work than I really wanted to do. I enjoyed the process, but I should have just done an art project. :)
Also, I have other things I'd like to mess with. I've been wanting to do a small music project for the fun of it. I have another comic idea I'd love to start writing. And I still have some software projects I'd like to do. Also, chores and traveling and other non-work-like things.
I jumped in head first with animation, swam to the bottom with video, and dipped my legs in with game design, but only comics and illustration work seem to make me want to keep swimming the pool over and over. So I'll see you back in the comics world pretty soon, I guess. Lie Your Face Off! will still get done, but I'll be back to Dawn's Dictionary Drama soon enough, I'm sure.
I played another two player game with Superstar Fibber, and it was brutal. I managed to use up most of the deck. I managed to use the nuke cad - discard opponent's target story, and they get to discard one of yours - three times, due to an "I Didn't See That" card pulling another nuke out of the discard pile. Eventually, the right player powered through and got the win. The left player got an insane combo mid-game with about 5 placements and 4 clarifications. It wasn't enough, though it was pretty nuts.
Now that I've had a chance to use the nuke, it definitely does make Clarify actions a lot less insane. Though now I'm rethinking the minimum lie count required for the "complete at end of turn" card. Having to reach just 6 is pretty easy on its own. I'm thinking that placing a lie on that card should short circuit any other place actions, so that thematically, that's the last card you have to place to make it work. That'll mean you'll need the 5 on a story, and the "complete at end of turn" card, and a card low enough to make it work, and you can't chain your way up.
Going to do some in-person testing tomorrow with 2-4 players. Hopefully these recent changes will make it a more balanced game.
Update: Tried it again with the updated "complete at end of turn" rule. Worked better, wasn't as overwhelming for the other players. Keeping it.
Along with the Parents expansion and the Your Go-To Lies expansion, there's one other Lie Your Face Off! expansion I'm working on: Superstar Fibber. This expansion doubles the number of cards in the base game's deck, increases the highest lie value to 30, and adds a few new Embellishments and a new action called Clarify, which allows you to place a lie under the bottom of a story as long as the placement is legal. Since the deck is bigger, stories now need 6 lies in them. The number you have to complete is the same (3, 2, 2) though I may increase that. It's pretty big and interesting to get right. I did a few test games this week.
The first was an in-person 3 player game. The game was over pretty quick, and we didn't make it through even one of the half-decks (it's 216 cards, so we shuffle thoroughly and split the deck in half). It became apparent that, with all those bigger lies out, it was much easier to protect yourself from attacks. The standard Remove action couldn't break through in time. So after discussions w/ my playtesters, I decided to change one of the cards in the expansion to be the only direct target attack card in the game: it allows you to remove a player's entire story from play, but they get to do the same right back to you. There's two of them in there, which should balance out the super-powerful "complete this story once it has six lies in it" card.
The second was a solo 2 player game I played this morning. Both of the "complete story at 6 lies" cards came out, none of the direct target cards. The player on the left started to get hamstrung with some bad draws while the player on the right got some lucky draws. The score was left 39, right 33.
Both of these games have been making me rethink the power value of the Clarify action. Right now, when calculating a card's power, Draw gets 1 point, Remove gets 2 points, and Place gets 3 points. Clarify gets 4 points, but due to its ability to essentially add invincible cards to a story, I may want to bump it up to a 5. That will require rebalancing the Superstar Fibber deck, but it may be worth it. It's easy to get a chain of Place/Clarify cards and add three or four untouchable cards to several stories, and that needs to happen just a smidge less.
Finally, the help text at the bottom of Embellishments needs extra on-card clarification, as in "this is just helpful stuff from the rules, and not a place action." I'll throw a few ideas out there this weekend for people to look over.
So yes, using SVGGVS for making cards for your card games is pretty programmatic, which was starting to bug me a bit. While I don't mind slinging code, the simpler I can keep my project setup, the better. If I can have Google Drive or some other spreadsheet setup drive the entire process (or at least 90% of it), I'd be fine with that.
So that's just what I did!SVGGVS 0.0.4 supports a full spreadsheet-driven workflow. In your Cardfile, you can now strip the entire thing down to simply a reference to a spreadsheet:
Then, you create the spreadsheet, giving the worksheets within some special names. Here's how you define card data (note the Card Data in the worksheet's name):
Any layer with Active Layer in its name will be used as a source for which layers to hide/show, and they're separated by semicolons (so don't use semicolons in your layer names). Any other layer becomes a text or image replacement (note the Superpower Text field you used earlier). Note that I'm taking liberal advantage of the ability to be able to name an Inkscape layer with the phrase (visible) to keep it always active.
And here's how you set up your project (note the SVGGVS Settings in the worksheet's name):
You'll also see that I can define the card sizes by the fields Target and Card Size. Since I deal exclusively in poker-sized cards and get my prototypes printed at The Game Crafter, those were the first defaults I set up. If you want more, just ask me!
The spreadsheet support comes from the roo project, so as long as they support that spreadsheet type, you can use it. Right now I'm using LibreOffice spreadsheets, and I'll be able to continue using my Google Drive spreadsheets with my existing and future projects.
I've been able to recreate the entire puppy-kitten game using this setup. If I needed to modify this data any more, I could add code to the post_read_data property in my @session.configuration and hack away. See the example in the new Cardfile for how that might work.
So that means that SVGGVS is now about as easy to set up and configure for cranking out lots of cards for board games as I can possibly make it! There'll be more refinements as I use it, but if you want a feature that it doesn't have, let me know on Twitter or on the GitHub project. Thanks for reading, and good luck with automating your card game art production!
So you've added a new text field to your puppy-kitty game. Sweet! But guess what: as part of your Kickstarter rewards, you decided to allow people to add pictures of their own pets to the cards. Oh noes, so much work! But with SVGGVS, it's very easy!
Create a directory within the project called images. Put these files in the folder. They're animals that I know!
We're going to place one of those images in the document, and then use our Cardfile to replace that image on each card with the actual images we want to use. First, create an Image layer:
Then, place one of the images on your document and align it how you want. Like with the text field, give it a Label.
Save the template, then modify your Cardfile to reference the path to your images for each card. They're relative paths, relative to the location of your Cardfile:
Run bundle exec svggvs pdf, then check out our cards! So awesome!
If you walked through the last tutorial, you are now able to make your animals noisy or cute. But those are just actions that your characters can perform. Your characters also need super special powers to block the noise or cuteness. So we're going to add a text field that can be updated by our script. Sweet!
Create a new layer in your template. Call it "Superpower":
Then put a text object onto the layer. Position it nicely:
Then open up Object -> Object Properties. We're going to give the text object a Label, which is how SVGGVS knows what to replace in the document:
Now, we're going to modify the Cardfile to inject our new superpowers onto our cards:
And when we run bundle exec svggvs pdf again, we see our superpowers on the cards!
So you got SVGGVS installed and running and were able to create a print-n-play PDF of your sweet puppy-kitten game. Awesome! Now, we're going to add a new feature. Each animal has a special Animal Power, one that you can use to devastate your opponents in single combat. We're going to add those Animal Powers to the card template, then have SVGGVS only show the right ability per card.
Open your template and create a new sublayer under Source. Call it Animal Powers:
We have two powers we want to have available so far: Cute and Noisy. Create sublayers under Animal Powers for each of those:
Our very talented artist, Open Clipart Library, provided us with the artwork for the icons for these powers. First, I put the art for the Cute icon on the Cute layer:
Then I put the art for the Noisy icon on the Noisy layer:
That's all you need to do in Inkscape for now! Go ahead and save your template. Now, you'll be editing your Cardfile. It's best if you use a text editor designed for programmers, so I'd recommend Sublime Text 2. It's powerful and has a GUI. Open up the Cardfile and make it look like the file below. You're adding the layer names from Inkscape into the list of layers to show for each card. Please, type out the code, don't just copypaste! You'll learn better that way. :)
Now go ahead and run bundle exec svggvs pdf from your Terminal and open the PnP file. Are the icons there? If they are, success! If they aren't, check the spelling of the layer names in the Inkscape file and the Cardfile. They should be exact, with no trailing spaces. If you got Ruby errors, look them up on Google. Most likely you'll have added a SyntaxError. They're not scary! All us programmers make that mistake.
Once you get everything working, try adding another power to your cards, one that can change based on the layer names you feed into #active_layers=. In the next part, you'll learn how to create a new text block you can shove text into.
This is the first part of a guide to using SVGGVS and Inkscape to create your cards for your board game. I introducted SVGGVS on this post. You'll need a few things installed on your computer for that to work. This guide is for Linux and Mac OS X machines. You'll need to use the Terminal. Don't be scared! If you're new to the command line, read The CLI Crash Course. I don't really know how to set it up on Windows, sorry!
This is an obvious one. If you're on Linux, use your package manager to install the latest version. On Mac OS X, download it from http://inkscape.org/ and put it in /Applications. You'll need to do one more thing, though: the actual inkscape binary needs to be in your PATH. Use the Alias Solution on the Inkscape wiki.
Once Ruby is installed, install the SVGGVS gem with gem install svggvs. If doing this asks for your password, reopen Terminal. RVM probably didn't kick in right!
ImageMagick and Ghostscript
ImageMagick and Ghostscript are used to process images once Inkscape has rendered them. If you're on Linux, this should be straightforward. If you're on Mac OS X, you should install Homebrew first, and then ImageMagick and Ghostscript.
Your first project!
You probably have a folder where you store your projects. Using your terminal, change into that directory and run svggvs install my-first-project. You'll get a new directory with some files in it:
Enter the directory and run bundle install, then bundle exec svggvs pdf. This will generate a PDF of the two cards described in the Cardfile, in the pnp directory. The game produced is one of the most amazing in the world. Enjoy playing it with your friends!
Take a look at Cardfile and template.svg in Inkscape. While you're browsing the SVG file, open up Object Properties and click around. Compare the Layer names and object Labels to what's in the Cardfile. Make sense?
Tomorrow I'll go into adding a new feature to the template and to the cards in the Cardfile. It'll be easy!
A while back I released nandeck-ruby, a library for building nanDECK directive files. I said I wouldn't be updating it too much because I had built another tool for building cards direct from SVG files, and that I'd release that tool to other game designers eventually.
Well, today's the day. I pushed SVGGVS, my SVG manipulation/duplication/rendering tool to Rubygems this morning. It's still quite sparse, but it has allowed me to build some pretty complex templates for Lie Your Face Off!
The software is very simple. You start by creating an Inkscape file with two top layers, Source and Target. Within Source, create sublayers that represent the parts of your playing card. You could have things that will be on each card like "Background" and "Border" and "Copyright Notice". You'll have things that will only be on certain cards, like "Power Icon" and "Character Stats". There will also be text areas that need to be filled in with content, such as card titles, flavor text, and the like. For those text areas, you assign them Labels within Object Properties, and those text areas can now have their text content replaced by the data in what I'm calling a Cardfile, a definition file for your cards.
Once you've built your template, you'd create the Cardfile for your game. The Cardfile has settings for the particular deck of cards you want to build. The core of the code is the assigning of values to two methods on an SVGGVS::Target object: #active_layers and #replacements. Assign an array to #active_layers to show those layers. Assign a hash with keys that match the labels you put onto your text objects and with values as the replacement text to put your own text in those boxes. You can even give an image in the template a label, and if you send it a replacement value, it will change the image's src to that filepath. Here's what the default Cardfile looks like:
SVGGVS will create individual SVG files each time you call @session.with_new_target. Those, in turn can create PNG files ready for printing. Those, in turn, can create PDF files ready for print'n'play. And, compared to nanDECK, it's a bit faster: on my machine, starting up nanDECK (in Wine), validating the deck file, rendering each card, and saving them all as a PDF takes 6 minutes, 2 seconds. With this setup, it takes 5 minutes 41 seconds. That time in SVGGVS also includes getting the data from Google Drive. Feedback on changes is now a lot faster, since you don't have to adjust the design programmatically. SVGGVS takes advantage of all your available CPU, too. nanDECK and Inkscape are normally single threaded, so if you have more CPUs (I have 2 in this machine) you could get even more throughput.
My data source for Lie Your Face Off! is a Google Spreadsheet, but you can pull in data from anywhere. In the example Cardfile, it's just a big array. You could use a CSV or Excel file too, with the right code. I may add simple CSV support as a drop-in-and-go solution for users who don't want to do any development. That should speed up adoption, I hope.
I'll be doing more posts about this as time goes on. I really want SVGGVS to become a tool that will make it much easier for game designers to automate as much of the tedious process of card setup as possible, because I certainly am not a fan of doing this stuff by hand. And you shouln't be, either. :) If you want to try it out, run gem install svggvs, go to your projects folder, and run svggvs install my-new-card-game. You'll get a Gemfile (bundle install, plz), Cardfile, and a template.svg that's all set up. Run bundle exec svggvs pdf to see what you get!