Devlog #3 - Bugs, Extermination and Toothbrushes
Author: Crossedkiller,
published 9 months ago,
[previewyoutube=2u6Mxh_3yUc;full][/previewyoutube]
Hello Rookies!
This week, we want to talk about the main characters of BIG SHOTS (after you, of course): bugs.
[u][b][h2]The Grunt[/h2][/b][/u]
When creating BigShots, we had a vision, Big Mechs and Big Guns, a fun game where the player can feel powerful. However, there is no way for the player to feel powerful if they aren't doing anything with those Big Guns. Enter the Grunt. The grunt was our first enemy, a perfect tool to make the player feel powerful.
[b][h3]Crawling[/h3][/b]
Most wave shooters opt for a simple enemy like a zombie from Call of Duty. We wanted to do something different, and when the idea of an extermination was flung around, we knew exactly what to do. And so, the Grunt came to life in the form of a bug, a nasty little bug that you, as the player, have to exterminate, and what better way to make the Grunt feel like a bug was to make them crawl?
Most of us don't like bugs; they are tiny and dirty and can crawl on everything from floors to walls to ceiling to your toothbrush or bed. Making the Grunt crawl gave them a nasty feeling, and killing these ugly bugs can make the player feel even better.
None of the publicly available pathfinding and navmesh solutions supported our idea, so we set out to make a custom navmesh solution. We used the A* as a base for our pathfinding, but the navmesh itself is another beast. First, we voxelize the entire game world using an octree, and then we analyze this octree to make it into an actual navmesh. Each (cubic) cell of the octree has six sides, so six possible areas where a grunt could walk on. We generate points on each side and connect them to the neighboring cells. This results in a proper navmesh that allows for the crawling behavior.
[img]https://clan.cloudflare.steamstatic.com/images//44740245/c6a50cae23f20da9171fa94d8dc08851e9821f84.png[/img]
Here you can see the crawling navmesh outlined in green, allowing the bugs to walk on the ground, walls, and even ceilings.
[b][h3]Bug Behavior[/h3][/b]
Crawling is not the only thing that makes our enemies, and especially the grunt, special; we needed something that could increase the stakes and the danger to the player. So we gave this grunt some special behaviors, but before we could do this, we first needed to make a system that would allow these bugs to behave. For this, we wrote our own Behavior Tree, enabling us to control the bugs. This way, we can also lay out our behaviors properly and ensure the bugs execute the correct behavior at the proper time.
One of the first behaviors the Grunt got after crawling was Attacking; what other way to up the stakes than to let the Grunts fight back? Next came the dash, a quick, scary attack that propels the Grunt right at the player, almost like a spider flinging itself at your face. Out of all the behaviors, this was the most tricky to make; we needed this dash to be fast but also slow enough so the player could react. We struggled a while with making this dash suitably scalable, but after a bunch of trial and error, we settled on a quick dash with a short charge up, which allows the player to either brave up and shoot the Grunt right then and there or be a coward and run for their life. The final behavior we added to the Grunt was a taunt to really spice up the player's aggression and drive to exterminate these bugs.
[img]https://clan.cloudflare.steamstatic.com/images//44740245/a26a222604f306fe6cd166da1774d5285766da63.gif[/img]
[img]https://clan.cloudflare.steamstatic.com/images//44740245/33100913a57a315c2fe0e7698acfaa6264bca3b2.gif[/img]
Here, you can compare the old dash (top) and the new dash (bottom). The new dash has a clear charge-up compared to the old dash.
[u][b][h2]The Flyer[/h2][/b][/u]
We all know that Grunts are nasty bugs that you would want to keep off your toothbrush, but they are not the only ones. After making the grunt, we noticed that a Big Mech tends to look down a lot when squashing bugs, and we needed a solution. Now, what bug is by far the most annoying? It is near impossible to kill, steals your blood, and keeps you up at night; that's right, the Mosquito. Everyone loves squashing these bugs. It is one of the most satisfying feelings in the world, so we brought them into Big Shots.
[b][h3]Flying[/h3][/b]
Since these mosquito-like enemies fly, we also needed a navmesh for these Flyers. After creating the crawling navmesh, we applied what we learned to a flying navmesh. The crawling navmesh is based on an octree, and we can use the same principle for a flying navmesh. We voxelize the world, and instead of looking at where colliders are (where the ground is), we look at where there is space. After connecting all empty spaces, we have a simple flying navmesh, allowing bugs to fly through the open air and narrow spaces.
[img]https://clan.cloudflare.steamstatic.com/images//44740245/a311af5536a16955100f86b8fd3d31bbbe69b83a.png[/img]
Here, you can see the flying navmesh outlined in blue, allowing the mosquitos to fly between the ground, walls, and ceilings.
[u][b][h2]Zig Zaggers[/h2][/b][/u]
To emulate the feeling of a genuinely annoying mosquito, we had to make the flyers move around con-stant-ly. We wanted the player to have trouble hitting these bugs so that when they do manage to squash a bug, it is the most satisfying feeling ever. The goal was to make the Flyer, and with their zigzagging behavior, the most hated enemy in the community. And we succeeded.
Zigzagging has undergone quite some changes; we noticed early that when a Flyer would zigzag, this would quickly interfere with its pathfinding on the navmesh, causing the Flyer's path to constantly have to relocate as an external force was moving them. To fix this, we fake the zigzagging of the Flyers by only moving their visuals; this creates the illusion that the Flyer is zigzagging without interfering with their pathfinding. However, things like these are never easy to do, just like how you can't hit a mosquito on the first try; this solution caused problems with interpolation and networking syncing between two players. Due to the constant zigzagging, the interpolation could barely follow the movements and would often skip frames, creating jitter and lag. To fix this, we simply zigzag the flyers locally, avoiding interpolation altogether.
[img]https://clan.cloudflare.steamstatic.com/images//44740245/34875fff43ea4094e438934b337c88645875319b.gif[/img]
Not only are they hard to hit, like a mosquito, but they can easily overwhelm the player by using their quick-firing stingers and fast movements if they are not dealt with promptly. So when you see one, be sure to kill them quickly, or you and your toothbrush will be sucked dry.
[u][b][h2]More Bugs![/h2][/b][/u]
We have two critters as a starting point, but we have managed to create four more bugs, ranging from cockroaches to beetles and even worms. Each one is nastier and scarier than the last. However, each of these bugs will be discussed in a future devlog, so be sure to be on the lookout for that! Enjoy a small teaser.
[hr][/hr]
[u][b][u][h2]Conclusion[/h2][/u][/b][/u]
This concludes our third BIG SHOTS Dev Blog. We hope you look forward to seeing the progress of BIG SHOTS, in the meanwhile, we will continue to work hard to make it even better!
-Mikail, signing out
https://store.steampowered.com/app/2666530/BIG_SHOTS/
[u][b]Follow us on our socials:[/b][/u]
[list]
[*] [b][url=https://www.tiktok.com/@bigshotsvr]TikTok[/url][/b]
[*] [b][url=https://twitter.com/BigShotsVR]Twitter[/url][/b]
[*] [b][url=https://www.instagram.com/bigshotsvr/]Instagram[/url][/b]
[*] [b][url=https://www.facebook.com/BigShotsVR/]Facebook[/url][/b]
[*] [b][url=https://discord.com/invite/4jddD6Xzne]Discord[/url][/b]
[*] [b][url=https://www.reddit.com/r/BigShotsVR/]Reddit[/url][/b]
[/list][i][b]Gear up, team up, and exterminate![/b][/i]
[b]The Big Shots Team[/b]