The main interface to Squib. Yields to a block that is used for most of Squib's operations. The majority of the :doc:`DSL methods </dsl/index>` are instance methods of ``Squib::Deck``.
Options
-------
These options set immutable properties for the life of the deck. They are not intended to be changed in the middle of Squib's operation.
width
default: ``825``
the width of each card in pixels, :doc:`including bleed </bleed>`. Supports :doc:`/units` (e.g. ``'2.5in'``).
height
default: ``1125``
the height of each card in pixels, :doc:`including bleed </bleed>`. Supports :doc:`/units` (e.g. '3.5in').
cards
default: ``1``
the number of cards in the deck
dpi
default: ``300``
the pixels per inch when rendering out to PDF, doing :doc:`/units`, or other operations that require measurement.
config
default: ``'config.yml'``
the file used for global settings of this deck, see :doc:`/config`. If the file is not found, Squib does not complain.
.. note ::
Since this option has ``config.yml`` as a default, then Squib automatically looks up a ``config.yml`` in the current working directory.
layout
default: ``nil``
load a YML file of :doc:`custom layouts </layouts>`. Multiple files in an array are merged sequentially, redefining collisons in the merge process. If no layouts are found relative to the current working directory, then Squib checks for a `built-in layout <https://github.com/andymeneely/squib/tree/master/lib/squib/layouts>`_.
This guide is for folks who are new to coding and/or Ruby. Feel free to skip it if you already have some coding experience.
Not a Programmer?
-----------------
`I'm not a programmer, but I want to use Squib. Can you make it easy for non-programmers?`
`I'm not a programmer, but I want to use Squib. Can you make it easy for non-programmers?`
If you want to use Squib, then you want to automate the graphics generation of a tabletop game in a data-driven way. You want to be able to change your mind about icons, illustrations, stats, and graphic design - then rebuild your game with a just a few keystrokes. Essentially, you want to give a list of instructions to a computer, and have it execute your bidding.
-- `Frequently Asked Question`
If you want to use Squib, then you want to automate the graphics generation of a tabletop game in a data-driven way. You want to be able to change your mind about icons, illustrations, stats, and graphic design - then rebuild your game with a just a few keystrokes. Essentially, you want to give a list of instructions to the computer, and have it execute your bidding.
If you want those things, then I have news for you. I think you *are* a programmer. And maybe Squib will finally be your excuse to learn some coding.
If you want those things, then I have news for you. I think you *are* a programmer... who just needs to learn some coding. And maybe Squib will finally be your excuse!
Squib is a Ruby library. To learn Squib, you will need to learn Ruby. There is no getting around that fact. Don't fight it, embrace it.
Squib is a Ruby library. To learn Squib, you will need to learn Ruby. There is no getting around that fact. Don't fight it, embrace it.
Fortunately, Squib doesn't really require tons of Ruby-fu to get going. You can really just start from the examples and go from there. And I've done my best to keep to Ruby's own philosophy that programming in it should be a delight, not a chore.
Fortunately, Squib doesn't really require tons of Ruby-fu to get going. You can really just start from the examples and go from there. And I've done my best to keep to Ruby's own philosophy that programming in it should be a delight, not a chore.
Doubly fortunately, Ruby is wonderfully rich in features and expressive in its syntax. Ruby has a vibrant, friendly community (much like board game geeks!). Ruby is the language of choice for many new programmers, including many universities. On the flip side, Ruby is "industrial strength", so it really can do just about anything you need it to. Plus, resources for learning how code are ubiquitous on the Internet.
Doubly fortunately,
* Ruby is wonderfully rich in features and expressive in its syntax.
* Ruby has a vibrant, friendly community with people who love to help. I've always thought that Ruby people and board game people would be good friends if they spent more time together.
* Ruby is the language of choice for many new programmers, including many universities.
* Ruby is also "industrial strength", so it really can do just about anything you need it to.
Plus, resources for learning how to code are ubiquitous on the Internet.
In this article, we'll go over some topics that you will undoubtedly want to pick up if you're new to programming or just new to Ruby.
In this article, we'll go over some topics that you will undoubtedly want to pick up if you're new to programming or just new to Ruby.
# What You DON'T Need To Know about Ruby for Squib
What You DON'T Need To Know about Ruby for Squib
------------------------------------------------
Let's get a few things out of the way. When you are out there searching the interwebs for solutions to your problems, you will *not* need to learn anything about the following things:
Let's get a few things out of the way. When you are out there searching the interwebs for solutions to your problems, you will *not* need to learn anything about the following things:
* **Rails**. Ruby on Rails is a heavyweight framework for web development (awesome in its own way, but not relevant to learning Ruby). Squib is about scripting, and will never be a web app.
* **Object-Oriented Programming**. While OO is very important for developing long-term, scalable applications, some of the philosophy around "Everything in Ruby is an object" can be confusing to newcomers. It's not super-important to grasp this concept for Squib. This means material about classes, modules, mixins, attributes, etc. are not really necessary for Squib scripts. (Contributing to Squib, that's another matter.)
* **Metaprogramming**. Such a cool thing in Ruby... don't worry about it for Squib.
# What You Need to Know about Ruby for Squib
* **Rails**. Ruby on Rails is a heavyweight framework for web development. It's awesome in its own way, but it's not relevant to learning Ruby as a language by itself. Squib is about scripting, and will never (NEVER!) be a web app.
* **Object-Oriented Programming**. While OO is very important for developing long-term, scalable applications, some of the philosophy around "Everything in Ruby is an object" can be confusing to newcomers. It's not super-important to grasp this concept for Squib. This means material about classes, modules, mixins, attributes, etc. are not really necessary for Squib scripts. (Contributing to Squib, that's another matter - we use OO a lot internally.)
* **Metaprogramming**. Such a cool thing in Ruby... don't worry about it for Squib. Metaprogramming is for people who literally sleep better at night knowing their designs are extensible for years of software development to come. You're just trying to make a game.
What You Need to Know about Ruby for Squib
------------------------------------------
I won't give you an introduction to Ruby - other people do that quite nicely (see Resources at the bottom of this article). Instead, as you go through learning Ruby, you should pay special attention to the following:
I won't give you an introduction to Ruby - other people do that quite nicely (see Resources at the bottom of this article). Instead, as you go through learning Ruby, you should pay special attention to the following:
@ -35,21 +52,20 @@ I won't give you an introduction to Ruby - other people do that quite nicely (se
* String interpolation
* String interpolation
* Hashes are important, especially for Excel or CSV importing
* Hashes are important, especially for Excel or CSV importing
* Editing Yaml. Yaml is not Ruby *per se*, but it's a data format common in the Ruby community and Squib uses it in a couple of places (e.g. layouts and the configuration file)
* Editing Yaml. Yaml is not Ruby *per se*, but it's a data format common in the Ruby community and Squib uses it in a couple of places (e.g. layouts and the configuration file)
* Methods are useful, but not immediately necessary, for most Squib scripts.
If you are looking for some advanced Ruby-fu, these are useful to brush up on:
If you are looking for some advanced Ruby-fu, these are useful to brush up on:
* Enumerable - everything you can do with iterating over an Array, for example
* ``Enumerable`` - everything you can do with iterating over an Array, for example
* `map` - convert one Array to another
* ``map`` - convert one Array to another
* `zip` - combine two arrays in parallel
* ``zip`` - combine two arrays in parallel
* `inject` - process one Enumerable and build up something else
* ``inject`` - process one Enumerable and build up something else
# Other Important Programming Things
Find a good text editor
-----------------------
These are things that aren't specific to the Ruby language itself, but are essential if you're new to programming.
The text editor is a programmer's most sacred tool. It's where we live, and it's the tool we're most passionate (and dogmatic) about. My personal favorite editors are `SublimeText <http://www.sublimetext.com/3>`_ and `Atom <http://atom.io>`_. There are a bajillion others. The main things you'll need for editing Ruby code are:
## Find a good text editor
The text editor is a programmer's most sacred tool. It's where we live, and it's the tool we're most passionate (and dogmatic) about. My personal favorite editors are [SublimeText](http://www.sublimetext.com/3) and [Atom](http://atom.io). There are a bajillion others. The main things you'll need for Squib are:
* Line numbers. When you get an error, you'll need to know where to go.
* Line numbers. When you get an error, you'll need to know where to go.
* Monospace fonts. Keeping everything lined up is important, especially in keeping indentation.
* Monospace fonts. Keeping everything lined up is important, especially in keeping indentation.
* Syntax highlighting. You can catch all kinds of basic syntax mistakes with syntax highlighting. My personal favorite syntax highlighting theme is Monokai.
* Syntax highlighting. You can catch all kinds of basic syntax mistakes with syntax highlighting. My personal favorite syntax highlighting theme is Monokai.
@ -57,55 +73,67 @@ The text editor is a programmer's most sacred tool. It's where we live, and it's
There are a ton of other things that these editors will do for you. If you're just starting out, don't worry so much about customizing your editor just yet. Work with it for a while and get used to the defaults. After 30+ hours in the editor, only then should you consider installing plugins and customizing options to fit your preferences.
There are a ton of other things that these editors will do for you. If you're just starting out, don't worry so much about customizing your editor just yet. Work with it for a while and get used to the defaults. After 30+ hours in the editor, only then should you consider installing plugins and customizing options to fit your preferences.
## Command line basics.
Command line basics
-------------------
Executing Ruby is usually done through the command line. Depending on your operating system, you'll have a few options.
The way that most Ruby programming is done is through the command line. Depending on your operating system, you'll have a few options.
* On Macs, you've got the Terminal, which is essentially a Unix shell in Bash (Bourne-Again SHell). This has an amazing amount of customization possible with a long history in the Linux/Unix/BSD world.
* On Macs, you've got the Terminal, which is essentially a Unix shell in Bash (Bourne-Again SHell). This has an amazing amount of customization possible with a long history in the Linux/Unix/BSD world.
* On Windows, there's the Command Prompt (Windows Key, `cmd`). It's a little janky, but it'll do. I've developed Squib primarily in Windows using the Command Prompt.
* On Windows, there's the Command Prompt (Windows Key, `cmd`). It's a little janky, but it'll do. I've developed Squib primarily in Windows using the Command Prompt.
* If you're on Linux/BSD/etc, you undoubtedly know what the command line is.
For example::
The command line is where you initiate your commands. For example:
$ cd c:\game-prototypes
```sh
$ gem install squib
$ gem install squib
$ squib new tree-gnome-blasters
$ gem up squib
$ ruby deck.rb
$ bundle install
$ rake
$ ruby deck.rb
$ bundle install
$ rake
$ gem up squib
$ cd c:\work\my-cool-game
```
This might seem arcane at first, but the command line is the single most powerful and expressive tool in computing... if you know how to harness it.
This might seem arcane at first, but the command line is the single most powerful and expressive tool in computing... if you know how to harness it.
## Edit-Run-Check.
Edit-Run-Check.
---------------
To me, the most important word in all of software development is *incremental*. When you're climbing up a mountain by yourself, do you wait to put in anchors until you reach the summit? No!! You anchor yourself along the way frequently so that when you fall, it's not very far.
To me, the most important word in all of software development is *incremental*. When you're climbing up a mountain by yourself, do you wait to put in anchors until you reach the summit? No!! You anchor yourself along the way frequently so that when you fall, you don't fall very far.
In programming, you need to be running your code often. Very often. In an expressive language like Ruby, you should be running your code every 60-90 seconds (seriously). Why? Because if you make a mistake, then you know that you made it in the last 60-90 seconds, and your problem is that much easier to solve. Solving one bug might take two minutes, but solving three bugs will take 20 (empirical studies have actually backed this up).
In programming, you need to be running your code often. Very often. In an expressive language like Ruby, you should be running your code every 60-90 seconds (seriously). Why? Because if you make a mistake, then you know that you made it in the last 60-90 seconds, and your problem is that much easier to solve. Solving one bug might take two minutes, but solving three bugs at once will take ~20 minutes (empirical studies have actually backed this up exponentiation effect).
How much code can you write in 60-90 seconds? Maybe 1-5 lines, for fast typists. Think of it this way: the longer you go without running your code, the more debt you're accruing because it will take longer to fix all the bugs you haven't fixed yet.
How much code can you write in 60-90 seconds? Maybe 1-5 lines, for fast typists. Think of it this way: the longer you go without running your code, the more debt you're accruing because it will take longer to fix all the bugs you haven't fixed yet.
That means your code should be stable very often. You'll pick up little tricks here and there. For example, whenever you type a `(`, you should immediately type a `)` afterward and edit in the middle (some text editors even do this for you). Likewise, after every `do` you should type `end` (that's a Ruby thing). Tricks like that are all about reducing what you have to remember so that you can keep your code stable.
That means your code should be stable very often. You'll pick up little tricks here and there. For example, whenever you type a ``(``, you should immediately type a ``)`` afterward and edit in the middle (some text editors even do this for you). Likewise, after every ``do`` you should type ``end`` (that's a Ruby thing). There are many, many more. Tricks like that are all about reducing what you have to remember so that you can keep your code stable.
With Squib, you'll be doing one other thing: checking your output. Make sure you have some specific cards to check constantly to make sure the card is coming out the way you want. The Squib method :doc:`/dsl/save_png` (or ones like it) should be one of the first methods you write when you make a new deck.
As a result of all these, you'll have lots of windows open when working with Squib. You'll have a text editor to edit your source code, your spreadsheet (if you're working with one), a command line prompt, and a preview of your image files. It's a lot of windows, I know. That's why computer geeks usually have multiple monitors!
With Squib, you'll be doing one other thing: checking your output. Make sure you have some specific cards or output to check constantly to make sure the card is coming out the way you want. The Squib method `save_png` (or ones like it) should be one of the first methods you write when you make a new deck.
So, just to recap: your edit-run-check cycle should be *very* short. Trust me on this one.
So, just to recap: your edit-run-check cycle should be *very* short. As a result, you'll have lots of windows open when working with Squib. You'll have a text editor to edit your source code, your spreadsheet (if you're working with one), a command line prompt, and a preview of your image files. (And now you understand more about why computer geeks have multiple monitors!)
## Plan to Fail
Plan to Fail
------------
If you get to a point where you can't possibly figure out what's going on that means one thing.
If you get to a point where you can't possibly figure out what's going on that means one thing.
You're human.
You're human.
Everyone runs into bugs they can't fix. Everyone. Take a break. Put it down. Talk about it out loud. And then, of course, you can always [[Get Help]].
Everyone runs into bugs they can't fix. Everyone. Take a break. Put it down. Talk about it out loud. And then, of course, you can always :doc:`/help`.
# Ruby Learning Resources
Ruby Learning Resources
-----------------------
Here are some of my favorite resources for getting started with Ruby. A lot of them assume you are also new to programming in general. They do cover material that isn't very relevant to Squib, but that's okay - learning is never wasted, only squandered.
Here are some of my favorite resources for getting started with Ruby. A lot of them assume you are also new to programming in general. They do cover material that isn't very relevant to Squib, but that's okay - learning is never wasted, only squandered.
[CodeSchool's TryRuby](https://www.codeschool.com/courses/try-ruby). This is one of my favorites. It's pretty basic but it walks you through the exercises interactively and through challenges.
This is one of my favorites. It's pretty basic but it walks you through the exercises interactively and makes good use of challenges.
[RubyMonk.com](https://rubymonk.com/). An interactive explanation through Ruby. Gets a bit philosophical, but hey, what else would you expect from a monk??
`RubyMonk.com <https://rubymonk.com/>`_
An interactive explanation through Ruby. Gets a bit philosophical, but hey, what else would you expect from a monk?
[Ruby's Own Website: Getting Started](https://www.ruby-lang.org/en/documentation/quickstart/)
`Ruby's Own Website: Getting Started <https://www.ruby-lang.org/en/documentation/quickstart/>`_
This will take you through the basics of programming in Ruby. It works mostly from the Interactive Ruby shell `irb`, which is pretty helpful for seeing how things work and what Ruby syntax looks like.
This will take you through the basics of programming in Ruby. It works mostly from the Interactive Ruby shell `irb`, which is pretty helpful for seeing how things work and what Ruby syntax looks like.
[Why's Poignant Guide to Ruby](http://poignant.guide/) No list of Ruby resources is complete without a reference to this, well, poignant guide to Ruby. Enjoy.
`Why's Poignant Guide to Ruby <http://poignant.guide/>`_
No list of Ruby resources is complete without a reference to this, well, poignant guide to Ruby. Enjoy.
Squib is all about being able to change your mind quickly. Change data, change layout, change artwork, change text. But where do we start? What do we work on first?
The key to prototyping tabletop games is *playtesting*. At the table. With humans. Printed components. That means that we need to get our idea out of our brains and onto pieces of paper as fast as possible.
But! We also want to get the *second* (and third and fourth and fifth...) version of our game back to the playtesting table quickly, too. If we work with Squib from day one, our ability to react to feedback will be much smoother once we've laid the groundwork.
In this series of guides, we'll introduce you to Squib's key features by also walking you through a basic prototype. We'll take a more circuitous route than normal so we can pick apart what Squib is actually doing so that we can leverage its features.
Get Installed and Set Up
-----------------------------
The ordinary installation is like most Ruby gems::
$ gem install squib
See :doc:`/install` for more details.
This guide also assumes you've got some basic Ruby experience, and you've got your tools set up (i.e. text editor, command line, image preview, etc). See :doc:`part_0_learning_ruby` to see my recommendations.
Our Idea: Familiar Fights
-------------------------
Let's start with an idea for a game: Familiar Fights. Let's say we want to have players fight each other based on collecting cards that represent their familiars, each with different abilities. We'll have two factions: drones and humans. Each card will have some artwork in it, and some text describing their powers.
First thing: the title. It stnks, I know. It's gonna change. So instead of naming the directory after our game and getting married to our bad idea, let's give our game a code name. I like to use animal names, so let's go with Arctic Lemming::
Go ahead and put "Familiar Fights" in the IDEAS.md file. [Why all the .md files?](Why Markdown)
If you're using Git or other version control, now's a good time to commit. See [Squib+Git](Squib + Git).
If you want to know what all of those files we just created are, check out [[squib new explained]].
Data or Layout?
---------------
From a prototyping standpoint, we really have two directions we can work from:
* Laying out an example card
* Working on the deck data
There's no wrong direction here - we'll need to do both to get our idea onto the playtesting table. Go where your inspiration guides you. For this example, let's say I've put together ideas for four cards. Here's the data:
====== ======= ===============================
name faction power
====== ======= ===============================
Ninja human Use the power of another player
Pirate human Steal 1 card from another player
Zombie drone Take a card from the discard pile
Robot drone Draw two cards
====== ======= ===============================
If you're a spreadsheet person, go ahead and put this into Excel (in the above format). Or, if you want to be plaintext-friendly, put it into a comma-separated format (CSV). Like this::
name,faction,power
Ninja,human,"Use the power of another player"
Pirate,human,"Steal 1 card from another player"
Zombie,drone,"Take a card from the discard pile"
Robot,drone,"Draw two cards"
Initial Card Layout
-----------------------------
Ok let's get into some code now. Here's an "Hello, World" code snippet
* Line 1: this code will bring in the Squib library for us to use. Keep this at the top.
* Line 2: By convention, we put a blank line between our `require` statements and the rest of our code
* Line 3: Define a new deck of cards. Just 1 card for now
* Line 4: Set the background to pink. Colors can be in various notations - see :doc:`/colors`.
* Line 5: Draw a rectangle around the edge of the deck. Note that this has no arguments, because :doc:`/parameters`.
* Line 6: Put some text in upper-left the corner of the card.
* Line 7: Save our card out to a png file called ``card_00.png``. Ordinarily, this will be saved to ``_output/card_00.png``, but in our examples we'll be saving to the current directory (because this documentation has its examples as GitHub gists and gists don't have folders - I do not recommend having ``dir: '.'`` in your code)
Now let's incrementally convert the above snippet into just one of our cards. Let's just focus on one card for now. Later we'll hook it up to our CSV and apply that to all of our cards.
You may have seen in some examples that we can just put in x-y coordinates into our DSL method calls (e.g. ``text x: 0, y: 100``). That's great for customizing our work later, but we want to get this to the table quickly. Instead, let's make use of Squib's feature (see :doc:`/layouts`).
Layouts are a way of specifying some of your arguments in one place - a layout file. The ``squib new`` command created our own ``layout.yml`` file, but we can also use one of Squib's built-in layout files. Since we just need a title, artwork, and description, we can just use ``economy.yml`` (inspired by a popular deck builder that currently has *dominion* over the genre). Here's how that looks:
* **Black-and-white**. We're now only using black or white so that we can be printer-friendly.
* **Safe and Cut**. We added two rectangles for guides based on the poker card template from `TheGameCrafter.com <http://www.thegamecrafter.com>`_. This is important to do now and not later. In most print-on-demand templates, we have a 1/8-inch border that is larger than what is to be used, and will be cut down (called a *bleed*). Rather than have to change all our coordinates later, let's build that right into our prototype. Squib can trim around these bleeds for things like :doc:`/dsl/showcase`, :doc:`/dsl/hand`, :doc:`/dsl/save_sheet`, :doc:`/dsl/save_png`, and :doc:`/dsl/save_pdf`.
* **Title**. We added a title based on our data.
* **layout: 'foo'**. Each command references a "layout" rule. These can be seen in our layout file, which is a built-in layout called `economy.yml` (see [ours on GitHub](https://github.com/andymeneely/squib/blob/master/lib/squib/layouts/economy.yml)). Later on, we can define our own layout rules in our own file, but for now we just want to get our work done as fast as possible and make use of the stock layout.
Multiple Cards
-----------------------------
Ok now we've got a basic card. But we only have one. The real power of Squib is the ability to customize things *per card*. So if we, say, want to have two different titles on two different cards, our `text` call will look like this:
```ruby
text str: ['Zombie', 'Robot'], layout: 'title'
```
When Squib gets this, it will:
* See that the `str:` option has an array, and put `'Zombie'` on the first card and `'Robot'` on the second.
* See that the `layout:` option is NOT an array - so it will use the same one for every card.
So technically, these two lines are equivalent:
```ruby
text str: ['Zombie', 'Robot'], layout: 'title'
text str: ['Zombie', 'Robot'], layout: ['title','title']
```
Ok back to the game. We COULD just put our data into literal arrays. But that's considered bad programming practice (called *hardcoding*, where you put data directly into your code). Instead, let's make use of our CSV data file.
What the `csv` command does here is read in our file and create a hash of arrays. Each array is a column in the table, and the header to the colum is the key to the hash. To see this in action, check it out on Ruby's interactive shell (`irb`):
```sh
$ irb
2.1.2 :001 > require 'squib'
=> true
2.1.2 :002 > Squib.csv file: 'data.csv'
=> {"name"=>["Ninja", "Pirate", "Zombie", "Robot"], "class"=>["human", "human", "drone", "drone"], "power"=>["Use the power of another player", "Steal 1 card from another player", "Take a card from the discard pile", "Draw two cards"]}
```
So, we COULD do this:
```ruby
require 'squib'
Squib::Deck.new cards: 4, layout: 'economy.yml' do
data = csv file: 'data.csv'
#rest of our code
end
```
**BUT!** What if we change the number of total cards in the deck? We won't always have 4 cards (i.e. the number 4 is hardcoded). Instead, let's read in the data outside of our `Squib::Deck.new` and then create the deck size based on that:
```ruby
require 'squib'
data = Squib.csv file: 'data.csv'
Squib::Deck.new cards: data['name'].size, layout: 'economy.yml' do
#rest of our code
end
```
So now we've got our data, let's replace all of our other hardcoded data from before with their corresponding arrays:
```ruby
require 'squib'
data = Squib.csv file: 'data.csv'
Squib::Deck.new cards: data['name'].size, layout: 'economy.yml' do
background color: 'white'
rect layout: 'cut' # cut line as defined by TheGameCrafter
rect layout: 'safe' # safe zone as defined by TheGameCrafter
text str: data['name'], layout: 'title'
text str: data['power'], layout: 'description'
save_png
end
```
Awesome! Now we've got our all of our cards prototyped out. Let's add two more calls before we bring this to the table:
* `save_pdf` that stitches our images out to pdf
* A version number, based on today's date
```ruby
require 'squib'
data = Squib.csv file: 'data.csv'
Squib::Deck.new cards: data['name'].size, layout: 'economy.yml' do
background color: 'white'
rect layout: 'cut' # cut line as defined by TheGameCrafter
rect layout: 'safe' # safe zone as defined by TheGameCrafter
text str: data['name'], layout: 'title'
text str: data['power'], layout: 'description'
text str: Time.now, layout: 'credits'
save_png
save_pdf trim: 37.5
end
```
The file `_output/output.pdf` gets created now. Note that we *don't* want to print out the bleed area, as that is for the printing process, so we add a 1/8-inch trim (Squib defaults to 300ppi, so 300/8=37.5). The `save_pdf` defaults to 8.5x11 piece of landscape paper, and arranges the cards in rows - ready for you to print out and play!
If you're working with version control, I recommend committing multiple times throughout this process. At this stage, I recommend creating a tag when you are ready to print something out so you know what version precisely you printed out.
To the table!
-----------------------------
Squib's job is done, for at least this prototype anyway. Now let's print this sheet out and make some cards!
My recommended approach is to get the following:
* A pack of standard sized sleeves, 2.5"x3.5"
* Some cardstock to give the cards some spring
* A paper trimmer, rotary cutter, knife+steel ruler - some way to cut your cards quickly.
Print your cards out on regular office paper. Cut them along the trim lines. Also, cut your cardstock (maybe a tad smaller than 2.5x3.5) and sleeve them. I will often color-code my cardstock backs in prototypes so I can easily tell them apart. Put the cards into the sleeves. You've got your deck!
Now the most important part: play it. When you think of a rule change or card clarification, just pull the paper out of the sleeve and write on the card. These card print-outs are short-lived anyway.
When you playtest, take copious notes. If you want, you can keep those notes in the PLAYTESTING.md file.
Next up...
-----------------------------
We've got a long way to go on our game. We need artwork, iconography, more data, and more cards. We have a lot of directions we could go from here, so in our next guide we'll start looking at a variety of strategies. We'll also look at ways we can keep our code clean and simple so that we're not afraid to change things later on.