I was just thinking about the challenges of generating a city map for Auto Fire and realized that I’ve accomplished a whole lot and haven’t really discussed it in a long while.
Really early on in development I created some tools to generate block templates that get placed during map generation. This allows me to work with actual crafted sections of map (with variant buildings and other things that can be adjusted after the template is laid down). It’s more or less a requirement for cities since the classic “cave-style” procgen or even dungeon layout techniques don’t work as well as I’d like.
I create template patch objects that have a bunch of data attached to them such as exit points (for cities) as well as a variety of variable bits like spots for random decor and building styles (depending on the generation profile I’m using).
The block data that I save out actually even supports 9-slice scaling, so I can declare borders to be of a fixed size, but the center to be a repeating tile section that can be any size. It’s really useful in some situations like when I want a long crafted section of wall, or a large 4-lane boulevard on a city map.
For cities, however, I actually work mostly in blocks that are 4×4 in size, with street connectors that are 1, 2 or 4-lanes in size. If I want to make a larger block such as 4×8 or 12×16 I can do that as well. Getting the whole system to rotate blocks properly was probably the hardest part (you can see in the build right now that I have a few multi-tile objects that don’t yet collide properly… my work is never done).
I’ve got several workspace maps that I use to create these blocks of content (desert outpost, city, overworld, etc), and it’s a scalable system that could support a whole ton of layouts. When I say “damn I gotta work on content”, making 10x the tile variations and cities with specific flavors are ways that I could take advantage of the systems I’ve created.
Anyway, this approach isn’t particularly new but it works great for my needs… It deserves a more crunchy article dedicated to it, but it’ll have to go on the to-do list for sometime in the future. For now, hope the peek at the approach was a little interesting.
The holidays have come around again and for us that means another all-out session of Talisman. To us, this board game is played just once a year because it’s always ridiculous… When you pile on expansions packed with every fantasy trope, it becomes a madcap race around the edge of the board with heroes, werewolves, reapers, frogs, faeries, and god knows what else. Anything can happen in this game, and any roll of a six-sider could send you rocketing into the lead or plummeting headfirst into failtown.
Last year our buddy Jim, who owns a sizeable column of Talisman boxes, devised a new style of play that was both terrible and somehow made the whole thing work: Pay to Win. These homebrew rules allowed us to stake our own cash to correct some of the random chaos that crops up in any Talisman game. It was a memorable night to be certain.
Always one to outdo himself, Jim upped the ante this year with an all-new set of Pay to Win models. However, this meant he had to step back from the table of players since he knew all the game’s secrets… Our host, our DM on this zany adventure!
Talisman: Courage and Coin
We started with a sheet of monetary rules that was familiar, but with a few changes:
$1: Stop at any point during your move.
$1: Add one to your Movement roll.
$1: Re-roll any one die that you just rolled.
$1: Discard a card you just drew and draw again from the same deck.
$1: While in The Dungeon, The Highlands, or the Woodland, return to the entrance of the sideboard you are in.
$1: While in The City, travel to any space in The City.
This was just the beginning though… we were then introduced to a series of achievements that would factor into the (as yet unknown) win condition. This was a nice twist to the rules since Talisman’s endgame can break down, with one player strong enough to steamroll anything, but unable pull off a win… until 2AM rolls around and you call it and go home. Since we weren’t aiming for the Crown of Command, we didn’t need the inner circle of the gameboard, where really crazy (and sometimes tedious) stuff can happen.
The initial Achievements were:
Defeat the Lord of Darkness (complete The Dungeon)
Defeat the Eagle King (complete The Highlands)
Complete a Meeting with Destiny (complete The Woodland)
Have 10 or more points of crushed monsters (turn them in instead of using them to raise skills)
Have 10 or more gold coins
Possess a Talisman
End your turn on The Sentinel with a follower. Throw the follower in the river.
Turn into a Frog, then return to normal without dying.
Have 5 Fate tokens, then have 0 Fate tokens.
The Werewolf and Death were out prowling the board, controlled by Jim when his turn came around. We dutifully went about our early-game business, not quite knowing what was coming… A few bucks were thrown into the pool, but it all took another step forward when one player managed to die… and unlocked a secret achievement (“Be the first player to die”), earning a trophy! It turns out these trophies were worth 7 Victory Stars.
BAM! That was the moment the winning conditions were unveiled. The first person to complete each achievement earned a trophy worth 7 Stars, and some were repeatable, so they could be accomplished by others for 3 Stars. The Time of Reckoning, when all Victory Stars would be tallied, was set to 9:30PM, five hours after the game began.
Death then began to pursue whichever player had the highest number of trophies, and the Werewolf pursued whomever had the lowest number.
I was the first to Complete a Meeting with Destiny and have 10 gold coins, and each of us earned stars from completing sideboards, finding a Talisman and turning in 10 points of crushed monsters. But Talisman: Courage and Coin had more in store for us… things were going to level up.
Packages of Power Update
Now we were able to spend stars for certain actions as well, but more importantly we could unlock Packages of Power. Here were the rules:
Purchase and unseal at any point during your turn, including mid-combat.
You are limited to ONE per turn.
When unsealing a Package of Power, you gain all the contents immediately.
Objects “earned” in a Package of Power do not count towards carrying limits.
NEW DYING RULES
You keep all Objects “earned” from Packages of Power.
If killed by a Monster, you may also keep one Weapon and one Armor.
Your new Character begins with +1 Strength and Craft for each time you have had a Character die.
You must hand one Victory Trophy to another player.
1 Star: Stop at any point during your move.
1 Star: Add one to your Movement roll.
$3: Unseal a PACKAGE OF POWER!
$10: Delay The Reckoning for 30 minutes.
Out came the 10 Packages of Power, our very own physical loot boxes to waste our money on. Each whale-decorated box held untold treasures. Who would be the first to buy in?
We all dove in really quickly. These lovingly-crafted boxes contained things like fate tokens, gold coins, and even alternate minis, “skins” you could swap out your regular mini for if you didn’t like the fig you were playing. If you got an item from a box, it didn’t count against your item limits either… So naturally I bought 3 boxes. (That’s how they get’cha.)
The best items I got were some special dice, that I could swap out for any 6-sider roll (whether I was rolling for my own results or taking the role of my neighbor’s enemy!) One was a D10 with nothing but 1’s and 2’s. The other D10 had a single 1 and 2, but two results each for 3, 4, 5, and 6. Oh man.
Some of us bought more boxes, some bought less, but each of us ended up absolutely packed with crazy gear and powerful perks… We marched around the board and pushed our advantages to the fullest. Then two hours before The Reckoning rolled around and we were introduced to even more Talisman DLC:
Talisman: Legends of Balance
That moment brought out four more ridiculous boxes, each embossed with the most luxurious, shiniest whales that the craft store could provide. The cost for accessing the contents of these amazing items? 5 dollars. I don’t think I’ve paid 5 dollars for a microtransaction in my life. Dammit Jim!
There were four of us playing, and four boxes. Naturally we each dove in headfirst and bought our way into this madness… and pure, unadulterated madness was indeed within each cardboard tome. Holy Jesus… (In my case that was quite literal).
Each player that put up the cash for a box got a completely new character, each with its own miniature and utterly broken rules. We kept our stats and items, but these Legends of Balance were the very opposite of balanced… The race to victory was now on, with these four characters on the board:
Dungeonmans is the protagonist of Jim’s magnum opus (that you should totally buy right now). He certainly ruled the Dungeon and gear was his bag. I think you can guess what Stremf is.
Do not roll to move in The Dungeon. Instead, move up to seven spaces in either direction.
When you gain Stremf you gain an equal amount of Life.
You may hold any number of Weapon and Armor cards in your inventory.
If you roll a Six in a Combat or Psychic Combat where you kill the opponent, the monster or player Critically Dies and you immediately gain one Stremf.
Fairplay.ru Legit Gamer
Created in honor of a hacked Diablo character we encountered online one day. Complete with counterterrorist miniature. This dude was nuts.
In The Dungeon, Forest, Highlands or City, you may move Up and Down in addition to Clockwise and Counterclockwise. In the City, you may move through walls.
When you purchase an item from any merchant, you may do one of the following: Pay zero gold, if you have enough to purchase the item OR purchase the item as normal, but take every copy of the item from the merchant deck.
If you have zero gold, and are forced by a card or effect to lose gold, you gain 2,147,483,647 gold.
When spending Fate to re-roll a die, you may roll eight times and take the best result.
The New Ultimate Jesus
This was my character. I almost, almost, alllllmost caught someone with rule 4, but I was just a little too slow to catch him. Everyone was just a bit more careful after that. Then Legit Gamer started chasing me around with his spear… I managed to fend off a few assaults until I was able to exceed 10 Life.
You may enter and exit The River using any adjacent space in the Middle and Outer ring, regardless of distance or direction.
Note: The river can be entered from any square adjacent to it in one step, then exited at any other square adjacent to the river.
If you roll a One for Movement, you may call upon Angels to carry you to any space in the Middle or Outer ring.
When you lose Life, you may choose to not lose Life, or to gain one Life instead.
Exception: If a Player or Monster uses a Spear of any type to make you lose Life, you lose 10 Life.
Effects that Kill Him still work, regardless of lives He has left.
If another Player says “Jesus”, you may claim them as your Disciple. They change to Good alignment, and at the end of the game give all praise and glory (Victory Stars) to you. This ends if they change Characters through death or MTX (microtransaction) purchase. If all other Players are Disciples, you win the game.
You must claim a disciple within three seconds of the utterance of His holy name.
Ohhhh man, a tournament in The City… A massive row of character cards lined up along the side of the table, bristling with special abilities, all controlled by one player…? TEST YOUR MIGHT.
Shuffle the deck of Character cards and draw six of them at random. They are now Souls under your control.
When any other Character dies, it becomes a Soul under your control.
While in The City, you may spend 10 Gold to Host a Tournament. Draw 4 Character cards at random. Choose one to be the Winner, they then die and are a Soul under your control.
Shang Tsung has the special abilities of all Souls under his control.
The Time of Reckoning
The clock ticked away and we finally hit the Reckoning. Some of us spent wayyy too many turns trying to become a frog (how the hell did we finish a game of Talisman without anyone ending up as a frog?) Dungeons were delved… Jesus hit the Highlands. Legit Gamer noclipped through walls all over the place. Victory Stars were heaped everywhere.
At the end, it was time to add up our shiny, glittery craft store stars, adding in the 7 Stars we earned per trophy. As with any Euro boardgame there were additional ending criteria that modified the total, although these were secret until the final reckoning. (Jim was keeping track of some of them) Any end condition that was a tie meant nobody got the award:
Most Weapons and Armor: 3 Stars
Least Trophies: STEAL one Trophy
Most Loot Boxes/Books Purchased: 5 Stars
Most Life Remaining: 3 Stars
Most Cards with “Dragon” Printed On Them: 5 Stars
Most Town Bounties Collected: 3 Stars
Most PVP Victories: 4 Stars
Caused the Most Skipped Turns: -4 Stars (penalty!)
Most Encounters with Reaper or Werewolf: 4 Stars
Most Cards, All Types: 2 Stars
Most Followers Killed: 3 Stars
The hidden trophies that we hadn’t uncovered were unveiled as:
Roll two 1’s (snake eyes) on Talisman dice. (This was surprising that it didn’t happen).
Try to bribe Jim during the game. (He was sure that would have come up).
In the end, the player who unlocked Dungeonmans was victorious, not because she unlocked the strongest avatar, but because she won a lot of trophies and had an amazing array of equipment at the end.
A great time was had by all, and while last year we had spent 30 dollars between six of us, this year we spent over 70 between four of us. We still haven’t decided what to do with the money (and last year’s take was still in the jar). Did we win or lose? Since we all shared a great evening with comrades it’s impossible to consider this as anything but total victory.
Once again I think we took a game that has its systemic faults but loads of flavor and made it into something better. Adding monetary transactions introduced an additional layer that allowed us to smooth over the weird runs of bad luck that tend to sour people on Talisman games. Adding this DLC stuff allowed Jim to have fun as a host, play a bit of a Dungeon Master to all these goings on, and create a tremendously memorable evening.
Could this model be used for other games whose systems don’t hold up, but have great flavor, items and moments within? I’d like to think so, although Talisman is a bit of a unique animal if only because of its massive amount of published expansions.
My only regret is that so much of this year’s awesomeness isn’t really repeatable… We still have the boxes, the cards and the special dice, but the secret stuff is secret no more. Regardless, whether it’s more from Jim or someone else’s doing, I have no doubt that next year will bring bigger and better things for Talisman, and another spectacular evening will be had.
I had a bit of a weird week because I was coming off the RoguelikeCel, but after the feedback I got I knew just what to focus on for this new update.
Enemy cars can shoot again!
Yeah sooooo I recently added some infrastructure so that player vehicles can have unique loadouts that are independent of the model of car itself. …annnnd while I got it all working for player vehicles, I broke the ability of enemy cars to have their own weapon loadouts too. So they didn’t actually have any weapons mounted. 😛 Fixed!
The existing health post attached to vehicles in the world was straight up and down, and hence blocking the view of important info such as the state of the front weapon, or your speed when reversing. The style of the health bar is now adjusted to be a bit less disruptive.
The speed indicator was pretty rough, hard to see, and clunky to look at. A few things were done to improve this:
Smoothed out the speed indicator angle so it rotates more gracefully.
Improved the speed chevrons (both the green and red) to be more visible.
Added grip indicator for the player on top of the speed indicator, for the player car only.
Speed arrows and grip indicator grow in a more visually pleasing way.
So the previous model of vehicle skidding either gave you complete control or zero control. It never felt good since people’s instinct is to push against a skid in various ways to try to influence it.
I wanted skidding to be fun and also kind of do what you expect. So, it got a heavy overhaul:
The speed indicator now has a display of “hazard levels” beyond the speed itself. A broken chevron means that you are skidding more out of control.
The “hazard skid” levels supplement the standard “grip down to zero with a red speed indicator” style of skidding.
If you have a hazard skid, you can turn but can’t influence your movement.
If you are skidding but do not have any hazard skid levels, you can influence your movement by 45 degrees by accelerating to the side. Thus a skidding vehicle can still trace wider arcs.
You can accelerate or decelerate your skid by pushing towards or away from the direction of skid.
Skidding and grip now recharges more reliably based on whether you are facing in the direction of the skid.
So that’s it for now. I’m adding a little more info on the Itch page about the systems that Auto Fire (in its current state) will support for now. Someone asked for a 32-bit version, although I’m not sure I’d recommend older machines until I slim down some of my meshes. In the future I’ll put more work into optimization and alternate OS’es like Linux.
This past weekend I attended the Roguelike Celebration, which I had heard was more of a fan gathering as compared to the developer-focused IRDC… Still, it’s a pretty cheap flight down to SF so I decided to attend based on the recommendation of friends. We thought it would be a good place to show off Auto Fire and gather good feedback from people that are dedicated to the genre.
What I wasn’t prepared for was that it was the single best developer’s conference I’ve ever attended, whether that was the focus or not. Informative, entertaining, comfortable, stylish, professional… It was filled with some legendary creators and you’d be hard pressed to find even a shred of ego anywhere. Nothing but mutual respect and support, wall to wall.
These people were accessible and open. They were humble and eager to learn themselves. They shared openly. Everyone was positive, whether we were discussing a text-based passion project with the classic @ for the player, or a high-falutin’ mass-market-friendly game using roguelike principles. (Which is good, because I’m aiming slightly for the latter, although I want to stop short of making a “Roguelite”).
There was talk after talk after talk, and most of the presentations were pretty relevant to general game creation beyond Roguelikes. In particular, Roguelike developers are intensely focused on two things…
The first is (of course) procedural generation. This includes not just map generation, but encounter/trap creation, procedural storytelling, god/pantheon/myth/food/whatever generation, and so on. What started as a passion for building noodly dungeon spaces has turned into a community dedicated to crafting entire universes through intensely clever processes.
The second is creating a flexible game architecture that allows for nearly infinite rule expansion. A trademark of Roguelikes is that the creators just add on feature after feature for years and years, which lead to so many interconnected systems that have to elegantly support (for example) the player getting polymorphed into some new form that has extra arms, which allows you to wield more weapons, or being able to animate any world object including bookcases and walls, then charming them to becoming your faithful pets.
The approach for solving this issue mostly shakes out to a couple core philosophies, but the humility, willingness to learn, and eagerness to share was pretty amazing from these creators… young or old, aspiring or legendary.
At the end of the first day, they set us up in GitHub’s phenomenal common area with drinks and food and let whomever set up whatever they were working on and showing it off. I had a potato-level laptop that barely ran Auto Fire at 2 FPS, but a fantastic soul named Jaxon (whose last name I unfortunately never discovered) was amazingly cool enough to let me use his super-baller laptop for the night. Jim spectacularly scrounged up a giant TV and we were able to show it at around 100 fps x 55 inches.
It was a blast and tremendously inspiring to he feedback was awesome. I got some really good comments on the game and came back with a big list of what sorts of things I wanted to take care of.
I am working on the skid model most of all. I just showed it at the Roguelike Celebration conference and got a lot of good feedback. I want players to be keenly aware of how close they are to skidding out, and to be able to better influence their skids once the tires break loose. I think a combination of feedback and control tweaks will help that.
I am eager to push into more content so that I get more of a game loop, but UI and feedback will be visited up front. I want to get another update out before I head to Wisconsin next week.
Brass Tactics was a really invigorating project to work on and I felt that we as a company (and I personally) learned a tremendous amount about VR in general as well as general player interaction and behavior. Over the past several months I’ve brought the key takeaways and posted them on the Hidden Path website.
Since them I’ve cleaned them up as a series of blog/articles on Gamasutra. I also will be giving a talk at the XRDC conference at the end of the month talking about some of our particular solutions in more detail.
One bit of feedback I got when showing the game to a friend recently was that it was fun to drive, but picking up loot was beyond terrible. That’s because you have to manage traction, speed and direction even when you’re just trying to hoover up whatever you found in a weapons cache you just blew up. It’s just a whole bunch of stunt driving to scoop of some stuff that might only be worth a few bucks.
“Got it covered,” I boasted… I’d already planned to add in a “radar pulse” that would do the triple duty of revealing hidden things on the field, “painting” targets for improved accuracy, and acquiring items in a small radius around the player’s car. Super-convenient when you are in between fights, but when you’re in the thick of it you do have to deal with its cooldown. There’s also the precious action that you have to use to activate it, rather than using it to shoot or turn.
Feeling smug about my clever solution, I recalled how long ago I decided on my solution. It was……….. over a…. year ago. For something like 15 months I’d been picking up loot in the worst way possible. Errr… awesome. Guess I should get that damn thing in.
It took an embarrassingly short amount of time given the sheer weight of procrastination behind it.
Some days you take pleasure in the smallest of victories.
More and more of my time is spent messing with data rather than code. A procedurally-generated game like Auto Fire has a lot of data to shuffle around, defining a nearly endless list of things. These titles generally rely on complex rules to assemble what might be one-off creations in other games. These rules are for things as varied as:
Map sectors, layout generation data, name generation data
Map Locations, loot tables, shops
Tiles, obstacles, decals
Enemies, squads, encounters
Cars, chassis types
Tires, engines, armor upgrades
Weapons, equipment, ram plates
Luckily I was able to use a bit of code given me by a good friend as a framework for defining these. Since I hooked the system in, the definitions have spread across 15 directories and 70 files, and that’s with not a lot of content defined as of yet. By comparison, Dungeonmans has nearly 600 data files just for content definitions (nothing to do with actual art or audio content), plus god knows how many other little files squirreled away.
Creating the content itself is daunting, but nearly as tough is managing all this. It can be hard to organize and keep straight. A small victory this morning was when I improved comment support in my definitions, but more importantly I added inheritance. This allows me to define a base definition and then overlay changes with another definition. It cuts down on a lot of extra text and correction as I add new features to the game, and makes creating a whole line of related objects a quadrillion times easier.
For example, a vehicle’s chassis defines a lot of the weapons and equipment you can mount on it, as well as the model that is used for your vehicle on the battlefield. You will ultimately be able to buy a new vehicle at a car dealer, and pick out the chassis that will serve your needs the best.
The Stallion is a line of muscle cars, each of which is beefier and sports a larger engine than the last. With inheritance I can create a set of upgrades much more easily:
name "Econo Stallion"
armor_base "100 100 100 100"
Engine "None default engine_rank_1"
Tires "None default tires_base"
Armor "None default armor_base"
WeaponRam "None default wpn_ram_base"
flavor "The doors rattle a bit if you slam them, but you'll feel like a thousand bucks behind the wheel of any Stallion."
name "Grand Stallion"
Engine "None default engine_rank_2"
flavor "Listen to the throaty purr of the Thundercat engine. Revel at the enhanced electronics package, and even stash more cargo! Welcome to the Grand Stallion."
It only took like 20 minutes to implement, I can’t believe I put it off so long. I guess my data was so in flux that I haven’t been creating a lot of content, just a lot of systems… Now I gotta go clean up my data.
Over the July 4 holiday I managed to get a good, solid, 5-day weekend, which in turn gave me great blocks of time to work on Auto Fire. It felt great to get some really nagging things out of the way. There’s a bunch of stuff here that is new since last time I blogged about it:
Site System. I created a new structure for holding what I call “sites”, which is any point of interest on the map. This can include cities found in the overworld, highway entrances and exits, garages, and even regular landmarks and points of interest. The sites are what I use to guide road plotting, so roads can connect exits, cities, garages and even just weird old non-functional shacks out in the desert, which I constructed from groups of tiles. It gave me a system for sprinkling them into a map from a table, which adds more life to most maps.
Encounter System. The encounter system is something that I’ve wanted to do for a while, to allow the player to deal with random stuff that they meet along the way. Call it FTL-style, although I associate the concept with pen and paper games as well as wayyyy back to ancient games like Odyssey on the Apple II. This allows players to consider some simple risk-reward propositions, or to choose between acts worthy of fame or notoriety.
Stylized Visual Effects. I took some of the realistic visual effects for weaponry, explosions and smoke and returned them to the stylized versions I had used a year ago. I found that these stylized VFX had extra punch and grabbed the player’s attention among a lot of noise, but more importantly, fit the oddball scale of the world in Auto Fire. With buildings and cars and chests all coming in at unrealistic sizes when compared to each other, I found that realistic visuals just made that mismatch even more pronounced. Somehow having unrealistic smoke and fire just helped with the suspension of disbelief, and I think it can look just as compelling.
Walled Outpost Generator. One of the biggest things I got done over the holiday was to finally prepare enough ramshackle walls, dirt roads, windmills and metal-roofed buildings to create a special generator for badlands outposts. This is a heightmapped terrain map that sets aside a center section as the “core”, where buildings and certain visual points of interest will lie. Around the perimeter is a wall made of scrap, cars, wood, and anything else… I had to make a version of my patch generator that would stretch and rotate this wall in any direction with repeating motifs. Dirt roads are then stretched to the various sites around the map. I’m really happy with how it came out.
Smoother Driving Feel. One thing I did fix in recent months came from feedback I got from right after the 7DRL that spawned Auto Fire… For some players the movement felt stuttery and halting. Part of that is unavoidable with a turn-based game, but some of it was fixable. There is no longer a single-frame stop between various units executing their turn, and if the player cues up multiple moves, it executes smoothly if possible. The movement from square to square in slightly slower than it was as well, creating an subtle improvement that I feel when running the new build versus an old one.
Wall Deflection. This last one feels intangible as well, but I implemented it because the more I played, the more I felt cheated that the mechanic did not exist. If the player is heading diagonally towards a wall at high speed, he or she can get deflected off the wall and into a new movement path parallel to the wall. This is a fairly common occurrence in the city maps in particular, and even lets players use it to their advantage if they wanted to keep shooting rather than steer (this is an option in Auto Fire!)
Okay, so there’s a lot more work to do. I feel that I’ve hit some fine polish points, but I mainly need to assemble content together into something more playable, to have more of a reason and tension in the overworld. All that will hopefully come next.