Monday, 29 July 2024

Let's Go: setting up KataGo's Human-like network

TL;DR: It's all about them command-line arguments. Here's a short guide:

  1. Install Sabaki
  2. Download the latest release of KataGo and extract it somewhere sensible
  3. Download the human-like model, don't extract this
  4. In Sabaki, open preferences

  5. Click on Engines

  6. Click "Add"
  7. Give the engine a name
  8. In "no arguments", add the following:
    gtp -config C:/KataGoPath/v1.15.0-opencl/gtp_human5k_example.cfg -model C:/ModelPath/b18c384nbt-humanv0.bin.gz -human-model C:/ModelPath/b18c384nbt-humanv0.bin.gz
  9. In sabaki, attach an engine:

  10. Right-click the engine to set it as a player:
I think that's about it.

I suspect, but I haven't bothered checking into it, that the first -model is the analyze one, so you can set that differently to the human-model one. I use katrain for my analysis instead.

Monday, 26 June 2023

Rust

 I'm going to learn Rust. I mean, I mostly already know it, but I want to have a clear goal to strive for, so here goes:

  • Gain an understanding of lifetimes and the borrow checker

  • Support open source projects I care about

  • Write at least 1 open source project in 6 months. I have a list:

    1. Postgres Logical Replication Validator -- we have one (written by me) at work, but it's in Python. Convert to rust and publish
    2. postgres-exporter -- export query statistics from pg dbs
    3. repmgr flapping-foo -- when repmgr starts flapping, lower the requirements for failover successively, ish

    Biggest hurdle is probably finding the time. I have some at work, so that's good. Now I just need to figure out where to find the data I need.

Monday, 19 June 2023

Pivot! Pivot!

Aight.

I might not be playing that much (roleplaying games, at least) these days. New family member, other hobbies, work... there are only so many hours in the day for all of them. That said, I don't really want to give up this blog either. Sure, I'm not ... prolific ... in my writing, to say the least, but I think my writing has value. I don't, however, see myself writing RPG things as such here at the moment. So here's the roadmap:

I'm not gonna.

I'm gonna write about things I care about, instead. It might be RPGs. It might be bread. It might be programming. But I'll write.

Wednesday, 12 October 2022

Cy-Borg, initial thoughts

Got my hands on a copy of Cy-borg (Cy-Borg, with a capital B?). It's got neon, it's got cybertech, it's got that neo-synth thing going on. It is completely empty.

The book has all the trappings of a cyberpunk book, but it offers us nothing new. At this point, the 80s and 90s cyberpunk ideas are just dated, and regurgitating their style and messages (old already in the 90s) gives us nothing new. As a tribute to the 80s/90s? I guess it's fine? Like, my issue is largely the fact that Cy- only reduces cyberpunk to a collection of objects, colors and moods, and it gives us nothing but a "Corporations bad" statement; it is, stylistically and linguistically, stuck in an exaggeration of the pointers of older titles. Someone much smarter than me once wrote (paraphrased) that Pacific Rim gladly steals from a bunch of things (games, comics etc), but the idea is that if you steal you're supposed to give something back. Here we are, with Cy- doing the same thing.

We should ask ourselves how a cyberpunk game should look in the year 2022, not "what if 80s but exaggerated?" This is where Cy- falls short -- its author asks no questions. What about necro- and psychopolitics, or exploring state vs/and individual, isolation/enclosure, intellectual rights/private properties has evolved (WB shuttering thousands of shows just for a tax write-off is adjacent, for sure) and its connected ideologies. Hustle mentality, grindset etc. How does actual control look today?

An RPG written today shouldn't be schooled by an anime that's 20 years older, yet here we are. Lain and adjacents (Paranoia Agent, Pulse) are all asking more pertinent questions about the state of today than Cy- is. Goddamn.

For a more cyberpunk game, take a look at iHunt. Yes. A game that's not even framing itself as a cyberpunk game is more cyberpunk than Cy- (by virtue of being a game set in the now, not the 80s). Good fucking job.

At least the art is pretty. But it becomes shallow when there's nothing underneath.

Monday, 2 May 2022

What's up, nerds?

In the last chapter...

I wrote a thread about this on the bird app, but I'll write about it here too.

