Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!


Forgot your password?
User Journal

Journal Journal: D&D, pics, inspiration and scheduling philosophy

I happened across Pixdaus while following someone's friendfeed, and I subscribed to its RSS feed.

It's a fast, fast RSS feed, and it's difficult to keep up with. However, I've been trying...A lot of what I've been seeing in it has been giving me genuine inspiration for settings, encounters, props and even campaigns for D&D. That, along with a blog post I recently read where the DM's roleplaying the giggling of some minor monstors got her players greatly and emotionally engaged in the combat. Roleplaying monster sounds? Why didn't I think of that? That could give me something about the combat side of things that I could enjoy.

It's sparked my interest in DMing again, and I'm slowly assembling a campaign in my mind. The next step is finding players and a suitable environment; GrandLAN, for its rich perpetual presence of players, was normally too noisy or cramped for comfortable play. I'm tempted to do hold it in my basement, where I can use my TV and sound system for still imagery and auditory props, but then I've got to worry about who can make it and when.

I still think that a "regularly scheduled" game is a bad approach. You can either count on a schedule, or you can count on the presence of players. Not both. Also, having variable time between games offers more opportunity to prepare and ensure an enjoyable session. I don't have a need to kill time; Like anybody else, I have precious little of that already. I have a desire to enjoy the game.

Journal Journal: On syntax highlighting and artificial intelligence

