Tristan Cole [elocnat]


Tristan Cole's Pro Driver -- Devlog #7!

| Devlog #1 | Devlog #2 | Devlog #3 | Devlog #4 | Devlog #5 | Devlog #6 |

These months really pass by too quickly when your mind is completely occupied by your project; anyways here we are with another devlog for my formally #UntitledDrivingGame! This past month has been focused primarily on designing the game’s first real level, LATC. I’ve been figuring out the best ways to keep the player in flow, adding hittables and destructible objects to the environment, & filling out all the barren areas with blockout buildings. I’ve also worked a bit more on the vehicle, including testing basic replication, reworking drifting, and finally for the most obvious change: chopping the top off the sedan and adding a cage!

Watch the video version of this devlog on my YouTube channel!

Sections




SIDENOTE(S)

Back again ahead of schedule!

Grab an early pre-alpha preview build of Tristan Cole's Pro Driver here on itch.io! I plan on updating this build soon after this devlog goes live to include the new level design & vehicle changes!

Follow me on Twitter for more regular updates on #TCPDgame and all my other projects!

Subscribe to my YouTube channel for video versions of these devlogs and more related content!


🔳 Carving the City - Iterating on LATC


Level design is something I’ve always been vaguely interested in but never had the opportunity to deep dive into. I’ve “designed” some small levels for my other games, but nothing really out of the ordinary or interesting to look at. With TCPD, since the levels are going to be crucial to the core feel of the game and replayability, I really wanted to take my time and get deeper into the process to create levels that are truly fun to play but also interesting to just take in as a whole. I gotta tack on that while it’s taking a lot of my time, I’m having a lot of fun doing it too.

Old LATC flythrough

Latest LATC flythrough

The basic gist of LATC is that it’s a map with a big central campus surrounded by various city buildings: office buildings, a theater, shopping areas + restaurants, and even a baseball stadium. The cutoff points for the map include a highway and a river/canal with a drawbridge that blocks off the downtown area of the city. I initially started with the main campus layout and then started peppering in buildings on the edges. As the map grew, I started honing in the road system and trying to make it feel less “square”; you can currently do a lap around the map, and there’s a handful of long straight roads, but there’s also a lot of smaller roads and paths in between that the player is meant to take and explore. I also just added a long curvy “back road” that allows the player to showcase their drift skills!

While at face value the city is fairly large, the vehicles are moving really fast so you can get from one side of the map in ~40ish seconds MAX going straight through. To make it feel even bigger, I wanted to focus on verticality as much as possible. In a big city with large buildings you have a lot of unused space if you can’t go inside them or use them for traversal (like Spiderman), so the ability to make quick jumps or grinds to rooftops AND being able to transition between them is crucial. A while back I wrote down a list of things that were potential transition pieces like air vents, power lines, roof edges/awnings, structural supports, signs or art installations, etc. I’ve been slowly integrating those into the design to allow the player to easily traverse the city when they’re “off-roading”.

Vertical level design

Testing physics objects/destructibles!

The speed of the vehicles also means I have to pay special attention to physics objects in the environment, and I’ve finally found a solution for that. Before, since the vehicle physics utilize substepping and therefore get a lot more physics updates than other objects, the hit was recognized too late and as a result the vehicle would stumble over even larger objects when driving over them. The fix? A huge capsule collision volume that knocks everything away in the custom “hittables” channel even at the highest speeds! Maybe this isn’t the most elegant way to solve it and I’ll potentially iterate on this later, but right now it has allowed me to successfully integrate multiple sizes of physics objects & breakables into the environment without sacrificing any driving flow. There’s now breakable fences, hittable boxes, bags, machines, and street props, and soon all the traffic/street lights will be hittable too! Nothing gets in the way!


🔳 Design Decisions - Focusing on flow & player visibility


Imagine you’re driving down the road and see a beautifully angled surface to launch your car off of. You quickly steer into it and smash your boost hoping to pull of some sick air only to ride up and smack the front of your car right into the “ramp” like it was a brick wall and crash instead. Ever happened to you in a videogame? This is a prime example of one of the pain points I’m trying to eliminate while designing levels for TCPD. The player must stay in a constant state of “flow” in order to maximize enjoyment and keep them engaged.

One way that I’m tackling this problem as I build out LATC is to create hidden ramps and other player safety nets anywhere necessary. This means that any places where there are stairs, any rough terrain that’s meant to be traversed, any small gaps between objects in the environment, etc. need to be filled in. It’s imperative that the vehicle doesn’t get stuck between or on anything when driving or jumping across the map. TCPD’s goal is to be very fast paced and keep the player moving throughout the environment, so no player realistically should expect or be disappointed that their wheels/vehicle won’t fall between parked semi trucks for instance!

Modern semi truck gap

semi_truck_gap

Quick level design short I made

Grind splines are also tricky with how I currently have them setup. Currently, I have a single spline blueprint that uses a “beam” mesh I have and allows me to create any kind of grind spline I want. Right now there’s not a way to change the mesh directly, but I’m also not sure if there’s a need: depending on the area of the map and what I’m setting up for grinding, I’ve just been placing the spline and then hiding the mesh in game. This so far seems to be the ideal way to do things, even if it does take more time, because realistically a lot of the grind positions (think building roof edges for instance) are probably going to be built into the models themselves. The other “problem” is that the grind splines have to be longer than the object they’re grinding on. The big reason for the extra length is that the grind splines auto “detach” when you’re right at the end; if they’re too short, the vehicle usually ends up hitting the static mesh and getting thrown off course. I’m going to have to work on improving the grind code & blueprint spline, but it’s another thing I’m constantly thinking about during the design phase.

Extended spline length example

spline_length_example

Showcasing the vehicle's new cage!

cage_view_comparison

