Beekeeper Labs CrossFire CrossFire

Making a Puzzle with CrossFire


The goal of this document is to show the process of creating a crossword puzzle in CrossFire. It won't be the best possible crossword -- since I'd immediately turn around and sell that to the Times -- but it will be good enough to show what's possible with CrossFire and to let you see the creation process in action. We are aiming for a final result that will look something like the puzzle shown below.

A sample puzzle


You have likely already downloaded and installed CrossFire. If not, or if you are running a version older than the current 1.3.2, you can get download links and full installation instructions from the CrossFire download page.

Initial setup

For starters, let's show you how the configuration dialog is set up. This will let you see the typical settings, and let you assure yourself that you can have the same setup if you want to follow along at home. You can access this dialog via the "Edit->Config" menu entry (on Windows or Linux) or the "CrossFire->Preferences" menu entry (on Macintosh)

The settings dialog: Fill tab

The settings shown above for the Fill tab are CrossFire's default settings. It will ignore any words with scores lower than 5; it will refuse to allow two words in the grid to share more than 3 sequential letters; and it will make reasonable speed/quality tradeoffs (through both the "Candidate ranking quality" and "Speed/Quality tradeoff" options). If you are willing to spend a bit more time waiting and want to see higher quality fill suggestions, you can slide the "Speed/Quality tradeoff" slider higher. I personally like it about 80-90% towards Quality, but I'm a pretty patient person. Your mileage may vary.

The settings dialog: Dictionary tab

The settings shown above for the Dictionary tab also reflect the default configuration. The "MyEdits.dict" file is initially empty, but because it is declared as the "primary" dictionary, it is where any edits (either new words or changes to word scores) will be stored. It is best to keep a special file for this purpose and to keep it at the top of your dictionary list so that your changes will override the values in your other files. "default.dict" is the dictionary provided with CrossFire and, while imperfect, is certainly good enough to let us create a solid crossword.

Most constructors end up collecting additional word lists with more "lively" phrases and topical words. They can be added to this list, and would typically be put just below "default.dict" if they are unscored (or badly scored), and above "default.dict" if they include trustworthy word scores.

The settings dialog: General tab

The settings shown above for the General tab are just slightly modified from the default. We have installed the "Matt Ginsberg clue database" and put the location of its "cluedata" file into the appropriate text box. This lets us see information about clues that other constructors have used when we hover the mouse over words in the grid, and when we are writing clues in the "Clues" tab.

We will now hit "OK" to exit this dialog and actually get started on creating our puzzle.

Creating a theme

The Lookup tab
Some theme candidates
Most newspaper puzzles contain "theme" entries -- sets of 3-5 related entries which give a focus to the rest of the puzzle -- and our puzzle is no exception. Since they are, by convention, the longest entries in the puzzle, we'll want to make all of the theme entries at least 10 letters long. In my personal experience, and in line with my preferences, the very best theme entries are 10,11, 12, or 15 letters long. 13 and 14 letter words require clumsy arrangements of black blocks and usually force the creation of more 3-letter words than I like. (Other constructors are less picky about 3 letter words, but everyone agrees that you shouldn't have too many of them.)

For this puzzle, our theme will consistent of 4 phrases corresponding to the 4 elements. Each phrase will begin with "earth", "air", "fire" or "water". Since these are all fairly common words, we should have plenty of options for phrases of whatever length we like.

To find such phrases, we can go to the "Lookup" tab and enter one of our seed words. Since we've already decided what lengths we are interested in, and because we want the phrases to start with our seed word, we set "Attach ends" to "Start" and "Length" to "10-12,15". By setting the list to show results sorted by "Score", we can quickly see the most promising phrases. In this case, we'll consider our favorite options to be "air conditioning", "airbrushed", "air mattress", "aircraft carrier" and "Airedale terrier". We'll add them to a list off to the side, and repeat the process to find promising theme entries for "earth", "fire", and "water". (We used windows "sticky notes" for the purpose but any notepad (including a physical piece of paper) will work just as well.)

Once we've gathered several phrases for each seed word (along with their lengths for easier matching) we might end up with a list like the one shown on the right.

Given that there are a lot of 10- and 11-letter phrases, and only one seed word has 15-letter phrases, we'll settle on two 10s and two 11s. (Remember that grids and themes should always be symmetric, and thus we have to have paired lengths. If we had an odd number of theme entries we would want a single unpaired entry to put in the center of the grid, and it would have to have an odd number (ideally 15) of letters.)

