RPG Saturday: The Serial One-Shot – Coraline 2: Electric Boogaloo

February 13, 2010 1 comment

RPG Saturday is a weekly feature which discusses issues related to role-playing games using movies, television, etc. as examples.

Note from Michael: It’s still Saturday for one hour (Pacific Time), so this still counts as an RPG Saturday post!

In my last RPG Saturday post I made a passing reference to the serial one-shot, and I want to talk about that a little more.

Unlike most RPG campaigns, a “one-shot” adventure is not an ongoing story. When the adventure ends, the story ends too — which opens the game up for all kinds of situations and outcomes that a GM normally wouldn’t include in an ongoing campaign. Character deaths, for example, are more acceptable in one-shots, as are games where the characters are the villains or are ridiculously overpowered. Many movie plots work great as one-shot games but not as extended campaigns — Jurassic Park was a good one-shot movie, but an ongoing campaign would be difficult.

A “serial one-shot” is a bit of a hybrid between the one-shot adventure and the ongoing campaign. The story doesn’t necessarily end at the end of the adventure, but each adventure is self-contained enough that if the story does end the players won’t feel like anything was left unresolved. Going back to the movie example, a serial one-shot would be a movie and its sequels.

One good thing about a serial one-shot as opposed to an ongoing campaign is that months or years can pass between adventures, and instead of role-playing that time the players simply update their characters for the next installment of the game and keep going.

…and that’s where my Coraline idea comes in.

The Setup

So you were able to keep your characters on track. They explored the Other World, learned some of the history of the Pink Palace Apartments from Wybie and ultimately defeated the Other Mother. Now years have passed. The characters have grown up. They have jobs, homes and families of their own.

The Hook

One day a character’s home is strangely quiet. Little Emma is gone! The character searches the house frantically, screaming Emma’s name…and then finds a doll dressed just like Emma, staring out from under Emma’s bed with black button eyes.


Each of the characters goes to answer a knock at the door. Sitting on the porch is a small package wrapped in brown paper. There are no return addresses, no postage stamps…no sign of a letter carrier. They each take their packages inside and open them to find a little doll, dressed just like them, staring up from the box with black button eyes.

No matter how you set it up, that kind of cool opening scene is tough to do with an ongoing campaign — largely because it’s really hard to role-play all the time between adventures. It can be especially cool if the players weren’t expecting a sequel to the first adventure, and since they aren’t expecting a sequel to this adventure, their tension levels will be lot higher.


WordPress Wednesday: How to Transfer Your Plugin Data Using phpMyAdmin

February 10, 2010 1 comment

I often use Stray Random Quotes for clients who want to display random testimonials (or quotes, natch) on their WordPress sites. Of course, I build their sites completely on my webspace to test them before installing on the client domain. While WordPress has export and import functions for pages, posts and media, my quotes don’t transfer over so easily. Fortunately, the built-in functions of phpMyAdmin can pick up the slack.

The following assumes that you already have WordPress installed on both your test domain and the live domain. I’m using the specific example of Stray Random Quotes but you can do the same with any plugin that creates tables in your WordPress database.

First, make sure you have Stray Random Quotes (or whichever plugin you’re transferring data for) installed on the live site. This is important because the plugin will create the necessary tables for you (saves you a few steps and a lot of headache).

Second, open your WordPress database using phpMyAdmin on your test site. In the left-hand column, click on the database name to expand it, then click on the wp_stray_quotes table.

Click on the “Export” tab in the  main window. Make sure your export format is set for “SQL” and your export type is “INSERT,” then click “Go.”

You should see a text representation of the database export. Copy only the text rows that start with “INSERT INTO.” Paste these into a text file using Notepad and save as a .txt file.

Next, open the WordPress database on your live site using phpMyAdmin. Click on the database name to expand and then on wp_stray_quotes.

Click the “Import” tab, then the “Browse” button. Locate the text file you created previously and click “Open,” then click “Go.”

Your quotes should be imported into the live database.

Twitter Tuesday: Why to Not Be a Broadcaster (and How I’m Going to Stop)

February 9, 2010 3 comments

It’s easy to fall into the trap of treating Twitter like a P.A. system; you tell everyone about the articles you’re reading online, your latest blog post or even the food you just had for dinner and expect that you’ll gain followers and readers.

However, unless you’re a major brand or some kind of celebrity, it probably won’t work like that. Instead, you’ll tweet and tweet and tweet and get very little attention.

Why is that?

Well, in Twitter-speak you’re being a broadcaster. That is, you’re talking a lot but not really “joining the conversation.”

Think of real life: do you like to talk to someone who keeps talking endlessly without giving you a chance to respond (or who completely ignores you when you do)? Of course not. People like to have interaction; a chance to ask questions and to make observations of their own.

Now, you’re not a bad person if you’ve acting like a broadcaster — at least, I hope not, since I’ve fallen into the broadcasting trap myself. However, you’re not using Twitter to its full potential. The true strength of Twitter, like any social network, is in building relationships — because, as LinkedIn says, relationships matter.

So how am I going to stop being a broadcaster and start building relationships? Here are my thoughts:

