Dwarf Fortress: speedrunning steel-clad soldiers

Preparation

Dwarf Fortress is very complicated, and I often lose track of various projects. In a recent fortress, making steel armor for my soldiers took such a long time. Surely there’s a better way to do it. I decided to speedrun outfiting a full squad of 10 dwarves in steel armor and weapons.

  • Each soldier needs:
    • weapon 1 bar
    • shield 1 bar
    • helm 1 bar
    • mail shirt 2 bars
    • breastplate 3 bars
    • gauntlets 1 bar for a pair
    • greaves 2 bars
    • high boots 1 bar for a pair
  • TOTAL: 12 steel bars

I prioritize the metal industry to the exclusion of almost everything else. Dwarves still need food, drink, shelter, and safety or they won’t be able to practice their craft. The world had minerals set to “sparse” instead of “everywhere” so I had to look around for an embark location with iron and a flux layer.

Execution

Once I found a suitable site, I embarked and dug down past the soil and light aquifer to find stone. After a few layers of mudstone, I found limestone! Limestone is a flux stone, which is required to produce steel, so digging my whole fortress out of the stuff was very convienient. As I carved out rooms, I found hematite veins, so there’s my iron ore handled. I dug some exploratory shafts to look for coal, but I never found any, so I had to burn logs into charcoal to power my forges.

A screenshot of Dwarf Fortress, showing a tiny fort on one level. On the left, some food production workshops. Along the top, tiny bedrooms, a meeting area, and food stockpiles. The center of the room is the metal industry. 3 Wood Burners, 3 Smelters, and 2 Metalsmith's Forges, all surrounded by stockpiles of ore, fuel, bars, and armor.  The population of 18 Dwarves has only 2 less happy than neutral. Stocks include 706 food and 219 drink.

The final fortress fits on one screen if I zoom out a little. I have three Wood Furnaces to turn logs into Charcoal.  I’d rather use Bitumenous Coal, which produces 8 pieces of fuel compared to 1 for the logs in the WoodFurnace, but I was spending so much time digging around to find it that I figured chopping down more trees was actually more efficient.

The charcoal feeds three Smelters that turn Hematite boulders into 4 Irons Bars, then turns Iron Bars into Pig Iron, and combines Iron and Pig Iron into steel. I need 120 Steel, so I work backwards to 60 Iron and 60 Pig Iron, so 120 Iron, so 30 Hematite Ore. I set a Work Order to smelt 30 Hematite, then stop. In a normal, ongoing fortress, I’d ask for more Hematite to be smelted whenever I ran short on Iron Bars, but this fort will never need more than 120 Iron Bars.

The Steel Bars are turned into armor and weapons at Metalsmith’s Forges. I have two. One of my migrants was a Legendary Weaponsmith, so he made those 10 spears very quickly. I didn’t have good Armorsmiths, but I assigned each Metalsmith’s Forge to one dwarf who gained a lot of experience and got faster as the project went on.

Craftsdwarves haul ingredients to their workshops, so keeping ingredients close to the workshops means the craftsdwarves spend less time walking and more time craftings. Thus the stockpiles of wood, ore, fuel, metal bars, and finished goods surround the workshops. When I dug out the chamber, limestone boulders were left all over, so I didn’t set up a flux stone stockpile. I later noticed that all those boulders had been used up and craftsdwarves were walking into the mines to get flux stone. I made a flux stone stockpile, so that haulers would spend the time moving rocks, and craftsdwarves would spend their time crafting.

I couldn’t put all my effort into making weapons and armor. My dwarves need to live. I set up a kitchen and still to produce food and drink. I gathered plants from the surface instead of making a farm. I’m not sure that’s more efficient. Any dwarves with spare time can gather plants, but they do have to walk around in the surface to find the plants. I built a small meeting area with tables chairs, and a chest with cups so that dwarves can eat in comfort. The dining hall is separated from the kitchen to avoid miasma from rotten ingredients.

I usually collect gems and cut them at a Jeweler’s Workshop so I can afford lots of items from the merchants in the fall. I put all my effort into the metal industry, so when the caravan arrived, the only things I had to trade were some propared meals and the copper weapons included in our initial equipment. That was still enough to buy all the food the caravan brought. Enough food to get through the winter when we can’t gather on the surface.

At the beginning, I put the Dwarves in a dormitory with 1 bed for every 2 Dwarves. After two migrant waves, I thought they deserved better quarters, so I dug the tiny bedrooms around the edges. I needed beds (must be made of wood) and doors (make them from rock to save wood for charcoal) to create bedrooms. As you can see from the information at the top of the screen, my Dwarves are happy and have plenty of provisions.Two UI elements from Dwarf Fortress. The calendar says "8th Granite. Early Spring. Year 101. The announcement panel says "Forge steel breastplate (10) has been completed."

I finished forging weapons and armor on the 8th of Granite, six days short of a year since I embarked. But the arbitrary ending condition I set was to have a squad of military dwarves wearing the steel equipment.

A cropped screenshot of Dwarf Fortress. The Squad Equipment screen shows that all 10 soldiers have the proper weapon, shield, legwear, headwear, and handwear, but that bodywear and footwear are unavailable. The date is 12th Granite, Early Spring, Year 101

Oh no, why can’t the soldiers find armor or boots? I set the uniform to “replace clothing” and included cloth shirts and socks. Wearing metal armor next to the skin isn’t comfortable. The soldiers will not use the shirts and socks from their civilian wardrobe, and I don’t have ten extra sets.A screenshot of Dwarf Fortress. On the left, 10 Dwarves wearing steel armor and holding steel spears. On the right, the Squad Equipment panel shows all green: the soldiers are wearing the proper weapon, shield, bodywear, legwear, headwear, handwear, and footwear. The date is 16th Granite, Early Spring, Year 101