We'll choose from the list according to our tastes. "Earthquake" is yummy, so we definitely want it, and we'll take the equally yummy "watermelon" as a matching 10-letter entry. We'll then choose the 11-letter entries "fire hydrant" and "air-mattress" to round out our set.

Creating the grid

We'll start by putting the theme entries in. Since a bit of experience tells us that the trickiest section is likely to be the "Q" in "earthquake", we'll put it in a place where we can force it to be the first letter in the crossing word. We'll put a black block in so that the word boundaries are enforced. (Remember that there are two ways to add blocks. You can SHIFT-click in a square, or you can select a square and then use the "." (dot) key to turn it black. It's just a matter of personal preference.) Then we'll drop "watermelon" into the corresponding location at the bottom of the puzzle. (Note that CrossFire automatically put in a symmetric block when we put in the first one, so we can easily see where the symmetric theme entry goes.) We'll then put our other two theme entries into spaces that are separated from the first two words, and from each other and, again, add blocks to mark the ends of the entries.

Just the themes

Note that CrossFire marks lots of blocks in pink, telling us that we'll need to add more black squares. The darker pink squares are marked because there is an illegal two-letter word formed by the earthquake/watermelon terminating block. We'll want to build from the edge of the puzzle to form a vertical wall in that spot. (The concept of "illegal" puzzle elements is fuzzy, since any rule can be broken if the puzzle's theme justifies it. However, CrossFire tries to enforce three common rules: words must be at least 3 letters long; all white squares should be shared by both across and down words; and black squares should be symmetric.)

The other pink squares are telling us that it can't create fifteen letter words using the existing letters in the grid, and thus that you'll probably want to add extra blocks to split up those parts of the grid. (This should be obvious to anyone who has seen a number of puzzles. We will want a lot more black squares.) Our next step is to add a few more walls to divide the grid into nine zones. (This is pretty much standard for all themed puzzles. Non-themed weekend puzzles will sometimes omit some of the vertical walls so that there are just three horizontal zones, but that's not what we're trying for here.) We also add two blocks to break up the central horizontal line. But we're just getting started.

More black squares

We keep adding black squares, splitting up any words that are marked in pink as unfillable, or which are longer than our theme words (which should always be the longest words in the grid). If we accidentally add squares that create one- or two-letter words, we'll delete some black square (though not necessarily the same as the one that was just added). Whenever it looks like we might have split things up enough, we can hit the "quick-fill" button and see whether it can, firstly, produce a complete fill and, secondly, do so fairly quickly. If CrossFire can't do both of these things, then the grid is probably still too tough, and we should split it up a bit more. Remember that the "undo" command will let you easily go back to the mostly-empty grid from before the quick-fill operation.

Eagle-eyed readers will notice that between the previous grid and the one shown below, we have swapped the phrases "fire hydrant" and "air mattress". This is another thing that you can always try if the grid just won't fill as easily as you'd like. You could also go back to our set of candidate words, and perhaps try "firefighter" instead. It's still a fun word and has a different distribution of vowels, so it might just work better. The more theme words you have available, the easier it will be to find a set that work well together in a grid.

Eventually, we should end up with a grid that is easily fillable, and that has lots of four- and five-letter words, a reasonable smattering of 6- to 9-letter words, and our 10- and 11-letter theme entries. At this point, it's worth looking at the "Summary" tab and its puzzle statistics. Typical puzzle requirements are 78 or fewer words. This grid makes the cut with 76, and the "Word counts" section shows that we have only 6 three-letter words, which is better than average.

Since this fill looks good, we should go ahead and get ready for the real grid-filling process. We mark the theme words by selecting them and using the "Grid->Mark selected word as theme" menu item. (This is why the themes are purple in the image below. You can also use a keyboard shortcut -- CTRL-T or CMD-T depending on your OS.) Marked theme entries are protected so that they won't disappear if you use the "clear letters" command. We should probably go ahead and save it to a file by hitting the save icon in the toolbar.

One possible grid

It's worth noting that this theme layout, while common, isn't the only possibility. When all theme entries are 11-letters or shorter, it's possible to use a "pinwheel" theme layout as shown below. You can also try moving the left-side entries to the right-side and vice-versa. There are usually lots of possibilities, and it can be fun to try a number of layouts and see which leads to the best result.

Another possible grid A third possible grid

Filling the grid

When it comes time to fill the grid for real, we start by completely ignoring the "quick-fill" button. Unless you believe that your judgment isn't as good as a machine's and that your dictionary is perfectly scored, you will do far better by collaborating with the app by using the Fill tab. (This tab does a lot of magic behind the scenes, so please bear with me as I describe what's going on. It's fairly easy to use, but not so easy to explain.)

When we switch to the fill tab, the program will immediately start generating "candidate" fill words for whatever word we have selected in the grid or, if we have nothing selected, will simply wait for us to choose a word. Regardless, of our starting state, we will start by hitting the "Best Location" button. This will search the grid and find the most promising place to start by finding the "hardest" section of the puzzle.

For this puzzle, CrossFire will choose the word that starts with the second letter of "air mattress", and it's easy to see why. There are only three words in the dictionary that will fit into this space -- "isomer", "iceman", and "icemen". However, two of those words disappear almost immediately. This is because, after generating them as "candidates", CrossFire has analyzed them in the background and determined that "iceman" and "icemen" are both "non-viable" -- meaning that there is no complete fill that can be formed using the words in this position. (This could change if you changed the program settings by, for example, adding a more comprehensive dictionary or changing the "min word fill score" to allow lower scored words. With the current settings, however, they are non-viable.) At the same time, the background analysis has determined that "isomer" is fully viable. It can find at least one complete fill that uses the word. You'll notice that while non-viable words simply disappear, viable words are marked in bold-face and assigned a non-zero "Final Score". (We'll talk more about Final Scores later.)

Interactive grid fill 1

For this particular grid location, CrossFire was able to very quickly generate all possible candidates and then determine that exactly one was viable. In other cases, it will operate more slowly and you'll be able to see it move through several distinct phases. Immediately after you select a grid location, it will start with a status of "*Generating candidates*". During this phase, it finds a bunch of words from the dictionary that will fit into the space and adds them to the table. After it's chosen its candidates, it switches status to "*Evaluating candidates*". This is when it examines all of the candidates in the background and determines whether they are viable or non-viable. If there are a lot of words, or if the grid is "hard", this process may take a long time and some words may remain as unbolded "candidates".

While you are waiting for candidates to be evaluated, you can enter one of the unevaluated candidates in the grid, but there's no guarantee that CrossFire will find a valid fill that uses it -- you could instead end up with a status of "***Unfillable Grid***" and have to go back and try another word -- ideally one that has already been marked as viable.

Finally, after all of the candidates have been evaluated, the status will change to "Ready", and all of the words remaining will be ones which are definitely viable. Note that, even if CrossFire takes a long time to process all candidates, you will often find that one of the first ones examined is good enough for your purpose and you can select it and move on without waiting for all candidates to be evaluated.

Okay, we're done explaining the complicated mechanics of the Fill tab, and can go back to actually building our puzzle. If you select the word "isomer" in the list (as is shown in the image above), CrossFire will use light-gray letters to show a possible complete fill. This usually isn't the only possible fill, or even the best one, but it gives you an idea of how things could end up looking. You'll see that the selected word is shown in the grid in a darker shade of gray. This shade will also be used for "forced" words -- i.e. words which are the only possible ones that can be used with the selected word to create a complete fill. Sometimes you'll find that your chosen candidate locks you into a single fill for an entire section of the puzzle, and sometimes there are lots of possibilities that can be considered after you select the word (by double-clicking it or single-clicking on it and then hitting RETURN) to enter it into the grid.

For our current puzzle, we will (of course) select "isomer", and then let CrossFire choose the next words to be filled in. I chose words that I like from the suggested candidates (after waiting long enough for them to be marked in bold-face as "viable") and kept adding them until I'd filled in the lower left corner. At this point, I decided that I was interested in making sure that the long word that will become 4-down was more important than the short words that CrossFire showed me, so I selected that word and let CrossFire show me candidates.

Interactive grid fill 2

This is an important part of the CrossFire workflow. The program guides you through the open spaces in the puzzle in a potentially useful order but doesn't force me to follow it. At any point, I can move to a different location of my choice. I can even, while filling the grid: type in words manually; add black squares in areas that haven't been filled yet; or switch to other tabs to perform other operations.

Another important thing that I can do at any point is to use "undo" to remove my most recently added word and try something different. The word that I had entered will be marked in the candidate list with a yellowish background to remind me that I've already looked at it. I can then try other possibilities. If they work out better, that's fine. If not, I can "undo" again and go back to my original choice or a completely different choice. CrossFire gives me full freedom to explore all of my options.

Now that I've moved to a new location, I have a lot of choices for possible words. You'll notice that, amongst the verified candidates in the list, one still has a "Final Score" of 1.0, but the others have numbers between (in this case) 1.077 and 0.698. (Your results might be slightly different. Even with the same dictionary, you may see slightly different numbers. There is a slight random element to the way in which possible fills are considered, and thus we may end up with different "sample" fills for the candidate words.) The final score numbers are formed by using CrossFires internal "fill quality" rating for each candidate and dividing it by the fill quality for the first fill that was found. Thus, the numbers are really only meaningful as a relative comparison of the fills that result from using each candidate word -- the higher the number, the better the sample fill that we found. Because finding the very best fill is a much harder problem than just finding any fill, you may find that whatever viable candidate you choose, the system will find more fills using that word that it likes even better. This is normal operation, and shouldn't worry you. What you should instead do is assume that the top 5 or 10 entries will be more likely to produce good results than the bottom ones, and choose candidate words that you like from somewhere near the top of the list. (This assumes that you keep the default sorting based on Final Score. You can sort by any of the other columns, but then you are on your own for figuring out which ones will produce the best final result.)

For this fill, I'll choose the word "sharpener", both because I like it and because the sample fill associated with it seems promising. I'll likely be shown even more promising fills as I continue, but this one would (at least in the section of the puzzle that I'm concentrating on) be good enough.

Again, I continue to use the Fill tab to add words to the section of the puzzle that I had selected for a while, and then decide that I want to move to a different part of the puzzle. In particular, I'm worried that the "Q" in "earthquake" might make that side of the puzzle difficult to fill, so I go ahead and pre-emptively move to that cross-word and evaluate the choices available. As I feared, there aren't a lot of choices, but I have a good feeling about what I'm shown for the word "quite", so I choose it and carry on with the fill.

Interactive grid fill 3

Once I've filled in the two sections around "quite", I once again manually select a word. In this case, I go to the longest word remaining in the puzzle because I know the solvers care more about the quality of long words than short ones, and thus I want to find a really promising word to put in this space.

Interactive grid fill 4

"Starlight" looks like a great choice so I add it in, and I'm left filling in the small section on the middle right. Several interesting things happen at this point which are worth pointing out. Because this is a small, isolated section of the puzzle, CrossFire can actually do a deeper analysis and find the very best (i.e. highest scoring) fills for each possible candidate word. It will show the status "*Finding best fills*" while doing this deeper analysis and, once it finds the optimal fill for a given candidate, it will show the final score in boldface (as seen in the image below).

Interactive grid fill 5

The other thing to notice is that the highest scoring candidate for the word selected in the above image is actually not a word at all. The word "yess" somehow slipped into the default dictionary as the plural of "yes", and our analysis of "common usage" showed that a bunch of people actually used this misspelling, causing it to be retained and given a high score. We could simply ignore the bad entry and choose a lower-ranked fill -- since "yens", "rats", "Ross", and "ribs" all have high scores too, and any one of them would make a fine fill word. However, let's take this opportunity to actually fix the dictionary so that we won't be shown this misbegotten word again. Simply select the word in the list, and then use "Edit selected word". (You can get this from the edit menu, from the right-click menu, or by using the keyboard shortcut CTRL-E (on Windows or Linux) or CMD-E (on Macintosh).)

Editing word information

When you are presented with the edit dialog, give it a score below 5 (which is our declared "minimum fill word score"), and it will be removed from consideration as a fill word. When you save your dictionaries at the end of your session, the adjusted score will be added to you "MyEdits.dict" file, and the word will stay hidden forevermore. (Giving a word an ultra-low score is easier and less error-prone than trying to make sure that it is completely deleted from every dictionary file in your list.)

We're in the home stretch now, so we continue to use the Fill menu in the same manner until we've completely filled the grid. My final result contains a pretty good selection of fill words and looks like the image below.

Interactive grid fill: complete

Adding clues

Once you've got your puzzle completely filled, it's time to move on to cluing. I'll cover the basic mechanics here, but I can't give you a lot of advice on exactly how to choose the perfect clue. It's a highly personal endeavor, with each constructor having his own unique taste in clues. (Of course, if you know that you are going to try to sell the puzzle to a particular editor, it's worth looking at some of the puzzle's he's published to get a feel for his taste in clues as well. It's always good to know your target market.

We must, of course, start by selecting the "Clues" tab, as that's the only place where clues can be entered. For the fill that we've just completed, the tab will initially look like the first image below. It's often worth starting by filling in the theme entries, as you've likely had lots of time to think about how to clue them. In this case, I'll make the iffy choice to clue all of the theme clues with "Elementary ...?", so as to emphasize the consistent nature of the theme. With the clues "Elementary movement?", "Elementary spray appliance?", "Elementary sleeping spot?", and "Elementary summer snack?", the tab will look like the second image below.

Adding clues 1 Adding clues 2

For each of these images, it's worth looking at the "DB" panel at the bottom. These are clues for the selected terms that were found in the Matt Ginsburgh clue database, which we configured during the setup process. Each line shows a clue (in bold) and a list of newspapers/syndicators (i.e. NYT for New York Times or Tau for Ben Tausig's "Inkwell" puzzles) and days of the week in which those clues were used (in parentheses). Additionally, the first few lines often show "confusers" in brackets. These are other words which have been included in puzzles with exactly the same clue, and which can thus introduce (welcome) ambiguity into the clue/answer. The clue entries are sorted first by whether they are confusers and secondly by "difficulty" (i.e. the earliest day of the week that they were published in a paper).

You will likely be tempted to fill in you clues by always simply selecting the most interesting clue from the database, but I (and numerous puzzle editors) would recommend that you don't do so. You'll lose the element of creativity that comes from thinking up new and unique clues and, if you submit the puzzle to an editor, you'll likely annoy them. While conventional wisdom holds that clues are not copyrightable, editors still want variety and will give much greater respect to constructors who take the time and effort to create new clues. This doesn't mean that you can't use the database to remind you of multiple senses in which a word might be considered -- i.e. the fact that "tetra" is both a word prefix and a variety of fish -- and inspire you to either use similar but distinct clue wordings or to avoid the commonplace and find completely unique ways of thinking about the word. (Also, if some fraction of your "new and original" creations end up having been used already, that's not fatal. Great minds think alike, and that doesn't invalidate your creative input.)

Since we are using the default word list, we receive the "benefit" of having capitalization, spacing, and punctuation added to our words and phrases. This is often genuinely useful, as with "to go" and "stave off", but is also sometimes annoyingly mistaken, as with "us Mc" -- which is apparently more commonly used in casual conversation than "USMC". As long as we have the word selected, we can use the "Edit selected words" operation to fix it.

Adding clues 3

After we've worked our way through cluing the first dozen words or so, we might end up with the third image above. After this, it's just more of the same -- we keep working through the clues for here until we've accounted for the entire grid. As always with crossfire, we can move back and forth between tabs while working -- I moved to the "Lookup" tab to find a second word associated with "hush", for example -- or save our work thus far and come back to it after a nice dinner or a good night's sleep.

Another useful option when trying to find the perfect clue is the "Lookup word on web" option from the right-click menu. In the default configuration (as shown in the Initial Setup section), it will use Google to look up the word in your default web browser. However, if you don't like Google, you can change the "Web lookup URL" in the preferences menu to use an arbitrary search engine or other web service.

Finishing up

Once we've gone through all of the creation steps -- choosing a theme, creating a grid, filling the grid, and writing clues -- we are left with a finished puzzle. Congratulations on following with me through the whole process! There are, however, a few administrative details we are left with. For example, back at the Summary tab, we have the option to fill in a title, author, copyright notice, and note for the puzzle solver. These will all be maintained with the puzzle and used when we print it out or send it to a crossword-solving app. So let's go ahead and enter that information and then save the puzzle for the final time in its final form.

The final puzzle

Speaking of printing and such, there are a number of ways we can output the puzzle in useful formats. These are your primary choices:

  • If you want to hand out print-copies to your friends, use the "File->Print->Puzzle" menu item to produce a nice single-page newspaper-style clue and grid.
  • If you want to mail your friends something that they can print out, use the same "File->Print->Puzzle" option, but choose something equivalent to "Print to PDF" in the print dialog.
  • If you want a format that can be used easily with various crossword apps, including the popular "Across Lite" app, choose the "File->Export as->Across Lite Binary" option.
  • If you want an alternate format that's used in some more modern crossword apps, choose "File->Export as->iPuz".
  • If you want to submit it to the New York Times, you'll have to use your printer with the "File->Print->NYT Submission". Amazingly enough, Mr. Shortz and his crew still want to receive things on paper.
  • Finally, if you want to submit to the LA Times or various other markets, you'll probably have good luck with "File->Export as->Across Lite Text". This is a fairly commonly accepted submission format.

And now we're done. We started with a simple theme idea, and worked our way all the way through to a printed puzzle that we can share with friends. With a bit more effort to come up with a more interesting theme, we could just as easily have an outstanding submission to a well-respected newspaper or on-line puzzle franchise. The rest is up to you, but I hope that you have lots of fun while doing it. Happy constructing!