Remember it’s not all about me

Everyone on Twitter wants to be heard, and it’s good to acknowledge someone who’s tweeted something interesting or relevant. A great way to do this, of course, is the retweet; forwarding someone else’s tweet to your followers. Twitter has a function for this now, but I still like to do it the old-fashioned way: either a) cut-and-paste the tweet, adding “RT” to the front, or b) using the retweet function on TweetDeck. This lets me explain why I think it’s worth retweeting.

When my friend JosephRanseth co-hosted an webinar on “Guerilla Social Marketing,” I didn’t just forward his announcements, I encouraged people to come and then sent out the link to the recorded version after along with my thoughts on how the webinar went.

Make Good Use of Follow Fridays

As long as I’m acknowledging other people, I really need to take part in Follow Fridays. #FollowFriday or #ff gives me a chance to point to someone else who I think is worth following on Twitter, and — as with retweets — tell others why I think this person is worth following.

My friend Joseph had some good thoughts on the subject over at his blog. I’m not sure he always follows his own advice, but it’s good advice anyway.

Comment, Ask Questions, Answer Questions

I can’t expect people to reply to me unless I’m willing to reply to them. It’s kind of like dating. I didn’t date very much before I got married, largely because I didn’t do my part to engage members of the opposite sex. I didn’t talk enough to them, so they didn’t talk enough to me.

When Dave Kellett asked his followers what typeface captured the fun and energy of “Squee!,” I answered. In fact, I posted an image on TwitPic with my choice (Alpha Thin) and sent a download link if he decided to use my suggestion. I forgot to adjust my kerning on the image and Dave never replied, but hey, I actually engaged someone. I need to do this more — there’s no better way to show someone that their tweet is important to you than to actually reply to it.

Join a conversation

I think the best experience I’ve had on Twitter was joining #webcomicschat hosted by Patrick Scullin. This is Twitter taken to a logical conclusion: a mass instant messaging system. I enjoy webcomics and hope to get back to one of my own someday, so I like joining in with other like-minded twitterers to discuss whatever topics get thrown out.

I haven’t had a chance to join in on the chat for awhile, but hopefully I’ll be free tomorrow for the next one.

Start a conversation

This is the step I’m not sure I’m ready for quite yet. I’d like to host a regular chat like Patrick does. I have a few that I’d like to do, ranging in topics from graphic design to creating a more focused webcomics chat that would specifically be a big brainstorming session for concepts and stories. I think that I’ll hold this as a goal while I work on the first four steps a little longer. Hopefully, the next time I post about this topic I’ll be able to say that I’m not a broadcaster anymore.

We’ll see.

Got any more ideas for how to make the move from being a broadcaster to forming actual (virtual) relationships? Leave them below — I’d love the help!

Categories: Social Media Tags: ,

RPG Saturday: How to Keep Your Players on Track – Coraline

February 6, 2010 1 comment

RPG Saturday is a weekly feature which discusses issues related to role-playing games using movies, television, etc. as examples.

Button Your EyesHave you ever wanted to play something entirely different than a standard RPG scenario? Not just getting away from the hack-and-slash, but something outside the whole larger-than-life character thing? Ever think up something quirky and fun that would totally be blast to play, but were afraid that your players would totally ruin it?

Those are the kinds of thoughts I was having when I finally rented Coraline from the RedBox. Sure, it would make a great one-shot game (possibly even a serial one-shot), but let’s face it: the story just wouldn’t go the same way once you involved players. While Coraline happily wolfs down a turkey dinner her first time in the Other World and eagerly returns the next night, players will start looking for a way to kill Other Mother the first time they see her button eyes.

So how to keep things from devolving into a race to see who can a kitchen knife fastest? Your first and best bet of course is to feel out your players ahead of time, sketch out your hopes for the game  (without giving away too much) and see if they’ll agree to go along. However, there are some elements built into the story itself that help keep things from going completely off the rails:

The characters are children

With 11-year-old characters, your player won’t have the stats to mount a physical attack on Other Mother. You also take away a lot of other in-game considerations: the characters obviously will have no weapons, no vehicle and no real influence over NPCs who aren’t their age or younger.

Helpful NPCs

Coraline’s apartment complex is full of bizarre characters who can point any but the most wayward players in the right direction. Wybie is a source of hints and rumors (things he hears from his grandmother), Miss Spink and Miss Forcible know some folk magic and Mr. Bobinsky delivers messages from his mice. Any of these NPCs can suggest courses of action for the players and subtly urge them to action, or help them get back on track if they’re totally lost. Once in the Other World, you can use the Cat, the Other Wybie and even Other Father in much the same way.

Other Mother’s Endgame

What if the players never go through the little door in the first place, or run back after going through the first time and refuse to return? To give them a little incentive, we can have voices whispering in the characters’ rooms at night and items disappearing. If they’ve decided not to go through the door, they probably still won’t, but it’ll be really creepy. When they still refuse, that’s when Other Mother grabs their parents.  If you want to build the suspense leading up to the parents disappearing, you can have other people in the apartments disappear first.