I removed the cloth items from the uniform and set it to “wear over clothing” That makes the soldiers use their civilian clothes to pad their armor. I clicked “update equipment” and ordered the soldiers to gather in a side chamber. Alas, one soldier needed a nap, which delayed the official end of the challenge to the 16th of Granite, 1 year and 2 days after we embarked.

Conclusion

I’m happy with this attempt. One year is a nice benchmark. I didn’t track real time, but I did try to avoid pausing.

There’s a saying (attributed to many different people) that “a racing car should fall to pieces as it crosses the finish line” That means that anything that’s left after the goal is wasted. I could apply that to my fort to make steel production faster. I could put less effort into keeping my dwarves happy, and could make much less food and drink. Like I calculated the amount of ore I needed, I could calculate the total food needed for a year, instead of making more food all the time. An embark location with coal would probably cut out a lot of time. I could build more than 3 Smelters. The production of steel bars was slow enough that only 1 or my 2 smiths built breastplates. The smelters couldn’t make 3 bars of steel before the previous bresatplate was finished.

Feed Pelican Town – A Stardew Valley Challenge

Stardew Valley is an open-ended farming/fishing/mining/building/friendship game with so much to do and such loose win & loss conditions that I like to work towards a goal that I set for myself, like completing the Community Center in Year 1, maxing out my heart level with every villager, or cooking every dish.

The Feed Pelican Town challenge imagines that the farm actually provides the food that the villagers in Pelican Town eat. I’ll need to learn the villagers likes/dislikes and their schedules, and create a diverse farm to meet all those needs.

The rules:

  • Give every villager two gifts per week
  • The gift must be food
    • Is Maple Syrup food? NO, it’s inedible.
  • The gift must be edible
    • Is Pufferfish food? NO, it removes 100 energy when eaten. That’s poison
  • The gift must restore at least 1 health or 1 energy
  • The villager must Love the gift
    • I’m really broke at the start of Year 1 and only have access to a few items
  • The gift must be Loved if possible, otherwise it must be Liked
    • Dwarf only loves Magic Rock Candy, an incredibly expensive item
      • Look, just let me get through Spring. I’ll deal with that later.
  • You don’t need to feed villagers that you can’t access, like Sandy in the Oasis, Kent who is off at war, or Krobus hidden in the sewers.

Attempt 1

Cookie of Feed Y'All Farm, 4 Spring, Year 1

The year starts on Monday. By Saturday (after the first batch of crops come in) I’ll give everyone their first gift, so I can give them their second gift on Sunday, the last day of the week.

What’s that? The “two gifts per week” week runs Sunday to Saturday? So it’s already too late to give two gifts in the first week if I didn’t give the first gift by Friday Day 5 at the latest?

FAILURE

Attempt 2

Cookie of Feeder2 Farm, day 4 of Spring, Year 1

I won’t make the same mistake twice! Six days to give two gifts to everyone, so I must give the first gift to everyone no later than Day 5.

But the Community Center doesn’t open until Day 5. So I can’t get the letter from the Wizard and gain access to his tower until Day 6. It’s impossible to give the Wizard 2 gifts in the first week!

FAILURE

This is really hard!

New rules

  • The Wizard only needs one gift in the first week.
  • Gifts given in Spring, Year 1 must be Liked at least. No requirement for Loved gifts, even if they are available.

Attempt 3

Foodie of Diner Farm, Day 5 of Year 1

One more time. I have my spreadsheet of gifts. I’m maximizing my income so I can spend so much on gifts and still invest in my farm. I got a lucky drop of Sashimi in the Saloon, which is cheaper than Salad, so I save some money buying gifts for people who don’t like anything I grow at the start.

Day 1: plant lots of Parsnips. Parsnips grow in 4 days, the fastest of any crop, and are liked by all but 5 villagers. They are my main source of gifts.

Day 5 is rainy. The Community Center doesn’t open on rainy days, so meeting the Wizard is delayed by a day. That means I don’t meet him at all in the first gift week, so that’s fine, right? He doesn’t need food if he’s not available. That’s like the rule for Krobus and Sandy. The Parsnips come in, so I harvest them, sell a few for money, and pass out the rest as gifts. Half today, half tomorrow (Saturday) and then the week rolls over.

On rainy days, Elliott does not leave his house. I can’t enter his house because we’re not good enough friends. I can’t give him a gift on Day 5. I couldn’t give him a gift on Days 1, 2, 3, or 4 because I can’t grow Parsnips that fast. I can give him one gift on Day 6, but that’s only one for the week.

FAILURE

Consulting the wiki carefully, I realize that I could have foreseen and avoided this. The weather report on TV predicts the next day’s weather. If I check the weather on Day 4 and see that Day 5 will be rainy, I can go to the Saloon, buy a gift for Elliot and deliver it on that day. Then he’s inaccessible on Day 5 when the Parsnips come in, and I give him a Parsnip on Day 6. But what if it rains both on Day 5 and Day 6? Unlikely but possible!

Future plans

i still like this idea. I imagine by year 2 I’ll have a kitchen in my house, cooking up people’s favorite dishes. I’ll stockpile some ingredients in season and grow others year-round in my greenhouse. I’ll have fish farms and a shed full of artisan goods. But this challenge is so hard at the beginning that I can’t get out of the first week!

Next time, I won’t give any gifts in the first gift week (Days 1-6 of Spring, year 1) Every resource is precious at the beginning of the game, so relieving the huge stress of providing 55 gifts in the first 6 days will let my farm grow a lot more, and I’ll be able to start the second week giving gifts immediately, so missing one day won’t immediately cause failure.