So on Rosetta Code, we use GeSHi for syntax highlighting. The relationship between Rosetta Code, GeSHi, a programming language and the code written in that language is fairly simple. (The exact order of events inside GeSHi might be slightly different; I haven't delved deeply into its core)

Rosetta Code (by way of a MediaWiki parser extension) gives GeSHi a few pointers about how it wants the code formatted, the language the code sample will be in, and, finally, the code sample itself.

GeSHi takes the code example, and loads the language file named after the language in question. Each language file defines a PHP associative array that contains(among a couple other things) simple rules for how GeSHi can apply formatting to the code in a way that will clarify it to the viewer. These rules include lists of known keywords of various classifications, symbols used for normal commenting conventions and optional regex matching rules for each, among other things.

It's a perfectly reasonable, fairly static approach that allows syntax highlighting to cover a broad variety of languages without knowing how to parse that language's actual syntax, and so avoiding having a syntax error break the whole process.

Unfortunately, it requires Rosetta Code to be able to tell GeSHi what language a code sample is written in. It also leads to odd scenarios where a supported language and an unsupported language are so closely related that examples written for the unsupported language can be comfortably highlighted using the the rules for the supported language.

And I have yet to learn of a good way to do syntax highlighting for Forth. (The Forth developers appear to pretty much keep to their own community, and don't seem to do much in the way of outreach, which makes finding a solution relatively difficult, but I digress...)

So what does this have to do with artificial intelligence? Well, in identifying a language without being told what it is, of course!

A few solutions have been discussed. One approach that has been attempted had something to do with Markov Chains. The code is in the GeSHi repos, and I haven't looked at it.

One solution I suggested was to run the code example through all the supported languages (Yes, I know, that's expensive. Not something to be done in real time.), and select the ruleset based on how many rules(X) were matched for a language and how much of the code sample was identified(Y). Using a simple heuristic of (a*X)/(b*Y), you can account for a number of matched rules while hopefully accounting for an overly-greedy regex rule.

How can we take this a step farther? How about formatting languages we don't know about?

Well, many, many languages have rules in common. Common keywords, common code block identifiers, common symbols for comments, common symbols for quotation, etc. This tends to result from their being derived or inspired in some way by another language. For the sake of avoiding pedantry, I'll just say that C, C++, Perl, Python, PHP, Pascal and Java all have a few common ancestors.

One way would be to note the best N language matches, take an intersection of their common rules, and apply that intersection as its own ruleset. This would certainly work for many of the variants of BASIC out there, as well as specialized variants of common languages like C and low-level ISAs.

User Journal

Journal Journal: Wanted: Crosspost to Slashdot 3

I haven't regularly posted to my journal here on Slashdot in a couple years. Meanwhile, I've posted over 1000 blog posts elsewhere, and recently started using simulpost tools to post to several different SN sites I'm on. However, there are still folks here who aren't in those places, and, of course, there's the wonderful world of the Firehose and the exhilarating risk that some of my idle musings might hit the front page. (If I'm averaging almost three posts per day, there's bound to be something interesting in there...)

What I'd like is the ability to post to my Slashdot account using my own script. I remember the Early days of Slashdot where some folks were using third-party clients to participate in the commenting system. It'd be nice if it were possible for us to do that again today, but with journals. It'd be nice for me to be able to reconnect with old friends, and it'd definitely be nice to bring some of that hacker and DIY flavor back to Slashdot. With the exception of folks like Alioth, that piece of Slashdot seems to be all but gone.

User Journal

Journal Journal: Feed happy 8

So I threw together a few more feeds. Here's the list of all the ones I've got right now:

Bad English: Usages of the English language that annoy me. Currently aggregates searches for "begs the question" and "could care less". Feel free to suggest more; If I like them, I'll add them.

Facepalms and Headdesks: Aggregates searches for the unconventional emotiwords (I don't know a better term; I don't think onomatopoeia) terms "facepalm" and "headdesk". If you have any more along these lines, let me know...

Meme Happy: Currently aggregates "in im ur", "it's over 9000" and "do a barrel roll". I also added a search for '"ours is not to wonder why, ours is but to do or" -die' ... Need more memes.

Zero Wing: When I tried to come up with memes for "meme happy", I kept thinking of references to Zero Wing. So that got its own feed.

Role Playing (Games)

Journal Journal: This week's anecdote 1

...Comes from the D&D game I'm *not* runing. My character (A wizard/cleric crossclass) had set alarm spells in case he was attacked in the middle of the night. (His party members didn't really care for him at this point.) When his alarm spells triggered, he discovered that nobody had entered his room. Rather, someone was trying to intrude into the building entrance. (He accidentally set the field of view of his "Eyes of Alarm" spell a bit to broad, I guess.)

Not wanting to spend the five minutes to don his leather armor, I simply said "OK, I put on my robe and wizard hat, and head out into the hall."

At this point, one of the other players started laughing uncontrollably. He and I were apparently the only two who were familiar with the Legend of Bloodninja.


Journal Journal: Rosetta Code live lists of unimplemented tasks.

Rosetta Code's lists of unimplemented tasks in a given language are now updated daily at 00:00 UTC by a bot on a cron job. As part of its duties, the bot uploads a copy of itself, too. And you can probably guess what language I wrote it in.

But don't you dare let this hit the front page around here; I don't have the money to pay for better than a bottom-level Slicehost VPS. (Though that's a far sight better than the Dreamhost shared hosting account RC was on when it made its debut around here...)

So tell your friends, fellow coder geeks and language enthusiasts.

And before you say anything, yes, I know there are sites that do similar things. When we hit the front page of Slashdot two years ago, I put all the ones people mentioned into one page.
Role Playing (Games)

Journal Journal: Joe the Zombie 9

So in the D&D 4e game I ran last Saturday, the PCs had knocked an NPC (who'd earlier been flippantly addressed by another NPC as "Joe", because he was a spontaneous tavern patron bit character who I didn't intend or expect to be important.) unconscious (0 hp) and laid him on a table. Then they tried blasting open a door, triggering a level 7 Necrotic damage trap. (This is the D&D 4e equivalent to 3e's negative energy.)

The unconscious NPC was within range of the blast, was killed by the necrotic blast...and was pumped sufficiently full of necrotic energy to be brought back as a zombie. Checked the rules on zombies, and discovered they follow the orders of whoever "created" them. Which I ruled to be the PC that blasted the door.

So now that PC has a pet Zombie named Joe, which we're handling as though it were a Ranger's animal companion. He told me the first thing he's going to do is find a way to get the zombie to stop rotting...


Journal Journal: Perl Meme 4

# Take this perl script and modify its behavior by adding or inserting up to three lines.
# You may jump over or skip existing lines, but do not remove or modify them.
# Once you've modified it, post your version somewhere.

Role Playing (Games)

Journal Journal: Group imagination in an RPG

In my first (and most recent) major campaign as DM ( Which lasted about 7 months until several adjacent working weekends completely broke our scheduling.), I started off by designing a setting, filling a three-ring binder with a couple hundred primary and incidental NPCs (Bulk NPC generators are handy!), and then hitting the ground with the players, a few character concepts and a party concept that made it easy for players to drift in and out.

During the course of play, I discovered that actually planning plot and organization relationships outside of session time was, more often than not, a waste of time. I discovered that players wouldn't pick up plot hints if they were too subtle, and would feel like they were being led around by the nose if the hints were highly visible. Character motivations often led to the PCs behaving in a manner opposite the planned storyline, and they subtly flipped back and forth between good and evil. (Sure, they'll save the community from the evil bad boss. But if a mook in a group they were fighting tries to flee, he'd be killed while he was running away. Prisoners were for interrogation or to be sent back as messengers.) Worst of all, I discovered my players were smarter than I was; I'd think I had all of a character's motivations and connections planned out, and somebody would say at some point, "Wait. That doesn't make sense. If that's the case, then why didn't x do y?" And they'd have a very good point, and I didn't always have an answer in mind.

Eventually, I stopped planning outside the sessions. Heck, for the most part, I stopped planning altogether; The world became whatever the players saw in it. I might listen to the players talk to each other about the NPCs they'd encountered and their suspicions of NPC and in-game organizational activities, and I'd take their concepts, apply them, twist them or subvert them, and have pieces of them slowly appear as the characters investigated further. Or I might listen to a player mutter to themselves about an NPC or scenario, and take a piece of what they're saying and use it. Or I might just watch the characters play out their current situation and think, "Hey, it'd be pretty cool if that [otherwise mundane element] was important," and give it a little extra flavor text; The players' subsequent debate over the element would paint a rough picture of what I could do with it. Within the first couple months of that campaign, I'd largely exhausted the resources in my binder and was laying plot, NPCs and encounters out on an as-needed basis in-session. And it was a lot of fun.

My current campaign, started six weeks ago (and running on an alternating-weekend schedule), began with a puzzle dungeon. I had a vague idea of some of the puzzles I wanted to use in it, including some flavor and concepts for the entrance. The entrance had a rune on it that I had intended as a non-lingual hint to how to solve the first puzzle they would face once they got in the door. Instead, one of the characters saw it, and cast a very expensive comprehend languages spell to understand its meaning. Well, crud; If I told him what it might mean in its original language, it would completely throw their attention in the wrong direction for the puzzle it was supposed to help with. I wanted to get them to use their brains, not frustrate them to boredom and tears.

So I threw out the planned puzzles, gave the rune a meaning, and applied it to opening the front door (Which, while entirely non-magical, and entirely non-mechanical, did require them to think before they got it open. Though one of the PCs nearly got himself crushed in the process.). As for the rest of the puzzles, I made them up on the fly, using the PC's comprehend languages to give one-word clues to how to solve them. And it significantly added to the dungeon, because I was able to tie together the religious themes of the PCs and the dungeon's background, while using the runes to give an atmosphere of religious test.

With these experiences, I've found I prefer this way of creating a campaign; The world and plot are almost as much a mystery to me as to my players, but it's continually revealed to be a rich one built from the fantasies of my players.
Role Playing (Games)

Journal Journal: D&D madness and logic

First the madness. We had nine people in my group tonight. And I got an unexpected PK.

I'm not going to try to explain the whole session...It was incredibly chaotic, the party split into four active units, and a town was left in ruins. I'll tell you how that went, though...

The first active unit basically waited outside the town. The characters stayed out of trouble, but it meant the players were pretty much sitting there doing nothing for most of the session.

The second active unit was a ghost PC that decided he was going to haunt the (quite occupied) jail. We use the damage-dealing variant for turn undead. He had 12 hit points. The cleric had extra turning. And he failed his check to regen at his body in 1d4 days...So I got a PK because the player was an idiot. (In his defense, he was a 13-year-old kid who'd only been playing for three weeks. But that doesn't mean he wasn't an idiot as a player.) He later told me that what he'd done was incredibly stupid...

The third active unit is a character played by a guy known around here as Jinto Linn (or kilocmdrlinn). He investigated the cliche mysterious old abandoned mansion and found some key plot/quest items, getting torched by a trapped chest in the process. Then he hung out with the first active unit.

The fourth active unit raided the magic/weapons/armor shop in town. They told one of the characters (who was a bit unstable) to set fire to a couple houses at the outside of town, so the police and the mage who ran the shop would get drawn into efforts to put out the fire. That character (controlled by me, because the player was rolling up a more mellow character) went on an arson spree which included burning down the jail. The rest of the unit broke into the shop, set off a couple traps, and made off with a coffin full of loot. So now I have to figure out how much they got away with. And how much of it is traceable.

Incidentally, the coffin was being carried on the back of the party tank. It held the corpse of the ghost (as a place for the ghost to return to after 1d4 days) until they dumped it out and left it in the shop.

Now the logic. The group is splitting. I'm getting at least five of the players, one of my former players is going to run a Shadowrun campaign with at least two of the players, and another player is on the fence as to which campaign he'll go to.

Role Playing (Games)

Journal Journal: Running an RPG campaign 1

I've got a dirty secret. I prefer playing as DM than as a player. The reason is simple...I don't like waiting.

When I'm a normal player, I have to wait for my turn. Depending on the number and quality of players (and I've been involved in an excessively large group with a few slowpokes in it.), that can be a lot of down time.

As a DM, every turn is my turn. Sure, it's harder; I've got to keep a bunch of people from getting bored, and I've got to fit a plot into the player chaos. I've got my faults as a DM, but I'm getting better at it. And I'm never bored. Frustrated and angry at times, but never bored. :-)

Role Playing (Games)

Journal Journal: Fepic Ale 4

Fepic Ale was first brewed by a gnomish bard with a penchant for alcohol and pranks. His intent was to brew an unassuming alcohol that would reduce the stoutest of men into gibbering idiots. He used it to great effect in performances, daring anyone in his audience to take a pint and remain standing. If nobody took the dare, he would bring out his lovely assistant, who would offer to spend the evening with anyone who could take the pint and still talk intelligibly.

Some took the dare, but many jumped at the opportunity to prove themselves to the lovely assistant. For many years, nobody beat the drink.

However, one day the bard was introducing his new, beautiful and youthful--but legal--assistant to the crowd. Every man in town wanted to try for the young lady. The bard, making eight silver on every pint--and more than a little greedy--modified the wager. If, after two pints, the man was still standing, he would be allowed to spend the whole night with the assistant.

Well, if you flip a coin enough times, it will eventually stop on its edge.

Out of the hundred men who drank Fepic Ale that night, twelve died, eight-seven passed out--and one bear of a man remained standing. True to his word, the bard left his assistant in the hands of the man, who enjoyed himself to no end that night. Meanwhile, the bard, being responsible for the poisoning death of twelve men, fled town.

The next day, the assistant, sore in many ways, but mostly sore at the bard, was arrested by the town's sherrif. In exchange for her freedom, she offered to lead a group of deputies to the bard who concocted Fepic Ale.

They traveled for several days, and eventually caught up with the bard. The young woman was bound to a tree while the deputies confronted the bard. The bard resisted, and was killed in the struggle. The deputies freed the young woman before returning to their own town, leaving her all of the bard's posessions, sans one piece of parchment that had a recipe for an ale on it, which they had burned on the spot.

While she said nothing at the time, the young woman recognized that what they burned wasn't the recipe for Fepic Ale, but for a milder drink the bard had picked up in another town. After searching her new posessions, she discovered the true recipe, hidden in a pouch in the dead bard's clothing.

While the deputies swear they killed the bard and destroyed the recipe, there are occasional rumors of a performer daring and teasing audiences with Fepic Ale in towns small and large alike.

FEPIC ALE: Alcoholic beverege. Fort save DC 25 or be intoxicated. Fort save DC 16 or take 2d4 INT and 2d4 WIS damage.

User Journal

Journal Journal: I can has net neutrality? 2

Twice tonight, Comcast has blocked *.google.com. "reader.google.com" redirects to an MSN Live Search for "reader google", while "mail.google.com" redirects to an MSN Live Search for "mail google".

I guess it's time to bite the bulllet and reboot my router[1], so I can switch to OpenDNS.

[1] Meaning at least five minutes of No Internet, as a consequence of Comcast's modem sucking so badly.

Slashdot Top Deals

How long does it take a DEC field service engineer to change a lightbulb? It depends on how many bad ones he brought with him.