Friday, 13 November 2020

Long time, no C

 I'm back!

I took a break from RPG things and worked on some other stuff for a while, and the group also had issues getting a real session going, so we'll skip ahead with a short look back and then move on with our lives. But first, some news from the development front! (imagine a 30s newscaster voice, please).


Right, so Digitalocean, what owns Nanobox, decided that that's not a platform they want to keep any longer and are shutting the service down. Worth mentioning is that DO bought Nanobox because they were taking market shares from DO and other bigger places, and offering a really good product (basically an abstraction layer for Docker and I don't know why I'm giving ya'll these details you don't give a shit). DO bought them, and a year later they're shutting it down and telling people to "use our NEW platform instead!" to which I say fi on that, I'm taking my business elsewhere.

What does that mean for me, the customer?

Seeing as how I was the only one that actually used my Generator generator, nothing. Nobody is affected. A few of my posts should probably be updated because they have iframes making requests to nowhere, but I'll get there ... some day.

So no generators?

Actually, I'm working on a new thing... it's not ready for unveiling right now, but I'll get to that later. It's gonna be awesome, though. All my tools are awesome, ya'll know that.

Right, with this done, let's get down to business!

(spoilers for TotSK and ASE, and some Shadowbrook Mansion; beware!)

What's up with the party?