I could also give myself a little leeway on the rules to allow for occasional slip-ups. “No hit” challenge runs are like that. The runners start out by seeing how few hits they can take, eventually do a no-hit run, then get consistent at zero hits.  A runner who restarts the run every time they take a hit will probably never finish. Alas, that’s not my style! All or nothing!

Stardew Valley does a lot with a little, and a lot with a lot

One of the reasons that Stardew Valley is so endlessly replayable is that each element has many different uses, so I don’t get bored using the same thing over and over. This multi-use philosophy applies to the maps, the tools, the villagers, and many other elements, but I want to focus on Forage.

 screenshot of Stardew Valley. A woman finds a Wild Horseradish frowing in the wild.

Forage are plants that grow wild and can be found and collected just by walking around. Crops require costly seeds, and must be watered each day, expending the farmer’s limited energy. Forage requires neither money nor Energy.

But once I collect some forage, what do I do with it? Many things, and they are all important!

 screenshot of Stardew Valley. A Leek can be sold for 60 gold.

Forage can be sold for Gold. Forage requires no upfront investment of Gold, unlike Crops, so this is basically free money! Early on the farmer has little money and needs many expensive upgrades, like more inventory space, or farm buildings like a barn or upgraded house with a kitchen.

 screenshot of Stardew Valley. A Leek provides 40 Energy and 17 Health when eaten.

Most Forage can be eaten to restore Health and Energy. (Some forage is poisonous, so read the tooltip carefully before chowing down!) Forage requires no energy to collect, unlike Fish or Crops, so again, it’s basically free Energy! Before the Farmer gets rolling with upgrades, it’s easy to run out of energy and be unable to complete the day’s chores and errands. Eating is doubly beneficial in the Mines, because it restores Energy spent mining as well as Health lost fighting monsters.

 screenshot of Stardew Valley. A woman offers Shane a Leek as a gift.

Forage, like almost every item, can be given to villagers as a gift. Gifts improve the ViIlager’s relationship with the farmer, which can have mechanical benefits as well as the intrinsic benefit of being kind and making friends. Different villagers have different opinions of different Forage, so I watch their reactions closely (or read the wiki) to match the villager with the ideal gift.

A screenshot of Stardew Valley. The recipe for Wild Seeds (Spring) requires one of each type of Spring forage.

Forage can be turned into more Forage! I can turn a set of four Forage into a packet of ten seeds. The seeds take a week to grow and require watering, but if I can spare the time and energy, I get 250% of what you put it! The resulting Forage can be turned into more seeds, so each week my garden can expand dramatically.

So even with this free resource that I collect just by walking around, there are many factors to consider. In-game days, daily energy limits, Villager preferences, cash flow, my short-term and long-terms goals all collide in the simple question of “What should I do with this thing I found on the ground?”

But Stardew Valley isn’t content to have a few densely-useful items. It has hundreds of densely-useful items! Similar decisions can be made about the 30+ villagers, dozens of fish, scores of crops, 90+ artifacts, ores, gems, recipes, the list seems endless. Combining such breadth and depth in the same game is truly impressive!

State of the Virtual World

2020 disrupted our lives and ruined everyone’s plans, some permanently. How did Chasing the Sunset fare in this terrible year?

January 2020

At the beginning of the year, Chasing The Sunset had 13 total players, but only 8 were playing regularly.  I always ran games in person, so the three players in another time zone had no opportunity to continue their adventures. Other had fallen away because of IRL concerns, like a long commute or a newborn baby, but the campaign accounted for that. No one player was necessary. People can leave if they like.

I was also running Fairmeadow Fair, a Dungeon World campaign, for another pair of players. I started that game back in February 2018, so it was pushing two years already! These players were geographically and socially distant from the Chasing The Sunset players.

Diagetically, what was happening? Most players were still near Port Fennrick, where they arrived from the old country to make a new start.  Players saw the consequences of actions taken by players in sessions they did not attend.  A group were attacked by mobsters in the night and planned to take revenge, but before they could, a different group stumbled on those same gangsters and sent them packing. Players could look backwards and see that they had effects on the world, but looking forward was more difficult. They were newcomers in this strange land and had little motivation beyond seeing what’s over the next hill. They didn’t understand the bigger picture of the new continent and didn’t have any long-term goals.

Calm before the storm

From January to March 2020, I ran 3 sessions of Chasing The Sunset and 3 sessions of Fairmeadow Fair. I introduced the first hint of world-spanning conspiracy, based on backstory hints from several players. Platypolooza was scheduled for a full moon, and that’s when the first werewolves appeared! I don’t think my players realized that werewolves were a problem they could track down and solve, instead of just one more fantastical element native to this new land. Not even the fate of the bitten victims was enough of an incentive to investigate the werewolf problem. The party just skipped town.  So as a long-term plot thread, it was ineffective.

I was having so much fun with Chasing The Sunset and the idea of multiple parties sharing the same world, that I asked the Fairmeadow Fair group to join Chasing The Sunset. They agreed, and at the end of February I brought over blank Fellowship character sheets for them to choose from. Lucia translated pretty easily from a Dungeon World Paladin to a Fellowship Heir. Both are noble knights.  There’s no Fellowship equivalent for the Dungeon World Druid’s shapeshifting powers, and Gleador’s player loved shapeshifting shenanigans, so I worried that they would be reluctant to leave Gleador behind. They jumped right into the Fellowship Collector, and we planned to send Gleador off and bring in Dryden the next time we met. That was the last time I saw them in person.

Lockdown

In March 2020, this coronavirus turned out to be a big deal, then turned into the biggest deal: the defining event of the year. I hoped for a while that things would go back to normal soon, but here we are in December and the pandemic is worse than it has ever been. Once I realized that I had to deal with it instead of waiting for it to go away, I made preparation to run Chasing The Sunset online.  I made a Discord server for voice-chat, and made a Roll20 account for dice-rolling and maps.