Well it finally happened, I made all the vehicles in TCPD convertibles…kind of. As you know if you’ve followed the devlogs this far, I’ve been against making all the vehicles in the game convertibles. Yes, it’s clearly better for player visibility; but it’s just kinda boring. In Crazy Taxi it made a whole lot of sense and worked great; would you want every vehicle in say Just Cause or GTA to be a convertible though? I’d guess not, and that’s kind of where I was coming from. The way I think about design stems from tweaking my current (or envisioned) reality: so not all cars are convertibles IRL and they shouldn’t be in game. But you can’t always have what you want, and personal sacrifices must be made for the sake of making a better game.

So I made a compromise: they’re not convertibles, they’re just chop tops! I had an idea one night and decided to just chop the top off the sedan model I was using and add a cage. I’m unsure why this didn’t occur to me before, but as soon as I mocked it up I knew I was onto something. The cage fits the theme of the game: the vehicles are heavily modified “street cars” with their own style. Not only does it increase the visibility the player has into the cabin to see the character’s animations/tricks in addition to giving the character the ability to climb around the vehicle easier, but it gives a unique look that I can base all the future vehicles in the game off of. To me the cage will act as one of the unique design pillars of the vehicles, similar to the rocket engines in Rocket League cars. The cages can be stylized to any vehicle and it enables sharing the same list of tricks across vehicles in a much easier fashion. My mockup is ugly and temporary, but just imagining the possibilities has me really excited to start working with a vehicle artist!


🔳 Synchronized Sliding - Drifting & determining the path for multiplayer


Who doesn’t like sliding their car around a corner at breakneck speed? Only people who can’t! The thing is, drifting wasn’t something I was initially focused on as a base gameplay element. I know people love drifting, but to me it’s one of those things that’s really fun to watch and fun to do occasionally but in general for games I much prefer the more “Driver” esque feel of driving, which I’d classify as more of a grippy style. The car has a lot of traction, but can get loose with extra wheel spin from a stop or while taking corners at high speeds/with the handbrake. Besides being tough (for me) to program that handling model, TCPD isn’t really meant to work like that. The vehicle has basically 100% traction at all times except when you want to break it for combo/fun/gameplay reasons.

I’m not quite sure why (besides the fact I only understand the underlying physics on a basic surface level), but drifting is also one of those things I can go do in 20 other games and then still have no idea how to implement it/how it should feel in my game. Initially, before I added any kind of traction, it kind of felt like you were just drifting the whole time. After adding a friction model (adapted from Elhoussine Mehnik's Kart Physics example) and making the vehicle feel more “realistic”, the first model I tried was just turning down the anti-slide value from 0 to a negative value which added force that pushed the vehicle to the side kind of like the player was drifting. This was okay, but something still didn’t feel right. I got feedback that it was possibly just too much force, so I turned the friction back to zero so the car was sliding freely (as it was in the first pre-alpha build) and I put a little angle, depending on the steering input direction/amount, on the vehicle’s “fake” body model to make it appear sideways. However, no sideways force means you can just drive like normal with a larger turn radius (only felt like you were “drifting” when hard turning).

WIP drifting code

basic_drift_code

The new drifting: fun & smooth!

In the latest drifting model, we get the “current sliding speed” and do a dot product of the “current horizontal velocity” and right vector. If the car is on the ground and moving, a force is applied to the vehicle (ignoring mass) multiplying the current right vector and the current traction value (which is “current sliding speed” x current traction value). Along with this I angle the body in local space on the Z-axis (it’s over exaggerated right now) depending on the drift direction. This results in a stylized exaggerated but fun drifting feel that’s possible but difficult to fully control (especially in boost). I wanted it to be relatively difficult to control because drifting is a combo extender and there needs to be a “penalty” to using it while still keeping it fun to use! I’ll be making minor tweaks like updating the drift transitions to be a little bit smoother with timeline curves but I think it’s finally in a good spot.

What good is drifting if you can’t do it with friends? That’s why I’ve started testing very basic replication in TCPD! When I say very basic, I mean very. More or less I updated the game mode to handle spawning multiple player controllers and then confirmed that they both spawn in game and can see each other. Right now however almost nothing is replicated in terms of controls or functions/events in the vehicle blueprint, so the client player can’t really do anything besides watch the server player run around. I’ve determined a (once again very basic) list of things I need to do to start re-architecting the game for multiplayer now though, most of which includes combing over my vehicle code (which I’m looking forward to cleaning up a little bit) and moving stuff over to the player controller. Oh, and stop referencing “player controller 0” everywhere, duh!


🔳 What’s Next? - Development timeline update


Let’s update the roadmap for TCPD which I introduced in a previous devlog:

My goal for the next month is to finish blocking out LATC so that it feels like a fully playable map. I also want to have it working so that two players can drive around in the map together in a multiplayer free roam mode - even if tricks/scoring/etc. isn’t yet replicated. Honestly I feel that once I have a fully playable map and can start fine tuning it, adding on the gameplay objectives/modes etc. (some that I’ve already prototyped) is going to be a breeze comparatively. Famous last words.

As a last note, and more on the business side of things: I’ve also started the process of registering my first LLC and getting everything setup to start building my Steam page! I’ll of course announce it when the game is ready to be wishlisted, but I’m pretty ecstatic at the fact of having my own company (something I’ve always wanted) and a real product to eventually sell to the world! This is a big step for me personally in terms of feeling legitimate in this space as a solo developer.


Thanks for reading and following the development of TCPD!

What do you think about LATC's design? Are you excited to try multiplayer? Maybe you've got a recommendation for an arcade drifting or driving game I should check out for inspiration? Let me know!

Follow me on Twitter & subscribe on YouTube for the latest news on Tristan Cole’s Pro Driver!



elocnat logo