After a break of Electric Bastionland (itself having had a longer break because we (as in my wife and I) lost our daughter last summer), the group™is returning to the Fantasy Game. Last time we saw them, they had successfully exited the dungeon proper, and was heading towards the nearest City.

What city?

I don't know! I rarely (if ever) plan out cities, but this time we're probably going to stay in the "vicinity", so to speak, and so we'll need a better plan than "just wing it." Don't worry, though; there'll be plenty of winging it. Let's start!

Step the one:

1:

Find a map of a city. This one'll do. We'll probably rename it later.


2:

Buy a copy of Beak, Feather & Bone. Invite your players to play it with you, on the map you just printed. Let the players select any faction they like. What will you get? I don't know!

Beak, Feather & Bone is a very simple game, but in short the mechanic is "draw card, let current player select a location (on the map) and claim it for their faction, what they claim is based on the card", ish. Buy it to find out more, it's not expensive (and it's very good).

3:

Once the game is over, you might have something like this:
Legend:
Yellow: Merchants
Purple: Animal Shelters
Blue: Mages
Green: City Watch
Red: Clerics

1. Toll Gate Inn
"They should tear it down, it's a damn disgrace is what it is!"
A dilapidated building; windows broken and roof is missing several tiles. Mostly a gathering place for the local youths, and rats. Future plans (of the merchant's guild) involves making it into a proper toll house.

2. Farm House
"I don't really know what they do there, it's just... there? Look for the house with grass roof."
Well-kept building; grass on the roof. Rehabilitates and sells animals.

3. Old Tower
"I dunno, I think the head wizard lived there?"
Tall, white tower, a few missing bricks he.re and there. The leader of the Mage's Guild lived there, but it now stands empty, save for the oak furniture that was too heavy to move.

4. City Watch Post
"I guess they keep it clean enough."
Red brick building, regular windows. The City Watch bought this house on auction in order to expand its operations in the city.

Rival: J'han Shard
"Indecisive, weak, pathetic; to imagine that the lineage would end with him."
Worn-out black clothes. Wants to get the building back, it's been in his family for generations.

5. Old Church
"It's sad that it's not used any longer."
Big, stained-glass windows, dark brown/red brick building. Was used by the local clerics before they got their new place; still used for some sermons.

6. Bank
"Way too ostentatious. Look for the building what looks like someone shat out a marble turd with gold accents."
Marble columns, gold accents, statues.
The current bank of the Merchant's Guild. Inside is more marble, arched ceiling, echoes tend to live forever, so it's pretty loud.

7. Farm House
"I've seen it, but I've never bought anything from them."
Regular farm house; sells farm-related groceries. Inside there're just shelves and shelves of stuff.

Rival: James Ahan
"That man was born with a serpent's tongue, I tell ya. Sharp as a knife, aye, but I only trust him as far as I can throw him."
Well-dressed, walking cane, imperial moustache, bowler hat.
He just wants to flip the place for a nice profit. He's got a buyer lined up and all.

8. The old library
"I tend to just ignore it."
Dilapidated wooden building. Inside there's water damage, holes in the floor etc. 

Rival: Mx Acallister
"Mx Acallister is one proud person; keeps their head high but always a kind word for the lesser fortunate."
Old, been around for a long while. They want to tear it down to build a new place of worship.

9. City Watch Curiosities
"I think they sell ... used goods? Like, what equipment they have that's not good enuf for their own? Or if they sell... stuff they've taken from thieves?"
Log house, no windows. Inside rows of tables, shelves. Used by the city watch to sell equipment that's past usability.

10: Soup Kitchen
"When you have to go there, you know you've hit rock bottom. *sniffs* I would never..."
Concrete building, beige/eggshell white, large gate. Inside tables, a few cots, some boxes with second-hand stuff.

Rival: Bengt Urskogsholm
"That self-serving bastard, greedy as few he is."
Fat, with a moustache. He's jealous because when he was a kid there was no soup kitchen around, so feels that nobody deserves one.

11: Port Office
"The fees are killing us, but for some reason some captains (and I'm not saying smugglers but I am saying y'know) don't have to pay them?"
Two-story building, whitewashed walls, half-timber and nogging. Bright, well-lit spaces inside. Hardwood floors. Smells of fish.

12: Curiosities
"Look, all I'm saying is that they can get their hands on a lot of weird stuff for being a bunch of farmers. Check it out. It's pretty anonymous, so you'll have to look for it, but it's between the bank and the soup kitchen. Like a hole in the wall, really."
An anonymous wooden door leads into a small, cramped, but clean, store.

13: New School Building
"I'm looking forward to it; I think it'll bring a much-needed facelift for the entire neighbourhood."
A huge house currently being renovated; going to be a new school building for the Mage's Guild. Right now a lot of construction scaffolding and similar. Walls are in place, but lots to be done.

14: Old City Watch office
"If they're not going to use it, they should tear it down, sell it, or just... do something about it."
With the current City Watch expansion, the building is much too small, so was abandoned for a newer building. Dilapidated. Empty; walls and floors are worn out and dirty.

15: Priest's Council
"That place is haunted, I swear. I've heard strange, ominous things at night."
Cellar was used as the Priest's Council earlier. Paint is chipped, it smells of mildew, and only dust lives here now.

Rival: Opal Langston
"If sour grapes had a face, it'd be her. Reactionary."
Frail, constant look of displeasure, like she's eating a lemon. In reality, she hates the place because her husband died there; he was a priest.

16: Statue
"It's ugly. It's loud. What's there to like?"
In an effort to show how powerful and popular they are, the Merchant's Guild commissioned a magical statue that will jingle its money bag every full hour, and also say "A MONEY SPENT IS A MONEY EARNED" and similar useless things at 9 pm.

Rival: Captain Harg
"That woman is made of harder stuff. If iron fist was in the dictionary, it'd be her. What do you mean, it is? She is? No way!"
Gray hair in a tight bun, wears an eye patch over her right eye. She wants to get rid of the statue because it keeps waking her up at night. She's not alone in this.

17: Pet Sematary (spelling mine)
"I think it's nice that people'll have a place to bury their pets."
The farm people (or hipsters) are making this place into a pet cemetery. Right now they're preparing the grounds. There's a certain air of peacefulness around the place.

Rival: Mac Iknit
"He's been a priest since I dunno, I think my pa told me about him when he was young?"
Wears black priest clothes. Has a long, white beard. Believes that the church owns the mortality question, and that it's an affront to the gods that some doggone hippies are making their own cemetery.

18: Fortune Teller
"No! I promise you, she said I'd meet a dark, handsome man and I did!"
Dark building, torches leading up to the door a nice touch. Inside it's like every Hollywood Hoodoo Store.

19: Old Prison
"People died in those cells, and I know for a fact that it's haunted my friend from down the street says he knows someone who saw a ghost there"
Gray, quiet. Bricks, barred windows. Inside mostly prison cells, it's been abandoned for 40-50 years.

20: New Church Grounds
"It's very inviting, but a bit ostentatious."
Marble, mosaics, stained-glass windows. A fantasy version of Hillsong Megachurches. Inside statues, velvet, deep red carpet, crystal chandeliers.

Citadel
"People ending up there won't ever get out. You go there to die."
The citadel (the seat of power) belongs to the City Watch in all but name. Whatever the city's original ruler, they're just a puppet to the City Watch now. They've combined the citadel into both headquarters and prison. But what else goes on in there..?

---

So yeah. I've got a pretty fleshed out city. The farm people seem a bit off, to be honest. At least the merchants are honest in what they're about, no? My players are still not used to the freedom they're afforded -- they're somewhat unsure about their footing, but they did better the longer the game ran, and I'm sure the next time we run something it'll go even better.

From this, I'll draw up some more factions (not covered by the game) and give each faction one or two clocks. Each rival will also get their own clock, of course. Then I just need to release the party into the city and see what happens. 

The rest of the world is about as blank as it was before. Somewhere in the "middle of the forest" there's the Hole in the Oak, and in the opposite direction from the city they'll find Another Adventure Location. What that is, I don't know yet; I'll get to that eventually. I think next session (tomorrow) will mainly be purchasing equipment and navigating their very own city.

Wednesday, 11 August 2021

Proof of Concept: Merging encounter tables

I made a thing: https://4w8wj.csb.app/!

It's a proof of concept of merging encounter tables. Like, the party is moving through a forest hex towards a mountain hex. The forest has its own encounter table, and the mountain another one. With this tool, we'd be able to load both and roll on either of them, or we could weigh it so that when we're closer to the mountain there's a larger chance that we'll roll on the mountain table but there's still a chance to roll a forest encounter? Does that make sense?

Anyway, it took about an hour to throw this together, but for a future app, I'd need some more planning. Ideally, I'd want users to be able to save their lists to their "account" (I don't like accounts, but something like OAuth would do?) and select those. A way to roll on the tables is a given. What else? A really cool thing to have could be parsing the results (so "1d6 goblins" becomes "3 goblins").

I'll be honest; this idea isn't mine. I stole it from Ten Foot Polemic, which is a terrific blog. I just made it into a PoC.

Let me know if you have any ideas I could steal implement, or at least consider, for a future app!

Sunday, 18 July 2021

Some shrooms

Someone made a mushroom generator. It's not terribly useful, but perhaps you're interested anyway: https://friggingfrogs.itch.io/colorful-fungi.

I almost made a generator out of it, but decided against it. That said, I did prepare a bunch of mushroom images that now have nowhere to go and since they're made from public domain photos and then reworked by me, I figure I can re-release.

The images are released under the Trans Copyright Act:

You may use the material free of charge in any commercial or non-commercial work, as long as this text is included for said material:

Trans women are women.

Trans men are men.

All queer lives are valid.

Black Lives Matter.


























Tuesday, 4 May 2021

Same location, fresh faces

Hole in the Oak, season 2

Alright, so I've started DMing for a bunch of newbies. I'm running them through Hole in the Oak, and I have some thoughts on that dungeon re: new players, but let's just quickly run through the cast (we're running with 5 torches deep, and I must say I am *not* a fan):

Tomas

Thief/Assassin-wannabe. Parents tragically murdered. Outsider. Look, we all know the drill. We've heard this character countless times before. The player has played him before, too -- in the group's last campaign, even. Okay.

Adrian

Halfling Zealot. Worships a duck god. "A bit silly." It's fine; I don't demand much from level 1 characters; it'll get fleshed out in time.

Selina

Mage. Lacks any kind of character, which is also fine.

Unnamed Warrior

I actually forgot their name, but it's another unremarkable character.

Aaaaand... action! (2 sessions)

(Oh yeah, and Oak spoilers from here on out, obvs)

The group starts at the Oak. Nobody brought torches. Mage and Zealot figure out that they can just use the "Illuminate" cantrip and sure, why not. If they continue with it, I'll start demanding concentration rolls with a failure meaning they can't use the cantrip again for an hour. I don't care that much, but the idea behind 5TD is basically "resource management" and if you sidestep that with a thing that exists on your character sheet I don't really see it as a win. But for now, whatever.

Group heads to the carpet hiding a teleportation circle. Adrian decides to check out the passage leading directly north. I ask if they just walk straight across to the other opening, which they do. Adrian is now elsewhere. Rest of the group faff about a little bit, then follow him through. Nobody knows where they are any longer so that's great (is it?).

Group checks out the room with stone seats arranged in a circle, and spends about half an hour of playtime there. Then they move west (toward bat cave). They try to force the door to the gnomes open, but the thief is weak af and the door isn't cooperating; the gnomes tell them to buzz off, they don't want any kind of shifty ppl mucking about.

The ask the moss faces for secrets, and learn that there's treasure at the beach. They then head to the faun's reception room, ring the bell, and a few of them drink the tea. Adrian falls asleep and Tomas pretends to sleep. The unnamed warrior asks what the hell is going on, but Ramius just laughs and says that they can either leave without their friends, alive, or they too can end up in a stew. The warrior refuses, but gets stabbed to 0 hp (from 3, so I mean... yeah) by Ramius's wives. Selina, having stayed passive, trades some of her blood for Adrian and carries the halfling away, leaving Tomas and Unnamed Warrior to the tender mercies of the fauns. Tomas tries to run away, but the fauns catches him fairly easy. Sucks to be Tomas.

Session over. I tell the players that they might want to roll up new characters, but Tomas's player refuses, he'd rather hope for the best. 

New session begins with Adrian and Selina making plans. The Unnamed Warrior player makes a new character, a dwarf warrior named Thorin. Adrian and Selina makes their way back to the moss faces, then head north toward the Hall of Kings (iirc it's named that? I'm writing this from memory, without a map). They find a dwarf warrior where the body/trap would be, and Adrian decides "oh hell naw, we aint going that direction" because someone or something attacked the dwarf with a sleeping dart. That ought to teach me to never assume anything. Anyway, the dwarf apparently drank too much the day before, made a bet with someone, and somehow ended up down here and no, he has no idea how to get out either.

The group heads back toward the glowing moss/moss faces area, then head west to the roots. They look at the roots, then decide "I guess the way is blocked" and head back towards the gnomes. They ask the grumpy gnomes for the way out, and the gnomes, figuring that they can catch two flies or whatever, tell them that if they get rid of the ogre for them, they'll gladly help them find their way out. The group decides that that sounds too dangerous, and decide to instead check out the other painted doors (area 35). They see the fire beetles, decide that that's not something they want to poke at either, and head through the bull door instead.

Adrian spots something lodged inside one of the holes in the passage leading to the lizard shrine/altar, but decides not to chance anything. Adrian is very much paranoid right now, and only wants out. They pass through the lizard shrine, find the beach and dig around a bit (17 silver! the group decides to split the treasure between them). They then make their way to the gnome fishing beach -- there are no gnomes there -- and eventually find the fish shop. They're offered to be led through the gnomes' homes, blindfolded, and pointed toward where the ogre lives (word among the gnomes has spread that there are adventurers that might deal with the ogre somewhere in the Oak, and so the gnomes in the fish shop are aware of the offer), but the group declines -- they don't trust no gnomes. At this point about 10 hours have passed since they left the faun's place, in total.

They head back towards the bull door, but run into the ogre on the way. He's in a bad mood, but some quick thinking has Adrian offering a gnome to him if he helps them find their way out. That sounds like a good deal to the ogre, and the group sets up an ambush in the "HAIL KEZEK etc etc" room (the oval room between the fish shop and the lizard altar, I can't remember the number).