Worlds collide

Chasing The Sunset was on hold for almost three months. That’s not the first interruption my campaigns have endured.  I started Chasing The Sunset right before disappearing to work on Atlanta Fashion Police for several months.  Fairmeadow Fair has suffered that same interruption twice.  In addition to adapting to the new technology, I had to connect the world of Fairmeadow Fair to Chasing The Sunset.

Fairmeadow Fair is a vaguely Tolkien or D&D fantasy world with Dwarves, Elves, Halflings, and Humans.  The origin of a “living statue” (no one knows the word “robot”) is worthy of a long quest, and the existence of a single shape-shifter throws a large city into turmoil. The party looks for non-violent solutions and has never taken a life.

Chasing The Sunset contains only (mostly) the races claimed by players, so there are no Dwarves, Elves, or Humans! There is an entire race of gooey shapeshifters, a town full of clockwork robots, a ghost, and a member of an extinct race. Players in this campaign are willing to kill people who threaten or annoy them, and don’t mind skipping town to avoid cleaning up messes they make.

Connecting the worlds geographically was easy. Fairmeadow Fair was mostly a pointcrawl: roads or paths between towns or interesting sites. I converted those points into Fellowship’s Locations and connected that set of Locations to the southern edge of the Chasing The Sunset map.

So in the final session of Fairmeadow Fair, I had to transition from one ruleset to another, prepare my players for the more gonzo tone of the world they were joining, and also say farewell to a player character! As a GM, I’ve had players drop out and their characters just disappeared in between sessions. As a player, I’ve had a character leave the party for unresolvable philosophical differences, and it was a traumatic experience, inside and outside the game. A planned, amicable separation was a new experience, and my players did great! One player played both Dryden and Gleador, rolling dice for different rulesets in the same fictional scene. Lucia’s player just swapped Lucia’s Dungeon World playbook for Lucia’s Fellowship playbook.

Attrition

I lost most of my players in the transition to playing online. After struggling to get people to respond to scheduling requests on Discord, I contacted each player and asked if they wanted to continue playing. Playing remotely is new and weird, and the multiple concurrent disasters sweeping the nation in June were enough to consume anyone’s attention.  One person formally resigned from the campaign, citing a lack of long-term goals to hold their interest. We did a little free-form roleplay epilogue over Discord to turn their player character into the boss of the location it was in. Another said they valued the in-person social aspects of role-playing, and playing online was not for them.  Several players said they were still in, but after they didn’t respond to several attempts to schedule games, I stopped asking.

Long-term goals

Right after losing a player for lack of long-term goals, I really started putting in hooks for big, old, important plots.  A mad scientist wants to blow up the Moon. The Moon is only 100 years old.  A character teleported to the Moon! (I checked the exact wording of the skill, and it does say “regardless of how far away it is”) Turns out the Moon is artificial and staffed by Kobolds for an unknown purpose.  Also Vampires exist and hate dragons!  Dragons should be extinct, but one has taken over a city & is challenging all comers in single combat!  The Vampires probably have a complete manual for the operation of the Moon, which seems super-dangerous. Too bad the player responsible for that stopped showing up. No one else knows what that character saw on the Moon, but they have seen giant mirrors fall from the sky, and know those mirrors can be turned into weapons by reflecting sunlight. Earth-shaking implications, but no one has all the information.

Legends of the Past

Last year I ran three one-shots set in Chasing The Sunset’s past. People who couldn’t join the campaign proper could have a fun afternoon and contribute to the ongoing story.  Win, lose, die, or flee, their actions would have lasting consequences. I just have to show those consequences to the players.

  • Two heroes fought an army attacking a library hidden inside a volcano, while magicians inside prepared a barrier spell. Almost everyone has searched for this library, but most people were distracted by the city hidden under the next volcano over. Lucia found it, and her people had a hidden library in their backstory, so of course this was that library! The ghostly librarian’s information was out of date because she’d been locked away from a long time, but that untimeliness was eye-opening by itself.
  • Platypeople were slowly abandoning a town threatened by a strange underwater building and its guardians. A couple of adventurers kicked those guardians out, and saved the town. That fight was supposed to be the first act of a mystery, but we ran out of time, and I have to respect the players’ victory, so the town is thriving now. Some players found a Platyperson from that town and almost escorted her home, but they were held up with other business and she was impatient, so they didn’t follow her to her unusual home.
  • A Vampire & a Dragon fought in an ancient forest, aided and confronted by various characters. Players later entered that forest and met the victor, but I missed my chance for them to see the grisly trophies taken from the loser.

Burnout

I like spending time with friends and I love playing TTRPGs. Normal social activities were destroyed by the pandemic, so I leaned into online TTRPGs for social time.  In August & September I scheduled games as often as I could, including playing in a D&D 5th Edition game, and running a couple of Blades In The Dark sessions. I discovered that playing online is not the same as playing in person. Even though I enjoy running games, it’s a lot of work. I am performing the whole time. As a player I can wait my turn and let other people take the spotlight, but when I run games i have to react to everything, move pieces that the players can’t even see, account for things that happened to other players they don’t know, and take notes at the same time. I discovered that in-person games had other activities that recharged me, making the overall experience less tiring.  People feed me supper, or at least we all bring and share snacks.  Before and after the game we have some unstructured social time to just be around each other, whereas online we disconnect when we aren’t playing. I only noticed these benefits by their absence, and by the end of September I was burned out! I intentionally cut back to monthly sessions with each party.

Conclusion

