1. Cleared Hot
  2. News

Cleared Hot News

Theme Announcement!

I've always been a gameplay-first guy. I've button mashed my way through many a cutscene. My development of Cleared Hot has followed the same principle: Gameplay first. Find out what's fun, fill in the blanks later.

However, I reached a point where I needed a more specific visual style. What should the enemies look like? Where are these battles taking place?

I want the game to be reminiscent and nostalgic for people like me who grew up playing the Strike series, Battlefield, etc, but offer something new. I didn't want to make another "war in the middle east" game, for so many reasons. But I didn't want to lose that nostalgia.

Then one day I was talking to a friend and we had an idea. It has been 30 years since Desert Strike came out. What would the pilot from that game look like 30 years later?



We started imagining him as a grizzled, dusty old pilot, living in West Texas. Retired, but getting pulled back in to his old life.

Suddenly we both felt inspired. This felt like the right combination of grit, dry humor, and 90s action movie tropes. The main character's situation in life could mirror some parts of ours: we're revisiting our Desert Strike memories 30 years later. A bit older, a bit grayer (in my case) but maybe we still got it...

As far as how he gets pulled back in to the action, and what the specifics are, I won't spoil that yet.

Visual Style

As part of this theme, we created a new level, basing it on rural Texas / Arizona. Thankfully this coincided with hiring a 3D artist, which was a huge milestone. I've been using pre-made 3D assets for the game up until this point, just in interest of faster development. But now I had an idea of the theme I really wanted.

Luckily, I took part in a game jam with some friends a few months back and met Eron. After the jam we talked a bit and he decided to join the team. We have very complementary skillsets and he's helping me a ton on all kinds of visual aspects of the game.

New Level - West Texas

This level is still a work in progress, but we have a functional level we are building new missions for.



We also built a new homebase, pictured earlier, which is where you'll upgrade your helicopter and choose missions. It's a safe area that will change as the game progresses.

New Vehicles


What's a new level without some new vehicles?

[h3]Unmarked Sprinter Van[/h3]
This beast-of-utlity serves to drop off enemies around the map. They roll up, screech to a stop, and 5+ enemy NPCs get out.


[h3]Quad Bike / ATV [/h3]
Fast and nimble, but has low health.



It comes with 2 NPCs onboard: a driver and a gunner.

This is the first vehicle to feature NPCs using their own logic + decision making while onboard. The gunner runs through their standard behavior tree and decides if and when to fire their weapon.

This is the first step to having NPCs that can decide to enter vehicles and control them on their own. Imagiine seeing a bunch of NPCs run to get into a parked tank...



You can actually shoot the NPCs off the vehicle as it's driving. You have no idea how happy I was to get this working.



Thank You!

Thanks again for all of your support! There's a lot more content coming soon. This re-theme was a ton of work and will allow us to really get the feel we're going for. I can't wait to share more about the direction of the missions and story.

Don't forget to join the email list for additional info and beta releases https://clearedhotgame.com/email-list/

Choosing a Terrain System

Welcome back, devoted wishlisters. Thank you for taking part on this journey with me. Today we will cover a truly groundbreaking topic. The ground. Sorry for the pun.

Most games that take place in outdoor landscapes use something called a Terrain System. It's a way to describe and create the landscape in the level. I've been using a low-poly terrain system since the prototype days of my game, but I'm ready to build more levels and I needed to explore my options.

The weeks after GDC I went fully down a terrain rabbithole and evaluated all the major options inside of Unity. After a couple weeks of this, I was a bit frazzled.

The Gang Picks a Terrain System


[h2]WTF Is a Terrain[/h2]
In most games, the "ground" is not created the same way buildings or objects are. Rather than creating it in a 3d tool, like Blender, it's created in Unity, by using a terrain tool.

Most of these terrain tools use what's called a Height Map- an image where each pixel color (or brightness) represents height. So you can use a 2d image to form a 3d landscape. There are often tools to sculpt the terrain inside Unity, so you can quickly make changes when you're designing your levels.

With most of these you can actually "draw" onto the terrain. By drawing on the heightmap, you're raising and lowering the terrain.



You can also apply "stamps" to the heightmap, which is helpful for laying down standard mountains or valleys.



But again, the heightmaps are represented by images. For example, this one is a heightmap stamp of a mountain ridge.



[h2]Pick One[/h2]
There are tons of terrain systems you can use in Unity. Here are the assets I evaluated:
  • Unity Terrain (the built in system). Overall okay but low on features and not very performant
  • Polaris Low-Poly Terrain - a low poly specific terrain asset, faster performance in-game.
  • Gaia - A fully featured terrain system for big worlds and realistic terrain
  • Microsplat / Microverse - A better shader and generator for terrain.

