This has been an exciting week for me… As Hidden Path puts the final digital shrinkwrap on my most recent VR title Raccoon Lagoon, I’m bidding the classic nine-to-five a temporary adieu. As of yesterday, I’ve started focusing my full attention on Auto Fire! It is my hope to get it into solid, pro-tier shape over the summer, and see what happens!
In celebration of this moment, I’ve put together an early trailer, complete with some pro-tier voice acting:
Auto Fire needs a lot of work yet. I need to make the interface more approachable, flesh out the content, and improve the basic art so that the game starts turning heads. I need to deliver on the fantasy of driving a combat car… that’s skidding, shooting, hauling convoys, maybe even launching from jumps? The possibilities are endless!
Adding gamepad support should help people get comfortable with it quickly, and improving the mouse interface will hopefully do the same. Anything that helps people ramp up and be gripped by the promise of a muscle car bristling with chromed-out weapons.
As an inaugural step for my all-in on Auto Fire, I’ve been deeply examining my turn model… something I haven’t touched in like two years. The way it used to work is that each team would execute their moves when the timeline reached it, so that if you were moving at 60 mph (3 moves per turn), and the enemy was moving at 40 mph (2 moves per turn), the simulation would resolve with:
You move (progressing to 0.333 seconds)
They move (progressing to 0.5 seconds)
You move (progressing to 0.666 seconds)
They move (progressing to 1.0 seconds)
You move (progressing to 1.0 seconds)
Guh. This might sound sensible if you are a realism fan, but when many entities are moving at different speeds, the turns all interleaved and the player never knew who was going to move when. It was confusing and could get frustrating as an enemy vehicle suddenly drove right into your path or out of your line of fire.
The new model is pretty simple: Each turn you execute your moves, then the rest of the world executes their moves. So in the above example, you’d get your 3 moves, then they would get their two. It’s basically X-com style, but you know what?
It ended up playing exactly the same.
Yeah, you can’t really tell there’s any difference at all, it flows great. And while I was worried that you’d be irritated by that long pause for your opponents to do their thing during your fancy driving , it actually feels a lot better than when your opponents interrupted you at odd, unpredictable times during your turn.
This is an important breakthrough because if I can make the player keenly aware of what a “turn” is, I can help them understand what acceleration does (more moves per turn) and how weapon cooldown works (most weapons can only be fired once per turn). I might not need a hojillion progress bars (a weapon is either available or not). Since the core goal is to make the game more accessible and less math-y, I’m optimistic that this is a good step that doesn’t sacrifice the core gameplay.
Finally, along with this exploration I started experimenting with better shaders using Amplify for Unity. It’s another useful step, because there will be a lot I want to convey in-world and good shader control will help me make better 3D and mouse-driven interfaces. Things are looking up!
There has been a solid amount of progress on Auto Fire in the last month, though not everything has been visible.
There’s a condition system now, where entities can be stunned, set on fire, made to skid, be blind, etc, and that will last a fixed number of turns before automatically removing themselves. Nothing super fancy, but it allowed me to do stuff like cause a vehicle to spin out when it hits an oil slick.
It also allowed me to give the player’s radar more functionality, because it now “paints” targets within a specific radius for a set amount of time. Ideally the player should be able to build up sustained fire on a single opponent, or race through a group (at high speed to avoid being shot) and hit everyone with a radar ping before swinging around and taking advantage of the higher hit rate (and eventually critical hits spurred by this).
There is a new icon system above vehicles to show their current conditions, which hopefully will teach players more about the advantages of speed and choosing targets.
I did a bit of work on weapon resolution to clean up some weirdness, as well as allow for effective area effects over various volumes. I can have weapons with blast radius at impact, cone effects, lines, and more. This gave me some vastly improved versions of scatterguns, flamers, and so on.
I also switched over my missiles to LeanTween (a great Unity package that’s freeeee, although the Editor that goes with is worth throwing a few bucks at) so that I could use more sophisticated arcs (splines, eases, etc) for the projectile travel. This gave me some great drunk missiles and so on.
A somewhat smaller bit of work but vastly important was looking into problems I was starting to see in my city layout.
A couple of years ago I put multiple months into a city generation method that took pre-crafted blocks and spliced them together, street-to-street, with props and so on. It worked pretty well… However, lately the cities seemed to have wayyyy too many skinny alleyways and dead-ends, even though I remember putting a fair amount of effort into reducing these.
Worse yet, I’d started to see some passability issues and unplayable maps, which I know I did checks for. Ugh. I love dusty Mad Max wastes, but the cities are just as important a part of the game and they weren’t fun.
I spent some time trying to re-learn what the hell the 2016 version of me had made. For a little bit I thought 2016 me was a bit of an idiot… but it turns out he was somewhat clever. It was 2018 me who introduced a number of bugs that caused loops to no longer form… that guy was a jerk. Specifically I had some code that overlaid roads over previously populated obstructions to create extra loops, and those no longer overlaid properly. In addition, my passability checks were not properly busting holes through the buildings and obstructions when needed.
I added a bit more two-lane roads and discouraged alleys from forming very often. In addition, I added some new block types to my definition that had fewer buildings, so some extra open spaces could be formed. I can pretty much make an infinite number of city block components, so I’ll keep adding ones that give some more driving freedom.
Anyway, I hope to have a new version out this weekend, it’s been too long. Wish me luck!
Been working on creating some better combat mechanics and options for Auto Fire lately. One of the factors I was working on was tangibly having hit chance be affected by tactical choices such as “painting” a target with radar for more accuracy, or on the other side moving faster to avoid getting hit. I got those systems in but it didn’t really seem to matter.
I had to seriously think of how I’m dealing with accuracy, range and speed. My initial version of the combat system in Auto Fire was inspired by the system in Diablo II. It used this sort of calculation:
Chance =200% * AttackRating /
(AttackRating + DefenseRating)
Consider AttackRating to include things like gunnery skill, weapon accuracy, and other targeting bonuses. DefenseRating in contrast is stuff like range, target speed, and target size.
Multiplying the value by 200% gives the player 100% hit chance whenever the Attack Rating is more than 50% the Defense Rating… So in the average case the player is guaranteed a hit. This was the system I used in X-Men Legends, and it feels pretty good in an action game where you are directly controlling your character and only want to have misses when your opponent clearly outclasses you.
The problem with this method is that the chance to hit tapers off because it never reaches zero… Thus, I was finding that there’s only a small sweet spot where hit bonuses mattered between 100% chance and maybe 60% chance.
I do put a minimum hit chance of 10% just so it’s not worthless to attack, and I’m not sure what increasing the miss chance is going to do to the feel of the game.
I have a mechanic where excess above 100% is used as a critical chance (That is, 130% chance is an automatic hit with a 30% crit chance). I might consider doing the same on the bttom so a “miss” is a glancing blow that still does a little damage, progressing to a real miss based on the percentage. (For example, -30% is a 30% chance of a real miss and a 70% chance of a glancing blow).
I’m wrapping that back into weaponry definitions and looping back around to where I can try the new system in the wild. From there we’ll see what happens.
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.