The summary page for Chasing The Sunset promises a large rotating cast and player-driven scheduling, but neither of those are true anymore. I have two parties, each a married couple IRL, and each meets once a month. Circumstances were very different when I wrote that page, and my players and I have adapted. Going forward, I think I have some more bandwidth for running games, so I’d like to add one or two more parties to Chasing The Sunset. I won’t push mixing parties, but I do want more information sharing, just so someone can eventually figure out the Moon’s deal. I have a mechanic for leaving notes in a location for other adventurers, but I don’t remind players about it, so they don’t leave notes. I love the shared world and the consequences of one party’s actions affecting another party. I want more of that.

Inspired to make something that makes inspiration

During Roguelike Celebration 2020, I heard a talk by Clarissa Littler about a generator they created to help them write poetry.

Skip to 45:16 to see Clarissa’s 10-minute talk.

I make generators that generate complete, ready-to-use artifacts, but Clarissa’s generator only creates rules and constraints for a poem that Clarissa has to write. A completely different paradigm!

The pandemic destroyed my normal artistic outlet of traveling the country and photographing people at large events. I’ve barely taken any photos in 2020. How can I continue this practice which I love so much with none of my usual events? Many photographers have a discipline of taking a photo every day on sites like Tookapic and 365 project.  But getting ideas for interesting photos every day without fail is a constant challenge.

Let’s bring it all together

  1. a generator of ideas, not artifacts
  2. a reason to take photos every day
  3. ideas for photos when I don’t have any

The solution is a system that tells me what sort of photograph to create each day!

I use Kate Compton‘s Tracery for lots of generators because it’s easy to write lists of options and let Tracery pick from them. So I can write down all possible subjects, all possible lighting conditions, all possible compositions, and be done. That generator would be completely generic, and I have a style developed over many years. I want photographs that I like, not all possible photographs.

a screenshot of a file manager, show 200GB of images in a folder named "Photos by others"

I’ve been downloading photos that fit my style for years! I looked through by photographer, and wrote down what I liked about each one. After I had a big list, I split it into categories: mood, people, light, composition, environment, and other. I love people and photographs of people, so I had a lot of “people” features that were unsafe to recreate during a pandemic, so I created a list of other subjects that I could more easily acquire. The Tracery grammar picks one to three lists, and picks one option from each. Sometimes an option is negated, just to mix things up.

CheapBotsDoneQuick is a service that hosts Twitter bots that generate their Tweets with Tracery grammars. This is a good fit for getting persistent daily suggestions. I could even reply to the bot with the photos I take based on its suggestion.  I had to create and verify a new Twitter account. Twitter’s account creation pipeline doesn’t let me pick my @. I have to edit my profile and change it from some auto-generated nonsense in a separate step. I don’t like that!

The final step was to go through each feature and assign an emoji! It’s so cute when bots use emoji, and I want using this bot to be a pleasant experience. These tweets aren’t assignments. They are opportunities for me to go out and create art! The emoji also function as bullets for a bulleted list of features.

The resulting inspiration generator, @photo_inspo, is online, tweeting a set of constraints every 6 hours.

Fairmeadow Fair, session 8

← Session 7 | Campaign Summary | Session 9 →

The Fairmeadow Fair ended last session, with Gleador the secret shapeshifter dodging all the consequences of his weekend of deception.  He and Lucia the Paladin had to decide where to go next.  There were several events that warranted further investigation.

  • A statue with Dwarven markings came to life and smashed up the fair.  Who built it? What is it for?
  • The statue was carrying strange gold coins, unlike the local currency.  Where do they come from?
  • A Dwarf named Opal and two accomplices attacked our heroes, were driven off, and fled town in an unusual self-propelled cart.

Gleador and Lucia had one of the strange coins, so Pepe, the town sheriff, tracked them down to get it back before they left town.  They convinced him that they would continue investigating the statue, so they should hold on to the coin.  Pepe revealed that the statue was brought to auction by Hama, a halfling woman who often acts as an agent for rich clients who want to auction items without personally making the trip.  Hama said that she was selling the statue on behalf of the Miller family, one of the great families in Sugar’s Crossing, a town a few days to the west.  She had no idea that the statue could move.

A regional map showing the towns of Fairmeadow, Sugar’s Crossing, and Templeton.

Our heroes decide to head for Templeton, a Dwarven city to the west with a famous college.  This means not going to Sugar’s Crossing to question the owner of the statue, and not pursuing Opal’s gang south towards the port.  Alas, those were the two towns contained the bulk of my preparation.  To re-assure Pepe that they were not just running off with his evidence, they told him where they were going.  Pepe knows a guy in Templeton. Flint is now a second year metallurgy student, but he took a gap year of sorts in Fairmeadow and volunteered as a deputy.  Law enforcement was too intense for him.  He’s happier in a classroom.  Gleador and Lucia promise to look him up, and leave word with Flint if their travels take them further from Templeton.

Gleador and Lucia set out on the three-day journey to Templeton.  There’s a lot of traffic leaving Fairmeadow today, but they got an early start, since they don’t have to pack up booths or wrangle families.  When they are out of sight of other travelers, Gleador shifts into a falcon and scouts ahead.  There’s not much to report.  Near evening, he sees a clearing on one side of the road.  There’s room for at least a dozen carts around a big stone fire pit. There’s a stack of charred logs in the pit, and a magical, ever-burning flame in off to the side.  An inscription in many languages reads, “As we all share the everlasting warmth of fellowship, so will this fire always keep travelers warm.”  It’s a lovely rest stop, with no traps or shady people around.

A rest stop on the road from Fairmeadow to Templeton, protected by a magical campfire.