What do I actually want from a Terrain System? My requirements are:
  • Has a Low-Poly workflow, in order to fit the style of the game
  • Fast performance in-game.
  • Options for procedurally generating terrain in the editor (not in-game)
  • Procedural placement of vegetation
  • Level design tools- able to flatten terrain and place prefabs, roads, etc.

After exploring my options I decided to stick with the Polaris low-poly terrain, since they recently released some level generation features.

[h2]Procedural Generation [/h2]
Since we're using a heightmap image to create the terrain, our procedural generation system must create some kind of an image as well. To do this, we link together nodes that either create or modify the terrain heightmap in some way.

To start with a simple example, here is what happens when we take two sources of "noise" and combine them to form a bumpy ground.



[h2]What Do We Want? [/h2]
After playing with this for a bit, I realized I should put a helicopter on the terrain, put some enemies, and actually play on it. This sounds so simple and dumb but it immediately made a few things clear:

  1. Rolling terrain sucks because an isometric camera doesn't show depth well.
  2. It's had to land on areas that aren't flat.
  3. NPCs and vehicles need to traverse the map and complicated features make that hard.
  4. You can't actually see any mountains in the distance because of the isometric view (duh).
  5. When enemy trucks and cars launch off hills it's really cool.

Given this, I realized the most "fun" terrain is one that is:
  1. Is really clearly either flat or not flat.
  2. The height changes happen at discrete intervals so you know if you can fly over them or not
  3. If height changes are "rampy" then cars will fly off them and npcs can still walk up them.

Now that I had some goals, I started building out a node graph that would generate our ideal terrain.

The resulting node graph.

Each major step of procedural generation.

Add in some vegetation...

The final product, with texturing based on slope.

[h2]Shoot Stuff Check[/h2]
Does it feel right when you're shooting stuff?



Yes.

[h2]Thank You[/h2]
As always, thank you all for your support! I can't wait to share more of what we've been working on. Stay tuned!

If you want to keep up to date, join the email list: https://clearedhotgame.com/email-list/

Imperfect AI is Fun AI

Welcome back, intrepid pilots and nostalgia seekers. Today we have a deep dive into the world of NPC AI. But first allow me to tell you a story about the first AI behavior I ever wrote.

We have to go way back to a time so shrouded in nerdiness and embarassment that nobody in their right mind would ever revisit it. Computer camp.

Yes, 13 year old me learned to program at a week long camp surrounded by other uber nerds whose collective abilities quickly showed me I was not the smartest one in the room. Where I learned that you could actually be tired from just thinking all day. Where I learned that losing in Risk really sucks.

Our first task was to create a tic-tac-toe game in C++ (I really wish Python existed back then), and then create an AI player who would never lose. It was a monstrous if-else disaster of listing every possible case of what the AI should do. Eventually I got it working and it would never lose. It was a "perfect" AI player.

Soon I discovered that the game was no longer fun to play. Something about that stuck with me; a fun opponent is imperfect. If you've ever said "the AI is cheating" in a game, you know what I mean.

So the goal is to make AI that is human-like, instead of god-like. Well, let's start with Behavior Trees.

[h2]Behavior Trees[/h2]

Behavior Trees are basically a flow chart of decisions and actions. For example:

Thank you Zanid Haytam for my fav example of why I spend too much money on ubereats.

My first take on AI in Cleared Hot was pretty simple: If you see an enemy, shoot them. If you have a destination, walk towards it. If you were a friendly unit and the helo landed near you, get in. It was governed by a Behavior Tree.

Sounds pretty simple, right? Well here is what the behavior tree looked for this simple behavior.



The real culprit was this: Combining State and Actions in one tree. For the non-programmers, state is something you have to keep track of about the world, that will determine what you do. For example: Am I currently attacking, am in the helo or not, etc. So every time the tree was executed, you would have to dive into the right sub-tree for that state.

[h2]Behavior Trees inside State Machines[/h2]

After experiencing enough pain with the behavior tree approach, I stumbled upon a GDC video. In this talk, Bobby Anguelov mentions an approach that uses State Machines for... state, and Behavior Trees for actions. This is based off his experience creating AI for the Hitman series! Pretty cool.



This approach made so much sense to me that I figured it was worth implementing before I added anything new to the NPCs. So I build a simple version. The NPCs have a small set of states:
  • Idle
  • Attack
  • Flee
  • Hit
  • Dead


