Leopard pre-release jitters

There’s been a lot of traffic on the MacSB mailing list and on various blogs (e.g. Panic and Atomicbird) about how Apple is handling the release of Leopard in the same way as they did with Tiger, and about how indie developers get the short end of the stick because we don’t see Leopard until our customers do.

I think this is all just jitters.  The people who rush out and by Leopard on day 1 are all early adopters – they have the “bleeding edge” gene anyway, and will understand if it takes a week or two for their favourite app to work correctly.  Sure, things will change between the last seed and what’s shipped, but it’s not going to be anything major.  And yes, your apps might break within the first few days of Leopard being released.  But realistically, if you’ve run your app on the seed at all, I find it hard to believe that it will take long to get it working against the release version.

The other main concern is that developers who get the software as part of their ADC membership don’t get it the same day the general public gets it.  Yeah, that’s a bummer but it’s not really that big a deal.  Chances are good your software will work as intended, and if it doesn’t, it’s only a few weeks’ wait.

syntax error before ‘AT_NAME’ token

If you happen to be using Xcode and get this somewhat baffling error message when building:

syntax error before ‘AT_NAME’ token

The problem is that you are missing an @end in some file that you’ve #imported, probably a header file. This error also shows up as “parse error ...” in some versions of Xcode (took me a while to track down with Google as a result).

Firefox phishing protection

Like anyone who has had the same e-mail address for 10 years, I get a lot of spam. Most of it gets filtered, by one mechanism or another. Occasionally the odd bit gets through. Unlike most people, I like to do something about it. For example, when I see Adobe CS3 for $99, I forward it to piracy@adobe.com.