Gleador reports this to Lucia, and they stop there for the night.  As evening falls, several parties on horse-drawn carts, or on foot with handcarts also arrive and set up camp.  One group produces logs from their cart, adds them to the pile of firewood, and makes a trail of kindling from the magical flame to the central firepit.  A jolly blaze lights and warms the whole campsite.  Some starts playing a pipe, and a few people clap and dance along.  Gleador looks for the most interesting person to talk to.  That’s Selene, a clean-shaven Dwarf woman.  She goes to shake her hand, and she extends a metal prosthesis.  With certain movements of her shoulder and upper arm, she adjusts counterweights and rods in the mechanical arm to open its fingers and shake Gleador’s hand.  Gleador is very impressed!  She’s a graduate student at the College of Mines in Templeton.  Gleador inquires about the moving statue.  She’s unaware of technology that advanced. The mechanical devices she knows are moved by counterweights (like her arm) or pressurized gas.  Gleador mentions the name “OOLITE” that was written on the statue, and she thinks the school library would have information about it.  She doesn’t know Flint, but it’s a big school, so that’s not strange.  Lucia doesn’t participate in the evening activities.  She’s communing with her god and gaining a level.

In the morning, Lucia tries to cast Detect Alignment, but instead of a shockwave of holy energy, she produces a physical shockwave, making a loud bang and flapping all the tents and shelters.  Lucia and Gleador hastily grab their packs and flee the rest stop in embarrassment.  The next two days are uneventful. The terrain becomes hillier and rockier, so the fields of grain and vegetables give way to land for livestock.  They find an old barn, abandoned when a newer one was built at the other end of a field, and stay there for the night.  Nothing comes ot disturb them but some rabbits and birds, also seeking shelter for the night.

A map of the city of Templeton, built into a cinder cone volcano.

On the evening of the third day they reach Templeton, the city built into a cinder cone volcano. It rises out of the plain alone, visible for miles!  Streets spiral up the cone in both directions, since radial streets would be too steep.  The side of town closest to the main road is trade and tourism.  The Fortinbras College of Mines has an entire sector of the volcano on the northwest.  The rim of the caldera is covered with high towers, and inside the caldera are museums and civic buildings surrounding city hall at the very center.  Most of the buildings are built for Dwarves, but there are some taller buildings, especially in the tourist section.

Gleador and Lucia check into a tall youth hostel near the college.  Their room has five bunk beds and a washroom with a toilet and shower.  There’s running water in Templeton.  Lucia is obviously a Paladin, and the other youths in the room tease her for looking like a strict authority figure.  She heads to take a shower and surprises a Dwarf woman coming out of the washroom in a towel.

The next morning they wake up before the other 7 people in the room.  Not a hard task to wake up before college students.  There’s cheap but decent food served cafeteria style at the hostel.  They head to the campus to look for Flint and the library.  The library is not open to the public, only people associated with the school.  They ask around and learn that Flint is currently in a lab.  The college extends onto the flat ground surrounding the valcano and Flint’s lab is in a building on this flat ground.  The building rises only a couple feet, has skylights and vents for a roof, and storm doors for entrances.  As our heroes open one of the doors, they hear a voice assure another voice that the delivery of the alloy will be on schedule.  There’s a sudden pause, then the voices start talking about experimental procedures and titration.  Di that seem shady?  Did the people at the door notice?  Hopefully not. Gleador and Lucia act like they don’t notice and ask for Flint.  He’s the voice promising delivery on schedule.  They pass on Pepe’s greetings and ask to meet him after his lab.  He’s happy to hear from Pepe and agrees to meet them.  Lucia says a quick prayer for guidance and sees that the two dwarfs standing near Flint are evil, but Flint himself is not.

There’s a long, low arc of stone that acts as a sundial, receiving a beam of light from a tower at the rim of the volcano.  There are signs warning not to put any item, especially face or eyes, in the beam of light.  Near the sundial are some benches and tables with games.  The game is somewhat like Stratego, where two players try to defeat each other without knowing the strength of the other’s pieces.  The pieces are identical painted metal cubes, each of a different material and density.  Denser pieces beat lighter pieces.  Quickly judging the density of an item by holding it is a valuable skill for a miner or crafter.  At the appointed time (easily seen from the nearby sundial) the two evil dwarves sit a few benches away and start playing.  Flint arrives soon after.  Gleador plays to lose (easy when he’s never played and Flint is an expert) and engages in small talk, trying to sneakily get Flint to reveal information.  The evil dwarves keep playing games.  They’re sticking around to overhear.  Flint agrees to give our heroes a tour of the campus tomorrow.  Maybe he can sneak them into the library.  He leaves and the evil dwarves are still playing.  Lucia and Gleador leave and ponder their next move.

GM note: I had to scramble because I assumed that the party would go to a different town.  On the one hand, I really like the things I improvised: Selene’s mechanical arm,  the rest stop, the city built into a volcano, the sundial. On the other hand, when wrapping up one location and moving to another, I should make the party decide where to go at the end of a session, not the beginning, so I can focus my efforts entirely on what they will see. The drama between the three great mills in Sugar’s Crossing was wasted effort, and I kept describing the Dwarven college like a 20th century American university, because that’s what I could think of on the spot.

Also, this is the second time they haven’t gone in the direction of that one NPC  that I’m really proud of.

← Session 7 | Campaign Summary | Session 9 →

PROCJAM / 7DFPS 2018: Day 6

PROCJAM, 7DFPS

Day 1, Day 2, Day 3, Day 4, Day 5

I’m approaching the end, so I need to wrap things up.  Here are some relatively quick fixes.

Pressing Escape will exit the game, but there’s also a diagetic exit at the end of the 6:00 road.

Also visible in that image is the trash fence. Burning Man is surrrounded by a pentagonal fence meant to catch anything form the city that blows away in the desert wind.  I added a circular fence to keep players from wandering off the edge of the world. The real fence has a square lattice pattern, but I made the width of the fence segments adjustable and I didn’t want to deal with the texture stretching, so my fence has only horizontal bands.