Each state contains it's own behavior tree, that is set up when entering that state, and cleaned up when leaving. These behavior trees are just actions. They aren't making decisions and they aren't running any sensors. They are just executing actions. This cleans things up a TON. Look at the attacking behavior tree, which is currently the most complex one:



The really cool thing about this is that you can update your knowledge separate from running the behavior. Previously the NPCs were doing raycasts everytime they executed the behavior tree, but now they only need to update their knowledge base at the speed of a human reaction, and yet they can drive their behavior trees much faster.

[h2]Perception and Knowledge[/h2]

In order to make decisions, the state machine needs some knowledge of the outside world. This is done by implementing "sensor" scripts that allow the NPC to see or hear things in the world. Each NPC updates their knowledge base about every 200-250ms (typical human reaction time) and will change state if needed.

Credit: Bobby Anguelov's Game AI Basics video

These sensors react to "Stims" or AI Stimulations, which are just things you can drop in the world for an action that you want the NPCs to know about. So far I'm using these for: shots being fired, shots impacting a surface, explosions, all NPC and player positions, etc.

A trail of minigun bullet impacts create "Stims" in the world that NPCs can see and hear.

The game also adds some randomness into their update timing, so it tends to spread the processing time across frames, making the game run smoother. I've yet to fully stress test this, but I've put about 50 NPCs in view at once with no problems.

My favorite example of new behavior is the "RPG Warning". When an enemy is about to fire an RPG (or other high damage weapon), they create a "RPG about to fire" Stim. If another NPC can see that, they will play an RPG warning voice line (RPG!!!) which also creates an audio stim. If another NPC sees the RPG enemy but already heard someone else yell the warning, they won't repeat it.



All of this makes it possible for the NPCs to react to things in the world. Like being shot at.



[h2]Thank You[/h2]
If you read this far, you need to be subscribed to my email list! https://clearedhotgame.com/email-list/

This is where I will release the first play test builds! I've already been interacting w some of you over email. Thanks for your thoughts and feedback, your emails are super motivating.

I hope to have a rough schedule for the beta soon.

Thank you all for your support!

Right in the (Game) Feels

I am back to working on the hard to define task of "game feel". This involves making the things you do over and over feel… good.

One of my main playtesters is a friend I've known since 1st grade. I've played every generation of video game with him. We've been comrades in arms in n64 goldeneye, being repeatedly gunned down by his older brother, I think we actually got into a fight one time over Tekken3 or maybe some Dreamcast boxing game, and we've shut down entire battlefield servers as helicopter pilot & copilot.

So when I send him a build, I can easily tell if it "feels good" or not. The last time he played, it was clear something was missing from the minigun. He sent me back a gif from Blackhawk Down and said "this is how I want to feel". Alright. Mission accepted.

Game feel is more of an art than a science... The best way to improve it is just to experiment with a bunch of things.

So let's get our paint out and Bob Ross this minigun, shall we?

lol I am getting SNES controller vibes from that paint palette

Making the minigun feel more powerful

[h2]The Before[/h2]

Looking back at this gif it's hard to tell I'm shooting. And yes this was an older build with a different camera view.

[h2]Screen shake + Barrel Flash Effects[/h2]
Screen shake is a common game feel tweak- you make the camera move slightly in reaction to powerful events in the game scene.



So much better already. even without audio it's clear when you're shooting.

Thankfully the asset we're using for camera work (Cinemachine) has a nice system for adding screenshake impulses to events. All we have to do is define the rotation + position waves that shake the camera.



As you can see, the camera shake involves 3 different frequencies rotating on the 3 separate axes. This gives a good shake effect that feels natural without having a weird oscillation in only one direction.

I decided not to use any position shake, since that tends to be more jarring than rotation.

[h2]Splash Damage + Spread[/h2]

Part of the issue I wanted to fix was how lame it felt when you shot right next to an enemy, and nothing happened. The easy improvement here was to add splash damage to the rounds. So now when a shot impacts a surface, it tries to add damage directly to what it hit, and then uses the existing splash damage system to add damage to anything in a 2 meter radius around it.

The other part of this was that the rounds would go EXACTLY where you were aiming. This sounds like a good thing, but it looked and felt strange. So I added an angle of spread that can be adjusted



[h2]Better Tracers[/h2]
Ok I have to admit something. Before now the tracers didn't actually go where the bullets were hitting. Forgive me. It was good enough at the time but not good enough anymore. Even worse, they would go through surfaces that stopped the bullets. This irritated me for awhile and I was so happy to fix it.

Now the tracers actually follow the path of the bullets, and stop where the bullets stopped. This means the spread of the minigun is directly visible in your tracers.