This morning I received a phishing attempt for a Merrill Lynch trading account – ironic considering I work for one of their competitors (in my day job). So I clicked on it and it brought me here. If you’re using Firefox 2.0, the screen will go dark and you’ll get a big message warning you this is a phishing site. That didn’t happen this morning, so I reported it (which is horribly simple: while at the site go to the Help menu and select “Report Web Forgery …”. I set ReloadEvery to work, and within about an hour the site was now tagged.

The downside of this is that the people who report these sites use Firefox and know what a phishing site looks like anyway, but the people who need the phishing protection use that other browser.

How to use subversion: an absolute beginner’s guide

I’ve started working on some projects with a bunch of guys who are not used to using version control systems. This post is as much for them as it is for anyone else. I won’t go into how to install subversion, because that is covered by many other people elsewhere. I also don’t touch on how to administer subversion for the same reason. This simple guide is purely for how to be a subversion user. It assumes that you know how to access and use a Unix command line. There are GUIs out there for handling these activities, but I’m working from the perspective that (a) “In the beginning was the command line…” and (b) the principle is the same regardless of the interface.

Getting started

If you are about to use subversion, your administrator has probably given you a URL for your repository. This could have a number of forms, but for our purposes they can all be treated identically – I’m going to use the fictitious URL http://example.com/svn/repo/trunk/project. The repository (as you probably know) is just a central store for all the files for a given project, along with version information. The first thing you’ll do is create a working copy of the repository on your computer.


svn co http://example.com/svn/repo/trunk/next_big_thing

Subversion will spit out some information about what it’s doing – ignore that for now. What’s happening here? It’s very simple.svn is the subversion command line application. The co command is short for checkout, which tells subversion to go the URL supplied and bring back a copy of the latest version of what’s there. This will create a directory (or folder if you prefer that term) with the same name as the bit after the last / of the URL – in this example: next_big_thing. That next_big_thing directory is your working copy of the repository.

Everyone who works on the Next Big Thing project will need to perform this same sort of checkout to their local computer. What lives in a working copy? Any sorts of files that you like: documents, source code, images, etc.

Editing and changing your working copy

Go ahead and fiddle with stuff in your working copy – you can do anything you like because none of it will affect anyone else until you commit your changes back to the repository. Put some files into the directory, edit what’s already there, delete some as well – you can get it all back the way it was very easily. But first, let’s take a look at what’s changed (yes, that means you actually do have to go and change some things in your working copy: go on, I’ll go get a cup of coffee while you’re doing that … ready? OK, good). Run this command (from within your working copy – anywhere will do, but the top-level folder is best):

svn status

You should see a list of the changes you’ve made, with one of three characters beside them. Don’t worry about anything else that is spat out at this point (if anything).

? foo.txta file you’ve added that subversion doesn’t know about (yet)
M bar.txta file you’ve changed (M stands for merge, which is what happens to this file if you commit your changes)
! baz.txt a file you’ve deleted

Adding files to a repository

You’ve put some files into your working copy, but there’s another step that needs to happen before they can be committed to the central repository.

svn add mynewfile.txt

Naturally, you substitute “mynewfile.txt” for the name of your actual file. This tells subversion that you want to add the file to the repository the next time that you perform a commit (which we’ll get to in a moment). Why is this step necessary? There are any number of reasons why you wouldn’t want to automatically commit any file in your repository. The most common is probably that many programs create backup or temporary copies of files in a directory while you’re working on them – it wouldn’t be good to clutter up the repository with cruft. Subversion itself creates temporary files when there’s a conflict (yes, even in version control there is conflict – I may do another guide on how to deal with that).

Likewise, to delete a file you need to use:

svn delete myoldfile.txt

otherwise subversion gets confused. When you use add and delete, you’ll get a different status beside your file when you run that command – it’ll be A and D respectively (instead of the ? and ! that we saw above).

Holy crap! I didn’t want to do that!

As I mentioned above, it’s easy to get things back the way they were. If you want to back out any changes you’ve made to the whole project, do this in the top-level directory:

svn revert

You can also use svn revert myfile.txt to revert individual files (or directories).

Committing to the repository, and getting updates

So, now you’ve made all the changes you want to make, it’s time to commit them back to the central repository. This is where all the actual version control magic actually happens. Run this command from the top-level directory of your working copy:

svn commit

The first thing that will happen here is that a text editor will start up (usually vi). Enter a comment describing your change and then save and exit (in vi that means typing ZZ in command mode).

This will take all the changes you’ve made and upload them into the repository, commented with what you wrote. Now the next time someone runs svn co ... all your changes will be visible to them. If someone else has also committed some changes, you can get the latest version with (from the top-level directory):

svn update

You will probably need to run the update command before you do a commit so that you have the latest version of the repository before trying to change it. Any time you (or anyone else) runs svn commit, the version number of the repository goes up by one. In this way, it’s easy to tell the state of every file in the repository at any particular point in the repository’s history, and it’s how you avoid having one person overwrite all (or worse: some) of the work done by someone else.

What’s changed?

You can see the changes that people have made by using

svn log

Be careful with running this in the top-level directory of your working copy – you’ll get every commit message for the project since the first revision. Usually this is run on an individual file to see the history of that file.

And I’m spent …

That’s it – you now know the absolute basics of subversion. For more detail, I suggest reading the online Subversion Book. Any questions, comments or inaccuracies can be sent my way.

The Quiet Time

We’ve not posted much in the last couple of weeks. This has been for a few reasons:

  1. Real life has got in the way of roleplaying
  2. Real life has got in the way of writing about roleplaying
  3. We’ve been talking about direction …

#3 is probably most interesting. We were working on a few ( 7 or 8 ) games at a very high level, and we have about 30 ideas that are a few lines long which could become interesting games in their own right. Up until now, we’ve had no real concerted strategy for producing a game.

Now we do. We’ve selected a game, we’ve thrashed out the content and now we’re doing the hard work of creating it. More information will be made available as we get closer to having something finished.


Originally written for lategaming.com.

Tiroconium – March 531

In the fair city of Cirencester, the Duke of Clarence hosts a tournament each year for newly-made knights, called Tiroconium. Two knights have stood out as being particularly noteworthy in this years tourney, Sir Borre and Sir Mordred. Just over one hundred knights made the journey to Cirencester, many from Ireland from whence Arthur has returned recently.

Sir Ulrus, son of Ulprus, recently knighted by Bishop Vargus of Dorset, arrives with little fanfare and sets up his camp near fellow Roman, Sir Cunobarrus. The two discuss which squadron they will join in the upcoming melee, while other knights arrive–both announce they will fight for the “South”.

From Lindsey: Sir Elad, Sir Rhufon, Sir Uwain and their handsome leader, Sir Dafydd. Setting up camp near Ulrus, the four join forces with Sir Mordred for the grand melee, almost as soon as they arrive, joining the side of the “North”.

Some sneer at the back of Sir Wolfgang, but none to his face–this mighty Saxon may be uncouth but his size and strength make even the bravest of the young knights think twice before speaking. He too announces his intention to fight on the side of the South.

The Grand Parade and Helm Inspection pass off without incident, although Sir Ulrus makes an impression with one of the judges, Sir Gawaine, and catches the eye of some of the onlooking ladies, although he is oblivious at the time. Later, at the Welcome Feast, Sir Ulrus is seen chatting amiably with a group of ladies, and perhaps quite intently with one of them.

Wolfgang, on the other hand, has challenged any Irishman to hand-to-hand combat, and Sir Cenn takes him up on the challenge. Mordred and Borre draw much of the attention, with their wealth, connections and good looks. Even Sir Dafydd feels a bit left out–his companion, Sir Uwain, is content to just partake of the tourney.

On the morrow, the joust begins. As expect, Sir Wolfgang goes out in the first round (to Sir Aimon)–while wicked with his Great Axe, he shows his lack of experience on horseback. Sir Ulrus does well in the first round, unhorsing Sir Eadric (and wounding him in the process), but goes down in the second to Sir Foulque the French. Almost immediately, Sir Ulrus issues a challenge to his conqueror, but is defeated yet again, losing one of his horses in the process. Seemingly morose, he challenges Sir Mordred to the death, but luckily Uwain is nearby and prevents the herald from announcing such a crazy course of action.

Sir Uwain himself fairs well, unseating Sir Cunobarrus and Sir Cadmar, only to fall foul of his travelling companion Sir Dafydd in the third round. Sir Mordred goes on to win the joust, taking home the destrier offered as a prize. Sir Uwain issues challenge to Sir Dafydd, lance-then-sword, which Sir Dafydd accepts. A spectacular charge by Uwain not only unhorses Dafydd, but leaves him wounded–proud Dafydd calls Uwain off his horse, and Sir Uwain obliges but handily defeats his opponent and forces him to yield. Needless to say, the two part company, especially once Sir Uwain claims Dafydd’s charger as prize.

Sir Wolfgang defeats Sir Cenn in a close fought contest of Great Axe versus Great Spear–one that draws eyes from the wilder parts of Britain. No prize is claimed, as it is simple for love of the fight.

The final event is the Grand Melee, in which Sirs Wolfgang, Ulrus and Uwain acquit themselves well, with Sir Wolfgang lasting until almost the bitter end. The victory is declared for the South, and Sir Borre claims the prize of the Silver Sword for being the last man standing.

Before the prizes are given, Sir Ulrus must face Sir Mordred in the lists. He wears a lady’s favour in his helm, and looks sure and swift in the saddle. Bearing down on Sir Mordred, he unhorses him at first tilt, but Sir Mordred lands well and draws his sword. A clash of arms and Sir Mordred’s sword goes flying, leaving Sir Ulrus the victor.

With the prizes awarded (Sir Foulque won most challenges), Uwain, Ulrus, Wolfgang and Cunobarrus agree to travel to the Pentecost tournament in Camelot, although Sir Cunobarrus will leave them at Silchester. The four set off together on the King’s Road, eastward.


Originally written for lategaming.com.

Six Role-playing Annoyances

Here are some annoying habits that players can exhibit in your game. There are some suggestions as to how to deal with these problems, either by encouragement (as another player) or enforcement (as a GM).

  • Playing yourself, but with armour

Problem: the character has the exact same personality as the player, which means that every character that players plays has the same personality. The result is usually very forgettable characters a bland roleplaying experience for everyone else. Unfortunately, this type of player is often a roll-player also (see below). Even the two-word-personality is better than this.

Solution: The GM think about the character as a character, instead of a series of statistics. Write down the major motivations of that character and play them. Even two-dimensional role-playing is better than none.

  • Dick Ramhard, and other stupid character names

Problem: you try to play a serious game and someone comes up with a stupid name for their character. This leaves everyone either snickering or sighing every time the character introduces themselves.

Solution: keep your name appropriate to the game setting. GMs should veto stupid names anyway, so this could well be the result of poor refereeing or player-bullying.

  • Objection! Rules lawyering!

Problem: the flow of the game is constantly broken as the player points out the rules and loopholes that have been used or missed in every situation. This is common in players who are more used to GMing, and in those who prefer less narrative style games.

Solution: this is a tough one. Remind the player that the GM is the final arbiter in all things (stick). Reward the player for good role-play, ideally through creating good story,regardless of the rules (carrot). One way is to give a conditional award – e.g. Everyone gets 3 character points for last week’s session. One (or more) of Bob’s are conditional on him not pointing rules infractions in this week’s session.

  • Kobolds can’t kill us metagamers

Problem: the player knows the system/background really well, and knows what every creature or denizen is capable of doing. Often this results in the character taking unrealistic chances based on knowledge he/she wouldn’t have. Sometimes it’s saying something like “there can’t really be a huge dragon in that cave as we’re all puny characters and the GM wouldn’t do that to us”.

Solution: give standard foes a non-standard name and/or appearance. Give them abilities that they could have but aren’t in the published material. Kill stupid characters who go into the dragon’s cave – it’s harsh, but fair (make sure and give plenty of warning that this is a dangerous thing to do!). Don’t tell the players what they are up against – describe to the characters what they experience.

  • Solo adventuring for five (GM Hogging)

Problem: One player insists on taking up a large percentage of the GM’s time. Sometimes this is because of rules-lawyering (above), other times it’s just because they (the GM and the player) don’t realise what they are doing.

Solution: Whether you’re a GM or a player, the simplest solution is to engage the other players in roleplaying. As a player, you should also try to engage the GM-hog, which will free up the GM and get the game moving again. If you can’t engage him/her, at least the RP with your other team-mates will provide for an interesting session. As a GM, you need to get better at managing your time equally (as much as possible) between players – creating circumstances for inter-player RP is one of the most effective time management techniques.

  • Roll-playing, or role-playing?

Problem: a player insists on making a roll for everything (“It’s a … pleasure to meet you!”), which not only slows down the game, but many times doesn’t make any sense. This can often be frustratingly combined with rules-lawyering and playing oneself and at it’s worst can lead to min/maxing in order to ensure the best rolls.

Solution: as a GM, I’ve taken away a player’s dice and even his character sheet to prevent roll-playing. As a player, I’ve tried to lead by example – I keep my character sheet upside down as a rule, and roll only when the GM tells me to.

Got any more annoyances? I know there are lots I didn’t cover (like Munchkin, Hack and Slash, etc.) mostly because I felt like they were well-established (they have Wikipedia entries!).

Edit: apologies for the typo – I got roll and role mixed up at a key point. D’oh!


Originally written for lategaming.com.

Top 5 reasons why D&D sucks

5. Roll-playing Game

While not as bad as some systems (*cough* World of Darkness) in terms of the amount of dice you roll at one time, there are a lot of rolls for resolving single tasks. There are so many extra rules for things (most of which require rolls) that the emphasis is on the rules and dice rather than the roleplaying. You also need multiples of every type of dice – while most roleplayers have these it’s still a bit of a pain. One roll per action – surely that’s enough for any system? Oh, and don’t forget your synergy bonus!

4. Alignment

While I realise that alignment is just supposed to be a guideline, the rulebooks seem to contradict that. You can’t play a Paladin unless you’re Lawful Good at all times. How do you make a Paladin interesting then, while still remaining a Paladin? They’re all going to be shining paragons of justice and virtue. Playing clerics requires adherence to certain alignments, and the same for some other classes. While it might not be constricting for some, to me it’s like someone pigeonholing me simply because of my ethnic background or my accent.

3. Levels

Now that I’m a 3rd Level Rogue, I’m more likely to survive being stabbed that I was last week, when I was a 2nd Level Rogue. Having arbitrary levels which state what abilities you have or can have is so … 1980s. Please, I thought we left that all behind when we left high school. OK, you can use the optional rules (more rules!) around training, to make this a bit more realistic, but still. It bugs me that I can’t be (for example) a Wizard who only knows a Magic Missile spell but can cast 5 of them instead of the 3 dictated by his level. It feels like exactly what it is – a completely arbitrary way of rating characters so you can pit them against random monster enounters (hmmm .. I should have put random encounters on the list too).

2. Two Book Minimum

You want to play Dungeons and Dragons? Then you have to buy at least two books – the Players Handbook and the Dungeon Master’s Guide. Oh, you wanted a background? One more book (e.g. Player’s Guide to Faerun). Oh, you needed monsters for the background. That’s another (e.g. Monster Manual). Brand new at MSRP that’s $122.80. Even getting them second hand it’s over $50. One list of “essential” D&D books on Amazon has 40 entries totalling $834.75 (that includes Amazon’s discounts).

“But Wizards spawned the whole d20 movement, when they ‘open sourced’ the system!” Oh, really? Great – lots more games based around the same shit system.

1. Rabid Players

So, after spending vast quantities of money on all these expensive and extensive rule books, it seems that the average D&D player doesn’t want to be told that the game is pile of poo. Instead, they defend any slight vociferously, even when blatantly in the wrong (or when they miss the point entirely). And this symptom seems to spread into the other popular D20 games (ever notice how often Mutants and Masterminds players say “System X is no good, you can do all that and more in M&M”?).


Originally written for lategaming.com.

Status: Refugee – Perspective Selection

One thing that was bugging me about this game was that which we’ve discussed on a number of occasions about different games: scope. If you are playing refugees with only a small number of worlds available to you, the sheer scope for play is mind-boggling. This then probably requires either a lot of work on the part of the GM, or a lot of background information in the form of source books – or more likely both.

Reducing the character roles available (at least in the initial version of the game) would help give this game better focus. It occurred to me that having the players take on the role of police / enforcement would create a lot of interesting roleplaying situations. What happens when a group of refugees on a particular planet start getting angry at their conditions and decide to become militant? What if two large groups of refugees who had rivalries on Earth get transplanted to the same planet? … and so on.

Giving the focus to policing allows me as a game designer to focus on the things that are important to that sort of role. E.g. what are the laws in different alien societies, how many planets are there and how many humans to each, etc. I can more easily create rules of thumb for large numbers of planets, because I’m viewing them from a particular perspective.

For now, as I continue work on this game, I’m going to assume that the players are humans working for this agency. Expect to see some more background information and fictional snippets over the coming weeks.


Originally written for lategaming.com.