I don't remember where I left off, but the group gave up on Tomb of the Serpent Kings after they (well, one player really) figured it was too dangerous to go on. They discovered perhaps half the map? Ish? Before running into a locked door (TotSK spoiler I guess, but the key hangs from the chain on the basilisk's neck), and a Basilisk, and a goblin that wanted to make a player into their king (the player, incidentally, who didn't want to become king because "they might eat their kings").

Anyway, they (or the leader, really) gave up on TotSK, and then the group shopped around for some other dungeon to explore. Worth mentioning is that the group's not seen all of Hole in the Oak either, again opting out of delving further because it's "too dangerous."

The group decides to make a visit to Shadowbrook Manor; as mentioned in an earlier post they had the option of going there first but didn't care to make enemies with an NPC adventuring group and so went to TotSK instead. Except, the group that went to Shadowbrook Manor left the Skeleton Closet open. There's been a steady supply of skeletons growing in that house, eventually spilling out into the grounds, ever since that group left. One skeleton every other second or so. And it's been at least a month since they left. That's 1,314,000,000 skeletons. I've been seeding the group's travels with random skeletons. Now they finally found the source; a giant WAVE of skeletons growing on the horizon. (I've decided that the skeletons are just milling about until something humanoid shows up, at which point they charge, which is why they've not gotten any further.)

The group decides that no, let's not go to the haunted mansion. Let's go to this place in the mountains where you need a magic sick rock to get in (I might have seeded ASE too).

They take off, after eventually buying winter clothes (mountains are cold) and rations (3 weeks of rations; it should take them about 10 days to get there, they figure it's fine). They also hire a guide, an old hunter/trapper named... something, I can't remember, to help them find their way.

Mother nature says it's not fine. They get caught in thunderstorms and blizzards and strange Spirit Clouds. They have to trek out of the way of a goblin raiding party. They're losing time. They find an abandoned (haunted) tower. The guide says that it's bad news and that if they insist on going there he'll return to town instead. They insist; he leaves and they head to the tower without him. Inside they get a few rooms before getting spooked by ghouls and legging it (current treasure: 9 golden rat teeth).

They make it to the mountain and to the Gatehouse (I think it's called?), and make their way inside. They find the reactor, get attacked by radioactive stirges, find some chrysoberyls (600 gp!), and then get chased by robots, at which point we need to take a break.

After the session, I tell them that I've noticed they're being super careful because it's so far from civilization and that it'll take too long to bring a new PC into the group, and that they shouldn't worry about that because I'll weave a new PC into the game at a fitting place instead.

The "leader" player is offended by this and claims I'm calling him, specifically, out and leaves the group. He also says that it feels like they're never allowed to "win." Let's talk a bit about that because I disagree.

Leaning into the game.

OSR games tend to be very lethal. I've lowered the lethality of my game, but instead crippled characters (a few have lost legs or arms). I've given no mechanical maluses for having a prosthetic leg/arm (except ya can't run) and requiring a period of convalescence. I think that's fair, right?

The group, or rather the player that left because he definitely had the "leader" role in the group, didn't care for downtime. I said, "this guy needs to rest, he just lost his leg, it'll take 6 weeks before he's on his... leg, again." And the group just "decided" that they couldn't afford to wait that long (it costs 1 gp per day at the inn).

Another character lost their arm, this time belonging to the "leader" player. He was retired immediately because again they couldn't afford to wait.

A third character lost their leg; I specifically told the group that there were no maluses (except the running) and that they'd be able to adventure as well as anyone else once they were healed up. Since the character belonged to the same player, the character was retired.

The group has, so far, scratched the surface of three dungeons. For various reasons (traps, fighting when they should be fleeing) they've retired three characters (one belonging to another player) + another character retired when the guy was told I wouldn't let him play stupid because of a low intelligence score.

The cleric has leveled; that's at least 1500gp for him alone. Given that they split the gold equally, that means they've gotten at least 1500 x 4 = 6,000 gp. Sure, they bleed money (the cleric bought a silver Warhammer, and then had to sell it to pay for a new suit of armor (lol)), but they're clearly doing fine.

So why does he feel like they're not "winning"? I dislike the "win" mentality to begin with; RPGs aren't about winning or losing, they're about telling a story together. So when I say "hey, it's fine if that guy lost an arm, he can still adventure" I'm really saying "let's keep the story going for this guy." Because I want the story to grow.

Sure, there'll be losses along the way. PCs have died, but the group's story lives. The world's story lives. I think that's where the disconnect is. Perhaps the character's story is more important to him, and if so then yes, OSE might not be the medium for him.

But at the same time, if the character's story is important to him then there's no reason to retire them. So perhaps getting a lot of gold is more important to him? In that case, he needs to lean into the fiction. Yes, the logical thing to do is to not delve into dungeons. If it's all about making money there are better ways to achieve that than going into horrorplaces that mankind was never meant to know, right? But, given the fiction (you play someone that goes into dungeons to make money), perhaps you need to lean into that instead. Delve deeper, instead. Yes, it'll be dangerous and yes, someone will die. Death is first of all NOT final (as the cleric found out), and even if it is, if you had fun while playing isn't that the biggest win?

Returning to business as usual

So that player dropped out. Luckily, I found another player that wanted to join. The group's deep in the Gatehouse (near the Simulation, for those of you who know) when he joins. Hidden behind a crystal statue is a weird sarcophagus-looking thing:
And with a big red button on it, Buffalo-Frans decides that red is a good colour because it's colourful (?) and so he pushes it.

Out steps Mangle-Manfred, a relative! But why? And how? These questions will have to wait because August-Wilhelm (the cleric) decides to open the very tempting chest, at which point the statues come alive and attack!

A brief fight later, and the group is rewarded with a gold bar (600 gp). Now they just gotta find their way out. Because the player that left held the map. They do find their way out and make their way toward civilization. On their way, they trade with two goblins (who was on their way to an orc camp to bribe the orcs with food). They buy 7 days of rations (x 6, because there are 2 henches, too) for a total of... 5 rat teeth and a lead-clad chest on a cart. The group played the encounter so well ( *whispering* "No, don't sell them the golden teeth of might, we need those!" etc) that I just went with it. Also, killing the group at this point because they starve to death on a mountainside is not ... good storytelling. 

The group eventually arrived at the swamp about two days from Utböle (base camp/hometown), where they met a trader telling them that a skeleton army is laying siege to the town. "Wait, nobody told anybody about that!" one of the players asked. So it's a wrench thrown into the works, but they seem to enjoy it.

There are 2,628,000,000 skeletons across the countryside. A new skeleton joins every other second or so. I'm going to leave figuring this out to the players, lol.

The death of a clergyman

The cleric actually died in TotSK, he spent too long staring at cracks in the ceiling, and the trap came down on top of him. The player seemed okay with it, but the group haggled with the Church of Kedarr (Kedaj), a Cat of Death, and sold the cleric's soul to her in order to resurrect him (the cleric, that is). So the Cleric of Helm is now the Cleric of Helm-Kedarr, and has gotten a bunch of new clerical vows to deal with (have to push things off of surfaces, have to bury their slain enemies). A side-effect of the resurrection is that flames flicker (or outright die out) whenever the cleric is nearby; torchlight doesn't reach as far in the dungeon, either.

Definitely one for the highlights reel.

Tuesday, 16 June 2020

Bounty and Villain generator (ish)

The weaknesses in my generators are becoming apparent

A sample of the Bounty and Villain generator for Drier Deserts, Hotter Suns was posted in the OSR discord, and I figured I'd give it a whirl in the old generator. It highlighted a lot of issues; mostly formatting at this point. Solve formatting, and you can solve anything else I think.

Ignoring the dice roll (since we're rolling "behind the scenes"), it's clear that a single row will have issues portraying this information. Like, I'd prefer to have the output be something like this:
Swift 1
Tough 8
Bounty 4k
But that's not possible unless I split it into subtables -- so Dwarfish and Brawny would be in a table, there'd be a table for "Swift" and one for "Tough" and one for "Bounty." That said, it's fairly clear that the bounties are tied to the word; lower values of Swift and Tough means lower bounties. So, the "Word" could be split from the Swift/Tough part and be its own table, I guess.

Further issues appear when we add in the specialties:
 1-7 is easy, we just copy and paste the line 7 times to achieve that weighting. But, again, we'd like to format the result like so
Gun Specialist
Bounty 2k
Which, again, we can't. Yet. Anyway, here's the result of it.
As you can see, it's... okay, but lacking. I will prioritize formatting after I'm done with the sign-up functionality. I think the largest gain is to be had there. It would also be nice to have a function to sum up the bounties across the results, but that's ... soooo far away.

Magical Tome generator

In order to test what I've made, I'll make small generators for a while and see how they pan out. I've already found a bug, and I'm not sure how to solve it yet. It's to do with newlines, and I just hate how textarea (the HTML entity) is so bad. Each small step (fix) will eventually build into something pretty nice, I think, so they're worth taking.

Here are some magical tomes for your troubles.

A Party, Split! (Hole in the Oak, pt. 6)

Prior to this session, I offered the Magic-User the opportunity to switch from the B/X MU to the Holmes MU. The Holmes MU has, in my opinion, a better kit. I felt that the player got disinterested once they had used their one spell, last session, and I wanted to rectify that. While the Holmes MU still only has the one spell slot, they can write spell scrolls from level 1, and they know more spells.

The player took me up on that offer and now plays a Holmesian MU instead. They got to pick their spells from both the Holmes spell list and FEAST OF BUKAKO, which is completely free and worth picking up. Their character, Rodwulf, now knows the spells Sleep, Shield, Beacon of Terror, Enlargement, and Charm Person. Since Falbo is my version of Endon, the players know that Charm Person and similar spells are illegal. That's never stopped a player before, though.

The Session
Before heading down into the oak, the players get Halvar, the one-armed fighter from a few sessions ago, installed as the new innkeeper of The Golden Goose. The sheriff, Näsbjörn, accidentally reveals that the late innkeeper, Johannus, was found with a note stuffed in his tunic. The note read "snitches get stitches" because you gotta hit players across the head if you want them to figure shit out. The players are still not convinced that there's an evil spirit possessing a doll that did this, and instead invented a new miscreant; maybe the innkeeper had enemies?

(MAYBE HE DID! That's a great idea, actually. Maybe someone wants the inn for their own reason, and the murder of Johannus just coincided with an evil, child-killing doll that kills people talking shit about it?)

Halvar has no intention of letting the PCs stay for free, or cheaper, but would like investments. Not for shares or anything, though, but you know if you could help with the bills some? No, if there are strings attached to the money I guess I can just figure it out myself. No, you'd still pay the same for your room. What with this economy, you know...

The group also sits around for a week, letting Rodwulf create a Scroll of Sleep. Incidentally, this also meant that they were just in time for the meeting with the gnomes in the Oak.

The diplomatic meeting takes place in a fairy ring, where, according to the gnome, any oaths are made real. The PCs swear they won't attack the gnomes, the gnomes do likewise (I figure this is a lie from the gnomes' side). I'm not giving the players any indication that any oath in the ring has power over them. The gnome leader tries to get the PCs to agree to attack the ogre, but the PCs aren't biting. The PCs ask a few questions, but ultimately the meeting leads nowhere. The gnomes are satisfied that the PCs won't bother them, the players are satisfied that the gnomes won't bother them. They part ways.

The players figure they're running a bit low on inventory space, and pick up a failed farmer, Bartik to carry some stuff. Bartik is a simple man, with simple pleasures.

And so, they finally descend into the Oak proper.

Monday, 15 June 2020

Stealth release: Generators

I'm releasing Generators even though they're not quite finished

There's not much more to say, really. Right now, the only syntax that's allowed (and works!) is the table id syntax: {{id}}. More features are planned, but I'm also sick and tired of this application so...

Here's an example of a generator (and also an excuse for me to try it out on my own application!). It looks like this:
{{11}} and {{10}} {{9}}, from {{3}}.
{{11}} is a table of male names from, ca, 13th century London. {{10}} is likewise, but female names. {{9}} is a huge (~1.8k) list of surnames, also somewhat accurate to the 13th century. {{3}} is a list of wards in London, again taken from historical sources.
And here's the embedded object, with 5 entries just to show that it works:
And I think that's pretty neat, tbh. There's a lot of work to be done, still, but it's something that can be used now, immediately. And there's some value in that, too.

I've also added error tracking. I hope that I'll catch anything before the server burns to the ground. I don't think it will, but you never know.

Saturday, 13 June 2020

The Hunt Begins! (Hole in the Oak, pt. 5)

Session 0 (held in session 5; as my daughter is wont to say these days, "don't judge me!") yielded some good things. We talked a bit about lines and veils – things you don't want to see in the game at all and things you can accept allusions to – and a bit about conflict resolution. We also touched on the worst part of the dungeon, so far: the personality swap trap.

I don't like it. I like the idea of it, but I don't like forcing players into playing characters they don't want. As an effect that fades, it would be okay, but as it is written it's just straight-up bad. It touches on that whole "don't tell me how to play my character" thing. While PCs probably shouldn't pull every lever they come across, certain traps are just not fun. We retconned it, so August-Wilhelm is no longer a coward; the effect faded after a few days. Halvar is still retired, though.

"My" Death &  Dismemberment got positive feedback. I might tweak the actual table some, but the players enjoy hitting 0 HP not being a done deal, that there's a chance to survive. Zordo's player is brought up to speed on what happened in town after they left.

Spoilers below this line.

A generator of generators!?

Generators in the OSR sphere are largely JavaScript-based. It's easy to see why -- JS is immediately accessible, it lets you create dynamic web pages (or snippets for web pages), and it's fucking everywhere. But, as with all great things, there are downsides to the JS generators we've grown to know and love.

They're cumbersome. Like, so, so, so cumbersome. I'm not gonna name names or link you to any of them, but ... yeah. Some of them require you to host your text files elsewhere. Others require you to use extremely specific syntax but offer no validation of them ("test extensively" is not a validation). Others still offer hosting but you can't edit your own generators after having them hosted. Many offer you a blob of javascript you can add to your blog and get a sample output from.

My immediate goal was "I want dynamic table results", rather than "I need to fix everything" or something like that. I wanted to be able to write "2d6 orcs advance slowly down the side of the ravine" and have the output be "3 orcs advance slowly down the side of the ravine"; I figured that was a good place to start. You could make a JS page that just scanned the text for dice rolls and replaced them.

I've still not gotten anywhere near that. I made something else instead. I made a fucking generator. Quelle surprise, I guess, since the title is "A generator of generators!?" and I'm talking about ... well, yeah.

This tool, though, I had a mission statement for. It's a bit undefined around the edges, but overall it looks something like this:

Cassie's Generator Tool
  • The syntax should be clear and concise
  • Hosting for both the generator and the tables (lists) should be a solved problem for the user
  • Users should be able to edit their own tables if they need to
  • Users should be able to delete their own tables and generators, if they want to 
  • You should be able to use generators or tables someone else has made
  • It should offer embedding, no unsightly JS blob
  • If the user wants to, they should be able to download all their generators and tables
Here's a first sketch of the syntax:
A table result: {{table}}
A generator result: ||generator||
Dice notation: >1d6<, >1d6+2<
I'm still not sure about the dice notation, but I think it's important to have the difference between what should be rolled and what is information for the reader:
"The weapon does 1d6 damage" should just say "The weapon does 1d6 damage" in the output, whereas "The next >1d4< days" should say "The next 2 days" (plural "days" is gonna be a problem. Hm.)

I've not implemented everything yet. In fact, I've only solved the boring parts. But the good parts are coming. Here's what I made yesterday:
Now, that "{{11}}" says nothing, I know. I'll think of something. Eventually, there'll be helper functions for writing generator entries (like, you'd write {{ and get a search window to find the table you want a result from), but for now there's nothing like that.

The way the code's written, a generator is simply a very thin wrapper around a parser and a transformer, so using generators within other generators should be pretty easy. A few issues loom on the horizon, though. If I become as popular as Facebook, I can't host everything for free, and there might be some resource issues along with that popularity. I might have to move the platform to kubernetes eventually, just for that horizontal scaling. And also because I want to learn it.

Today and tomorrow I'll set up the embed thing, and then I think I might even link to the thing for public consumption.

Long time, no C

 I'm back! I took a break from RPG things and worked on some other stuff for a while, and the group also had issues getting a real sessi...