[h2]Aiming Parallel[/h2]
Previously both miniguns (left and right) would aim towards a single point.

By keeping them parallel, you increase the actual area covered by their shots, and I think it just looks better too.

I also improved the look of the lasers which designate their aim, and added small laser dots to the end. This makes it clear to the player where the shots will land, if they're blocked by an object, and it responds slightly to changes in the helicopters angle.

Before After

[h2]NPCs are now scared of your bullets[/h2]
Another way to make something feel powerful, is to make the NPCs afraid of it!



This took an entire rewrite of the NPC AI. Which was on my list for a long time and this was reason enough to do it. More on this next time, it will probably be the topic of the next devlog.

Each NPC has sensors that it can use to make decisions about what state to be in. If they see or hear a shot near them, and don't see a current target, they will run away. This uses a common method of adding AI Stimulations or "Stims" to the world that each NPC can choose to react to.

A fun bug that exists currently: The NPCs don't differentiate between their own shots and their enemies shots. So they can essentially shoot and then startle themselves, and run away. I'm working on a fix to give them a bit more courage.

[h2] More Bass [/h2]
The minigun sound effect doesn't have much in the low frequencies, and it's hard to really distinctly feel when the individual rounds are being fired. I experimented with adding a small bass pop when the gun actually fires each bullet. It's subtle, but it feels a lot better.

I don't have a gif for this. ;)

[h2]Recoil[/h2]
This one is subtle... I wonder if you noticed it in the above gifs? The minigun has a bit of recoil that it exerts onto the helicopter when firing. Notice how in the before gif, the helicopter is totally stationary, but in the other gifs it's moving slightly backwards.

I think I will use this more for the minigun upgrades in the game. If you unlock a more powerful gun, it might have higher recoil.

In Summary
happy bob ross with trees for hair is a vibe

Tell your friends!

Know someone that would like this game? Ask them to wishlist it + follow here: https://store.steampowered.com/app/1710820/Cleared_Hot/

Wishlists help me a ton. And thank you all for your continued support. I've heard from a bunch of you over email and twitter and it helps a lot to know you're along for the ride!

A F*cking Tank

Sometimes when I've been hard at work on the "guts" of the game, I start to crave something that's a little more tangible... something that I can shoot. Even better if it shoots back.

So after working on an entirely new upgrade system, with it's fair share of head-scratching bugs, I decided to treat myself to a brand new unit: a f*cking tank!

Why is the tank shell green? I was tired of gray.

Movement


I had this idea in my head of a fully physics based tank, that bounced around from recoil and could be picked up by a strong enough helicopter. How much does a tank weight, anyhow? More on this later.

Let's start with movement. This thing has to be able to roll around and climb over objects, but it's not quite the same as the 4 wheeled vehicles in the game, like the pickup truck. Oh and it has to be simple, because I want to be able to have a ton of these in one level.

I decided to try an approach to model the tank tracks with a series of wheels.


Each one of these wheels uses a raycast (like an invisible laser...) to figure out how far the ground is. Then it applies some forces based on this distance. One force is applied upwards on the tank, simulating a car suspension. The other resists moving sideways, like a tire or tank tread would. You can set the friction how you'd like, so you can make it as sticky or drifty as you want.

You can see the suspension forces in the Unity editor- the red lines represent how much force is being applied upwards from each wheel.



You can see it doesn't have much trouble getting over obstacles :)

Shooting


Oh and yes, it can shoot! One of the great things about this stage in the game is that I'm starting to re-use core pieces of code. The tank uses the same code to shoot it's projectile as does the helicopter, and the NPCs who have RPG launchers.



The tank shells will do a lot of damage, but you should be able to dodge most shots.

Yes, you can pick it up


An M1 Abrams tank weighs about 55 tons. Pretty heavy. Each helicopter in the game has a max upwards force it can give, and the object you're carrying exerts a force on the helicopter. By default, this Little Bird helicopter wouldn't be able to move a tank. It can be tuned a bit for gameplay, so maybe it should only be able to drag a tank, but a larger helicopter could carry it. This is TBD based on what makes the gameplay better.



GDC 2023

I will be at the Game Developer Conference in San Francisco this year, March 20-24. Come say hi and I'll give you a sneak peak of what's to come.

Email List

If you've read this far, you should be on the email list. I consider you an early adopter and I'll be asking for direct feedback on the game's direction soon. I want to hear from you! The game's at an early stage where you can have an impact on what comes next, so take advantage of that.

Join the email list here: https://clearedhotgame.com/email-list/