One of the last things I added to my Burning Man simulation was the Man himself.  He’s another low-poly mesh built in Milkshape, although the base is generated with the same Lathe that creates the Temple.

Camp structures will now fill long blocks.  I just re-run the structure placement algorithm with several starting locations along the long axis of the camp.

There are some weird things visible in the above image that aren’t normal camp structures.  Those are landmarks! Yes, I’ve finally added some landmarks to a game ostensibly about photographing landmarks.  There’s a two level-generator that lays out several paths, then puts objects along those paths. It can create.

Balloons (1 thin, irregular path with a large sphere at the end)

Towers ( a line of vertical lines)

Abstract art (irregular paths of irregular shapes)

An unfortunate side effect of these wonderful new landmarks: the AI Photographer doesn’t know how to look at them.  The Burning Man sim has overtaken the photography sim so much that the original goal of the project no longer works.  Whoops!  There’s still a bit of time to re-write the photographer, though.

PROCJAM / 7DFPS 2018, Day 5

PROCJAM, 7DFPS

Day 1, Day 2, Day 3, Day 4

Unity uses two programming languages:  C# and JavaScript.  I use C# because I like strongly-typed languages.  I want to see as many mistakes at compile-time as possible. But Tracery (which I used to generate Burning Man Camp names) is written in JavaScript. Can I just copy the files in to my project’s directory structure? No! Unity finds several errors in files that work just fine in a web browser.  Searching online reveals two people that ported Tracery to C# specifically for use in Unity.  Both authors caution that these ports are completely unsupported, but that’s good enough for me.  I assign a name to each city block, but displaying that name to the user requires learning how to use Unity’s UI features.  I don’t want to deal with that hassle, so I switch tasks!

The Temple was a giant blank cylinder, and the Man was standing on a similarly boring box. I create a Lathe algorithm to replace both.  The Lathe draws some line segments from bottom to top, then rotates that outline around the Y-axis, kinda like a vase.  This is quite-low-level compared to most of what I’ve built.  I’m not using built-in primitives or importing meshes I built in a 3D editor.  I’m creating the object one piece at a time while the game is running. Not only do I have to write nested loops to place each vertex, I have to remember what order I created them, because the triangles are one giant list of references to the one giant list of vertices.  Speed is important at this level, so I don’t get the luxury of a big tree structure of objects. After writing some triangles backwards, and forgetting a few numbers, I get a shape!

What is this? The light acts like it’s completely flat!  I had missed two things.

  1. Unity stores only one normal per vertex, so if two triangles share a vertex, Unity will smooth the join between those triangles.  I want the angular, low-poly look, so I don’t want any triangles to share vertexes.  A quick sketch shows that each vertex borders six triangles, so I have to edit my vertex generation loop so it creates six times as many verticex!  Now the triangle creation loop needs to use each of those vertices exactly once.  Yikes!
  2. The second step is to call the RecalculateNormals() function.  Much easier!

So much better!  You’ll notice that this temple is spikier than a vase.  That’s “star mode.”  I bring a piece of code over from my bodypaint generator that reduces  the radius of every other vertical row of vertices.

After finishing this project, I am ready to tackle some UI work. People won’t enjoy even the coolest game if they don’t know how to play, so I need to explain myself.  I add a title screen with a list of controls and a bit of story.  This is a game about copying photo.s. The original code name was “Art Fraud” But now i’m having second thoughts.  Taking photos in a magical, beautiful place seems so joyful and positive. Do I really want to flavor it as theft and subterfuge? As a compromise, I let the user select Light or Dark stories. There’s no mechanical difference, but the little paragraph re-contextualizes why one has these photos, and why one wants to re-create them.

PROCJAM / 7DFPS 2018: Day 4

PROCJAM, 7DFPS

Day 1, Day 2, Day 3

Building Burning Man is really fun, so I neglected the photography part of the game to generate even more types of things.  I happen to have an extensive list of galleries of photos from Burning Man, so I perused a few of them to see what types of tents and vehicles people used in their camps.  It turns out that’s the least interesting part of Burning Man.  Most people photograph the huge installations, the mutant vehicles, or their friends, not the tent they sleep in 3 hours a day.

I made a few tents, a small cargo truck, a “fifth wheel” trailer, and a school bus to put in camps, as well as a street sign for intersections.  I had to look up dimensions, because I want these objects be the proper size in the world.  I still create 3D models in Milkshape, a program I got almost 20 years ago to do Half-Life 1 mods.  This encourages a low-poly, flat-shaded styles, since I don’t have the skills or the tools to make fancier objects.

Now that I have these objects, how do I place them into the city blocks I have defined?  I have an algorithm for packing rectangles into a 2D space from last year’s PROCJAM entry: Spaceship Wrecker!

The constraints are different.  Instead of packing a per-determined list of parts into an unbounded space, I want to fill a bounded space with whatever will fit. I also had to pad the dimensions of these vehicles and structures, since people need space to walk between them.  I pick an object at random, and if I have to push it out of bounds to avoid colliding with objects that have already been placed, I discard that object and count a failure.  After a certain number of failures, I figure the camp is full and move on.  Since the algorithm pushes objects in all directions equally, it works well for squarish camps, but not for the very long camps at the far rim of the city.

This algorithm still needs improvement.  I could try something more like Tetris, where I try to fill things up from one end to the other, or I could just use the current algorithm at multiple points along the long campsite.  With relatively cheap, simple algorithms, and especially with the time constraints of a game jam, finding the most efficient solution may not be worth the trouble.