In fact, one option would be having all the above happening before the first time the players meet Other Mother. If she already has all the people they care about by the time they meet her, it’ll give them incentive to play along with her nice act at first — and make the encounter a lot more tense.

WordPress Wednesday: All-in-One SEO Without Using wp_head()

February 3, 2010 24 comments

One of my favorite plugins to use for client sites is the All-in-One SEO Pack. I like how it allows me (or the client) to specify unique keywords, descriptions, menu text, etc. for each page or post on their site. I don’t like that it requires me to use the wp_head() function in order to edit keywords and descriptions.

For those who don’t know already, wp_head() automatically adds data to the header of your WordPress pages. Some of this data is helpful (like adding the descriptions and keywords from the All-in-One SEO Pack); some of it is not (like what version of WordPress your site uses, which helps hackers know which vulnerabilities they should try to exploit).

My workaround is to add a couple of simple php functions to my functions.php file. For example, the following function write the SEO Pack meta keywords into my WordPress page:

// function to insert All-in-One SEO Pack keywords
function keyword_insert() {
 global $post; // VERY important!

 // Retrieve keyword meta data from the SEO Pack
 $seokeywords = stripslashes(get_post_meta($post->ID, '_aioseop_keywords', true));

 // Default keywords in case none are specified for the page
 if (empty($seokeywords)) $seokeywords = "Homestar Runner, Strong Bad, The Cheat";

 // Output the html code
 $seokeyword_block = "<meta name=\"keywords\" content=\"".$seokeywords."\"/>\n";
 echo $seokeyword_block;

If I want to use the SEO Pack meta description, I alter the function like so:

// function to insert All-in-One SEO Pack description
function description_insert() {
 global $post; // VERY important!

 // Retrieve description meta data from the SEO Pack
 $seodesc = stripslashes(get_post_meta($post->ID, '_aioseop_description', true));

 // Default description in case none is specified for the page
 if (empty($seodesc)) $seodesc = "Oh! I am Homestar, and This is A Website!";

 // Output the html code
 $seodesc_block = "<meta name=\"description\" content=\"".$seodesc."\"/>\n";
 echo $seodesc_block;

If I wanted to create functions to pull additional information from the SEO Pack, they would also follow this same format. The different meta keys used by the All-in-One SEO Pack are:

  • _aioseop_keywords: meta keywords for the page; if your template already includes a <meta> keywords tag, the SEO Pack function will write a second tag — it is better to use one or the other and not both
  • _aioseop_description: meta description for the page; like the keywords, the SEO Pack function will write a second <meta> description if one is already included in the template
  • _aioseop_title: as in page title; the SEO Pack will rewrite any instances of the post title with this value unless you uncheck the “Rewrite Titles” option in the plugin settings; otherwise defaults to post title if no value is specified
  • _aioseop_menulabel: this is the text that is retrieved by the wp_list_pages() function; defaults to post title if no menu label is specified
  • _aioseop_titleatr: this is the “title” attribute for the links retrieved by the wp_list_pages() function; defaults to post title if no title attribute is specified

You will probably use the other meta keys less frequently than _aioseop_keywords and _aioseop_description since the other keys work through existing WordPress functions, although I have had use special functions for those keys on a few occasions.

Update: Silly me, I forgot to mention how to use these.

Place the following lines of code between the <head> and </head> tags in your template:

<?php description_insert(); ?>

<?php keyword_insert(); ?>

But then you probably already knew that.

How Measure 67 Will Hurt Me

January 15, 2010 Comments off

I’m a little late joining this conversation, but here is the bottom line (for me, anyway):

I was laid off in February of 2009, and my friend Scott was laid off in April that same year. Unable to find new jobs, we started a new business designing websites. We made a grand total of $1,050 for the entire year — about $300 after expenses. As an LLC, our minimum tax on that $300 that we have to split will be $150.1

I was denied my unemployment, my savings are dwindling and I have a brand new baby in the house. I don’t need this problem too. Vote no on Measure 67.

Update: Scott tells me that we did not collect that $1,050 until after the the beginning of the new year, so those revenues will be taxed in 2010. That makes our income for 2009 about -$700, and we will still have to pay $150 in taxes simply for being an LLC.

1. “2009 Corporate Tax Law Changes.” Business Taxes Home Page. Oregon Department of Revenue. 14 Dec 2009. Web. 15 Jan 2010. <http://www.oregon.gov/DOR/BUS/corp_tax_changes_2009.shtml>

For My Son on His First New Year

December 31, 2009 Comments off

My vague understanding of the Japanese literary concept “mono no aware” is that knowing something is temporary makes it more beautiful, more poignant. A flower’s beauty is more powerful knowing that it will wither away and vanish, and that knowledge tinges its beauty with a bit of sadness.

I think that no one may understand mono no aware better than a parent. I cherish every moment with my beautiful baby boy, but I cherish them even more knowing that those moments are fleeting and that I am watching your “babyhood” slip away and disappear. While you will always be my son, you will not always be my little baby boy. I will have new joys and new adventures with you throughout our lives, but this time will never come again. Knowing that is what makes it so beautiful and precious.