Session over.

Afterword

The players are having fun, at least, but damn they're... new, to this. I don't think Oak is a good starter dungeon for new players. I think it's an amazing starter dungeon for people new to OSR, but I don't think that it's a newbie dungeon. I'll write more about this later. Next session is on Thursday, so that's not too far away.

I think I need to change how I run the dungeon. Like, it feels like they've been blocked by all my ideas, but at the same time I'm not the one that planted the idea that someone hit the dwarf with a sleeping dart. I even pressed the fact that it was a trap that did it. But what's happened is that the players have, voluntarily, removed an exit from their loop. They also didn't bother to check the roots, they just assumed they're impassable. That's definitely on me. Better descriptions.

I think that they're very used to getting the story and what they can do handed to them. I've been keeping quiet because I want them to appreciate that they can do whatever they can imagine, but perhaps that's not working? I'll talk a little with them before next session.

Another issue is that one of the players is super shy (or just bad at talking, that's an option too). Like, can barely talk. I don't know what to do about that. I don't want that to be why he's not finding RPGs fun. I'll ask him in a private message, I guess.

Tuesday, 16 February 2021

Owing to my sins my troubles have grown and my laments increased

Who is Zach Snyder and why should I care?

I guess he made some movies. Oh my god, he's making The Fountainhead, well I guess I know all that I need to know about that pasty white guy.

He's also "Developing 'Faithful' Retelling of King Arthur's Legend" (orz). I mean, okay? Which one? De Excidio et Conquestu Britanniae by Gildas? Ok, Arthur's not mentioned by name but the Battle of Mons Badonicus is? Historia Brittonum? Annales Cambriae? Preiddeu Annwfn?

Do you see the point? We have 4 different works across 400 years, lol. A few more in 10th century CE, Pa Gur yv y Porthaur ("Who is the gatekeeper?") and Englynion y Beddau ("Stanzas of the graves") (might I just say that Welsh is badass and ya'll should be proper proud of your language, I love it).

6 more in 11th century, and in 12th century CE it just explodes. There's Tournai's De miraculis sanctae Mariae Laudunensis, which is an early witness to the legend of Arthur's survival, and Life of Saint Kentigern which mentions Merlin (Lailoken), to mention a few. In French and Anglo-Norman you have Tristan by either BĂ©rouc or Thomas of Britain, de Troyes' poems, Robert de Boron's poems among other sources. Then you have Oberge's Tristan (lol, you don't need unique names) in German, Zatzikhoven's Lanzelet which is a rendering of a lost French tale of Lancelot, predating Troyes's Lancelot.

There is so much. You can't call your adaptation "faithful" because you cannot be faithful to so many sources. Fuck Snyder and his posturing.

Anyway. The reason why I wanted to bring this to your attention is this: there's a Hebrew translation of parts of the Vulgate Cycle (an influential literary cycle that consists of interconnected prose episodes in Old French, it focuses on the love affair between Lancelot and Guinevere); it's called Melech Artus ("King Artus") and you can buy it re-translated (and analyzed) to English (by Curt Leviant, who got to see the original manuscript and I am dying of envy). You can also read a less legal copy here.

If you speak Hebrew, you can read it here, too.

Monday, 8 February 2021

It's the dawn of a new year. A season of change.

The group

Is probably dead. Well, dead is a bad word to use when the world is struck by a global pandemic. There seems to be little interest in continuing the campaign, and so I'm leaving it on the back burner for now. I really hoped they'd want to keep playing; who /doesn't/ want to break through an eternal siege of undead monsters and bring ancient gods back to life?

The tools

I'm in the middle of changing jobs, so the tooling is taking a back seat right now, but these are in various stages of completion (that is, none of them are done):

  • The generator generator is dead. DigitalOcean killed their platform, and I want to take it in a different direction
  • Untitled Hex Project is paused
  • Generators 2: The List-ening is alive; I have a few amazing ideas for it, but I need to iron out the details.
  • Gardens of Ynn -- this generator is paused until I decide how I want to finalize it. The skeleton of it is finished, so to speak, but I feel I wanna dress it up some before I release it.
  • Chargen tool is dead, and I have no interest in touching up the issues in it either.
I'll see if I have time to write something about the development of the Generators 2 project. It's a pretty fun project, tbh, and I think people will enjoy it.

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).

Generators

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:
Dwarfish
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
Guns
4
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.

Tuesday, 9 June 2020

A wave of Evil Tree Babies (Hole in the Oak, pt. 4)

The morning is bright and cheery, as Robustus tells the rest of the group that he suspects his dog to be a werewolf. The group purchases some Wolfsbane and a silver dagger, and head up to Robustus's room. Robustus grabs the dog by the collar and holds the wolfsbane in its face. It reacts violently, and Robustus tries to stab it in the head. The cleric, August-Wilhelm has either not been following the discussion or thinks that it's a bit premature to just straight-up murder a dog without a fair trial, and tries to drag Robustus away. The dog bites Robustus and flees the room by jumping out through the window. Robustus tells the group to fuck off and leaves the party.

... okay? A brief pause as we wait for the player to create a new character. Then we're off to the Oak, again.

Spoilers etc.

Wednesday, 3 June 2020

Shades of my former self (Hole in the Oak, pt. 3)

We begin, as always, in Utböle. The party recruits Buffalo-Frans, fighter extraordinaire, brother to Robber-Allan. Brave Halvar recruits a war dog by the name of Goober, who's also a werewolf (unknown to Halvar). Buffalo-Frans hires a man-at-arms named Unwin. Rodwulf, the magic-user, brought his apprentice-turned-torchbearer, Namuun. With the party is still Lafirth, torchbearer.

During the downtime, they've noticed fewer and fewer children in the city. Briefly asking around, they find no clear answer as to why. As they make their way to the Oak, they also find countless dolls spiked to trees.

Pre-session prep

This time around, I didn't have much time to prep anything specific. I did, however, write an initiative generator, so I'm using that for any combat that might occur. Additionally, it can generate HD for any random monsters that pop up.

Spoilers for Hole in the Oak below this line.

Thursday, 28 May 2020

Class rework: Magic-User

How do you fix the Magic-User? It can't be fun to have one spell and then not feel relevant once that's used.

Option 1: Barbarians of Lemuria-ify the Game

Steal everything from Barbarians of Lemuria (the best magic system, imo). Here's such a take (only magnitude 1 spells, so far).

If the result can be achieved by training and hard work, it's possible to cast as a Wild Spell (working name).
  • Reach the top of a cliff
  • Chop down a tree with the snap of your fingers
  • Find the book where the information you're looking for is
The result is ordinary, but the method shouldn't be:
  • Vines reach down and lift you up
  • A whip of fire lashes out and chops the tree in two
  • All the books gather in an enormous whirlwind, until the one you're looking for lands on your shoulder, like a bird.
Any Wild Spell costs 3 HP to cast. You can lower the cost by adding restrictions:
  • Obvious (chant wildly, dance, etc, you're Doing Magic and everybody knows it)
  • Line of Sight
  • Casting Time (1d6 * 30 minutes of meditation, wild dancing (possibly naked), etc)
  • Personal item (lock of hair, clothes, etc from the person)
  • Special Knowledge (tedious, and long, research is necessary in order to cast the spell properly)
  • Hour Power (must be cast at a specific time of the day or year: morning, midnight, sundown, solstice, etc are all perfectly valid. "Right now" is not.)
  • Ritual cleansing (bathe in clear spring water, anoint yourself with essential oils, etc
A Wild Spell always costs 1 HP to cast, no matter how many restrictions are added. Remember: in my system, the party regains 1d3 HP every 10-minute break on the hour, if they have water and rations as group resources, so the cost is pretty low, still.

Furthermore, a Spell Slot spell, such as Sleep, can only be cast through the regular spell slots the MU gains as they level up; spells cast from Spell Slots cost no HP. 

Discussing this in the OSR discord, it was agreed that keeping both Vancian spell slots with the Barbarians hack was too fiddly (something I suspected when I wrote the post). We'll remove that.

I've always liked Lemuria's magic system, even if it's very much Storygame (with limits). I think this is a reasonable compromise.

BONUS: If I switch to the Barbarian hack in the current world, it would mean that spell scrolls (with stuff like Speak with Dead or similar) are remains of a past paradigm of magic, which means that MUs in Endon (Falbo) would be much more interested in spell scrolls because of how rare they are? It's a possibility.

Furthermore, spell scrolls could still be a regular reward that has no HP cost attached to it; that'd be a good reason to keep and carry them.

This requires Magic-Users to have a HP floor of 2. I'm fine with that. (Remember, death isn't a given at 0 HP in my game.)

Third (?) edit: ALSO this means that CON becomes an important attribute for wizards (you get to re-roll your Hit Die on level up, and keep the better result, so the CON bonus is important). Witches and wizards also eat a lot so they have the energy reserves to regain HP.

Vayra in the OSR discord also came up with this gem: "Also it makes sense why wizards and witches and other magic users are the ones people go to for medicine stuff. Since they have to know it all, they have to stay healthy to do magic."

I love it when rules inform the world. I wish I could come up with something similar for my Thief rework.

Option 2: Risky Casting

Each day, your Casting Value resets to 0. Casting an unprepared spell raises this value by the spell's level. When casting a spell outside those you've memorized, roll 1d20 and compare. If you roll over, the spell goes through. If you roll equal to, or under, a Chaos Burst happens instead.

If I use this system, I'm removing Sleep from the game. Casting Sleep an average of 10 times per session wouldn't be any fun for me as a GM; I also think that the goal of the game is to work with what limited resources you have, and by making the best resource (at lower levels) basically infinite, you make the game too easy.

Furthermore, with this system, we can add in FEAST OF BUKAKO spells too.

Option 3: Cantrips

Each spell you memorize unlocks Cantrips that you can cast however many times you want. Sleep would unlock Tired or Sleepy for instance; you could make someone yawn at just the right time to sneak past them. Charm Person cantrips could be making someone give you their full attention (good for when the nobles are ignoring you) or making you appear slightly more attractive to the person. Floating Disc cantrips could lighten the load of what you're carrying, but you'd still need to carry it yourself, and so on.

I've used a system like this earlier, but my mistake then was probably that the Cantrips were lost if you cast the spell. If we want to make MUs more active and have more options, maybe it should be the other way around: If you memorize a spell, it unlocks a list of Cantrips for that day. Even if you cast Sleep you still have access to the Yawn cantrip.

That sounds pretty good. I'm gonna go with that for now. If I started a new group or the current group's MU dies, I'll probably switch over to the Barbarian hack completely.

Let's Go: setting up KataGo's Human-like network

TL;DR: It's all about them command-line arguments. Here's a short guide: Install Sabaki Download the latest release of KataGo  and e...