To make camps look unified, structures in a camp will have similar colors.  How similar? That varies by camp. The camp in the foreground above has blue, green, cyan, even purple, but the ones behind it are all green or all magenta.

So I planned to generate photos, and what am I generating?

  • Width, number, & spacing of radial & concentric roads
  • location & size of landmarks
  • Structure type, structure position, structure color, and range of structure color.in camps
  • Also photos, I guess

Death and consequences

There’s controversy in the TTRPG world about character death.  Some don’t like it. Some say it’s part of the game. Some say, and this is the part I disagree with, that without character death, a game has no real stakes. So let’s talk about some of my characters, and how they won and lost important things that were not their own lives

Heathcliff

Heathcliff was a level 5 Halfling Ranger who charged lance-first into battle atop a mastiff.  In the climactic showdown with an undead Sorcerer in flooded catacombs, he was paralyzed and executed.  (Don’t worry, the dog was OK.) The rest of the party sold his gear to pay for his resurrection.  A level 5 character is a super-hero compared to commoners with no class levels.  Like, Daredevil or the Punisher, not Green Lantern, but still a super-hero.  I figured that he would excel as a town guard or a hunter even without his magical gear.  Death was a major setback, yes, but he could wait a while, save up some cash for new gear, and go adventuring again later.  It’s like when one’s first career doesn’t work out, and one has to move back to one’s parents for a while.

Cklypherrderrime

Cklypherrderrime (call him Cklyph) was a Gnome (later Suli) Wizard who started off as cheerful, mischievous, and curious. The party had no Cleric, so they often had to return to the capital city to remove harmful effects like blindness, negative levels, or death. Since Cklyph had not picked a god to follow, he would visit a different temple each time, and listen to the priests explain the virtues and benefits of following their god.

The campaign was long, and the party was always behind, always chasing another death cult, never able figure out the grand scheme that united all these villains.  No one could help them, because they were superheroes. Yet after the party defeated each scheme, they had to sit and wait for something else to catch fire.  No research or prevention was effective.

Cklyph lost his Good alignment in the pursuit of power to keep his party alive, because they were all that he cared about.  The rest of the world was either hostile or useless.  He used to eschew necromancy, and declared Cloudkill a spell for terrorists, but by the end, everything was on the table.  After defeating a powerful dragon, he raised it as a skeletal servant.  “I’m going to make this guy die for us twice.”

I mentioned that Cklyph was a Gnome and a Suli. Cklyph did die once, but he had prepared.  A younger, more fun-loving Cklyph had prepared a kit in case of his death and given it to the healer.  It contained material components for a Reincarnation spell, instructions to for contacting a Druid to cast the spell, and cash to pay the Druid. So when Cklyph was finally struck down, he returned to life in a new Suli body, not the Gnome body he was used before. That was a cool experience, and Cklyph did experience a bit of wonder getting used to the new, stronger, taller body.

The Bard’s friend from her hometown was turned to stone and shattered, and Cklyph did not help pay for the resurrection because he considered it a waste of resources.  The Bard, a much better person, bore the whole cost herself.  This same hometown had an election and an organized crime family was close to winning.  Cklyph didn’t care. The town kept getting attacked by giants and serial killers and whatnot.  Poor or unfair administration seemed unimportant.   He did offer to make a copy of the Bard so she could both be mayor and continue adventuring.  The party almost missed a plot hook because Cklyph couldn’t be bothered to leave his magical wizard fortress and check in on this town of weak, useless people.

So at the end of a year and half of constant fighting, Cklyph was callous, power-hungry, and paranoid.  The campaign fell apart, so Cklyph never got closure, but his options seemed to be death, or isolation in his own personal dimension.

Wally

Wally was a knight in shining armor.  He loved his city, even though he knew it was corrupt. He saw the good in it and was dedicated to making it a better place.  He and the party decided that they were going to clean up the town non-lethally.  During a riot he found some ruffians threatening to beat someone.  Wally stepped up, drew his warhammer, then dropped it and beat the ruffians down by slapping them with his armored hand. The healer dragged them to the curb, healed them a bit, then scolded them about being productive members of society. Criminals and low-lifes tried to kill the party and they would beat them down, stabilize them, and drag them in to the police.  Once a fight got really out of hand and the building caught fire, so Wally ran back and forth, dragging his unconscious enemies out of danger on his tower shield.

But then the archer critted a demi-human and killed it instantly.  Wally was distraught!  He stopped in the middle of the dungeon to yell at his own party!  He should not have blamed the archer, since crits are random, but he did. One party member argued that demi-humans weren’t really people, so it was OK to kill them. (Wally was OK with killing animals but not people.) Another revealed that he didn’t mind killing at all.  Wally almost left the party right then, but was convinced to do one last mission. Someone was going to be executed for assassinating the king, and the party was there to make sure there was no funny business.  Before the main event, the police brought out and executed the criminals that the party had captured.  Even those closest to Wally didn’t share his commitment to improving the town non-lethally, and the good he thought he had done was destroyed right in front of him.

Sure enough, someone disrupted the main execution. As the rest of the party leapt into action, Wally turned and left.  We walked out of the palace and out of the city without stopping or saying good bye. He’s out there looking for a place he can fit in, where he can do the right thing and make things better, a place that probably doesn’t exist.

Conclusion

In my games, for my characters, death has not been the only true failure, the one thing that could actually stop them from accomplishing their goals.  Yes, an unrecoverable death means the end of that character, but there are often ways to recover from death.  I think of the time we TPKed after skipping straight to the boss fight and think, “A perfect storm of nonsense.  What a great story.”  I think of the barbarian who almost died rather than ask for help and think, “That would have been a good way to go.” I think of Cklyph slowly sliding into the cruelty that he was supposedly fighting, or the utter failure of Wally’s idealism and I still get emotional.