Lately I've been obsessed with adding procedural generation (PG) to the game. While I know that, when shoehorned into a game, PG can have disastrous effects, I still think that it would be a fun challenge that would add a cool amount of replayability to the game.
What I'm working on now is heavily narrative based, but many of the mechanics are similar to a light survival stealth game. So, I'm thinking that if, aside from the scripted intro/tutorial sequences, the city that the game takes place in, is randomly generated each playthrough, it would make the game less linear. My only worry is that if levels are randomly generated, it would lack the polish of levels being hand laid out.
The way I am trying to overcome this is by creating large 45x45 (Unity meters) tiles with multiple buildings and interiors, all hand designed. Then, I would Instantiate them along a 45x45 grid, with random rotations in 90 degree increments. Meaning that the city would be different every time, but each city block would be really good looking and won't have the empty computer generated feel. This would also mean that, if I align everything correctly, I can essentially have an endless city with nice streets and even underground areas.
BUT, because it's a VR game, performance is extremely important, so I'm probably only gonna have a 5x5 tile grid. Because each tile is 45x45, it would be a lot larger than it sounds.
The other issue is lighting. Because I want it to be generated at runtime, I can't rely on baked lighting to increase the framerate. Each tile would need to have one point light in the center to illuminate the area, and that's not including the directional (sun/moon) light over the entire map.
In any case, for now I'm working on perfecting the intro sequence, and making sure the script and mechanics are solid, then I can move onto the rest of the game.
Thanks for reading!
Building off of what I talked about two posts ago, I just wanted to give a little update on the VR Sword Combat.
I mentioned last time that my system, when paired with something like FinalIK can be used on humanoid characters as well. This is absolutely true, but I found a better, simpler way of doing it. It's a simple script you apply to the hand bone and, after setting some parameters, the arm will behave like it should. Additionally, it still respects animations with no changes.
I originally thought I'd have to use an Avatar Mask to mask off the arms that are to be moved with IK (not animations), but luckily I don't even have to do that!
I am still working on it to make it the best it can be before release (and I still have to resolve some dependencies on VRTK 3.x) on the Asset Store.
Thanks for reading!
As promised, here's another blog post about the music of the upcoming VR game!
This will be short and sweet, but it is important to note:
Each piece of music in the game is expertly crafted by my brother Eli Mantell, to match the tone of every scene.
This ranges from every cutscene, trailer, interaction, combat sequence, etc--all have their own unique backing track that, hopefully, matches the mood. With the upcoming announcement/teaser trailer, I hope you will all get a sense of the great audio work to come...
Thanks for reading!
So after taking a little time off to work on other important matters (see future post!), I finally got back to working on the new game, only to see that a new version of Unity is out -- Cool!
But, long story short, when I tried updating the project, it broke many things that were important to my workflow.
Luckily, after the unfortunate Oh Captain incident, I had version control setup via the Github Desktop app, and it has served me well in the past, so I wasn't too worried.
BUT, for some reason it wouldn't let me revert to an earlier commit! Granted, at this point I still wasn't fully aware of the way the Git system works.
Now, everything is working fine except one thing: Unity's tool for recording cutscenes and exporting them as MP4 files--Something I am using heavily in my quest to make the perfect teaser trailer. It's throwing a bunch of errors, and only recording the first frame of the cutscene. I updated it to the newest version and haven't tested it yet. Hopefully it will work now.
On Friday I have another post about the really cool music in the game. Stay tuned for that!
Thanks for reading!
So, without any sort of consistency to this blog, here's another post!
Lately I've been obsessed with getting sword combat in VR just right. BUT, when I say "just right," I don't mean the most realistic. GORN's combat is great but it isn't realistic in any way. Blade and Sorcery's combat is also great, but it's too realistic for what I'm going for, so I have to work right between those two.
Any humans in my game use guns to fight, but can still be killed by a sword or a stealth kill. What will have melee weapons, however, are the robots. They are sort of like the Lightsaber-Weilding robots in Vader Immortal (which I highly recommend!), but fit more into the world I am creating.
With some help from some inspiring articles on VR combat on the internet, I think I've found a good middle ground.
Essentially, enemy sword weapons detect players' swords in a specified range and position themselves in such a way that effectively blocks the player from hitting/stabbing them.
In each blocking movement, the enemy tries to swipe their sword across the player to damage him/her, and it's up to the player to block the enemy back.
None of this would work without a good sword physics collision system, and with a bit of work, I've got a pretty good way of doing that too. I won't get into it in too much detail for reasons I will get into,*** but the gist of it is that when the player picks up the hilt of the sword, the blade follows it with a configurable joint that is setup to collide with objects while still not moving away from the player's hand unless it really has to.
Right now the swords just kinda hover in front of the placeholder enemy bodies, but when I'm finished with it, the swords will be hooked up to an inverse kinematics arm system attached to the body. Because these are robots we're talking about, I can have the arms look like whatever I want, coming out of whatever I want, this isn't a problem, but what's so cool about my system is that when paired with something like Final IK from the Asset Store, this can easily be applied to human enemies as well.
*** Now, the reason why I don't want to get into it too much right now is because I'm considering taking my entire VR Combat system, including the robot IK arm, the combat, the player sword, and a few other bonuses (including my collision sound system for VR and more) and putting them up on the assetStore for anyone to use, which is pretty exciting! :D
The only problem is that right now everything is deeply connected to VRTK 3.x. While this works great for me, it might not be so great for anyone else using a different VR interaction system. So if I want to publish it anywhere, I have to make it VR-Framework-Agnostic, which is a little more work. In any case, we will see!
One more thing: I'm considering turning all previous blog posts that show major features into a few video devlogs with clips of what they look like in game. So be on the look out for that!
Thanks for reading!
Yes, I'm back!
Development has halted for a little bit due to technical difficulties with my WMR Headset, so after much tinkering, I've decided it was best to move on with newer tech.
After much research, I settled on the new Rift S headset, and I gotta say... this thing is awesome. The lack of external sensors is always great, I've had no issues with the tracking so far, and, despite what everyone else says, the audio is pretty good too!
The problem now is that I have to make a choice: Do I stick with targeting SteamVR, or move on to using the Oculus SDK. I tried just using SteamVR, but this time in Oculus mode, but it caused odd delays when picking up and dropping objects, which basically made throwing impossible. I found no mention of this issue online... except for one random comment on one random YouTube video. Thanks, Google!
Since I've been using the VRTK Unity Package for my VR development, I can actually target BOTH SteamVR and Oculus. Down the line, I'm gonna have to get a tester to mess with a demo on Vive or WMR, but for now, the Oculus SDK + VRTK is working pretty great.
I'm having trouble getting the hand animations working, but everything else works fine. I have no doubt that I'll be able to fix it soon enough.
In the game there are certain objects that you can throw line boomerangs. Kinda like ninja stars--but not ninja stars.
Originally I had the player hold one, then press a button to launch one spinning, but after the switch to Oculus, and because the input mapping are a bit different, I found a really simple solution:
Add a multiplier to the force of your throw. This means that all the player has to do is flick their wrist and the object will spin out of their hand in a really satisfying way.
More info to come!
Thanks for reading!
For the past few weeks, I've been working hard on making a game environment that looks and feels like the final game should. I plan on putting the mechanics I finished in the blockout scene (mentioned in a previous post) into this scene and have a pretty cool vertical slice to release for free.
With this demo release, I, of course, will be announcing what the game is and overall just more info about it.
In putting together this environment I'm met with a few challenges:
The first being that in a greybox scene, it's very clear where you can and cannot go--that's the point, it's a basic prototype. But, with a finalized game environment, the design of the level itself has to educate the player on what to be doing, while still not making the player feel restricted.
This is especially difficult in a city map, where I only want a small section to be explorable, without making the player want to see other places that they can't access at that moment.
The other challenge is making the level design work hand in hand with the mechanics. Just because a level looks great, it doesn't mean it fits the way the game plays, and vice versa.
Especially in VR, where you can't stop the player from sticking their head in everything, AND a game where you should be able to run and jump wherever.
With some trial and error (and lots of rebaking lights!), this area seems to be coming together nicely.
Thanks for reading!
After messing more with the grappling hook (solving some issues, causing more), I've decided to take a bit of a break from it. From this point I've started working on the weapon system. Melee weapons are going to be next, after I finish the ranged weapons.
The problem with VR weapons is that you can't just hold down left click to shoot, and press R to reload. You need to have physical interactions. Yes, we can just add a gun object to the players hand and have them shoot it, but I want more than that.
For ammunition, there will be reloadable magazines that you have to find and use to add ammo to the guns, and hopefully, if I can get this right, you can slide down the top to cock the gun in place.
Instead of instantiating prefabs as bullets (this can be taxing on performance), I'm going to be using a raycast.
Because I'm using VRTK for my object interactions, there are multiple ways to handle shooting input.
I've messed with many of them, but I'm trying to find the one that has the best compatibility with existing functions.
I can either extend from their base InteractableObject class and just override the "OnUse" method, but this hasn't been working for me for some reason. I can also just subscribe to the use method, but this proved tedious to add to each usable object and I got fed up with it. Now I'm just checking if "TriggerPressed" is true in Update(), but the problem is this won't allow me to change the use button in the future. I'm gonna continue messing around with this to find the best way to do this.
Additionally, I've added a page on the site for my brother and composer Eli Mantell where you can listen to the entire Oh Captain VR soundtrack. If you want to use any of it, please contact him via the form on the page!
Thanks for reading!
Yes, once again there's more news about the grappling hook--who knew something so simple would generate so much blog content! Also, in the future, I hope to structure blog posts in mini sections like you see below:
Anyway, after messing with it some more, I struck a good balance between using the grappling hook, and climbing the environment.
Now only certain objects can be hooked onto. These include things you wouldn't be able to reach by just climbing.
The way I limited this is as follows: When holding the grappling hook, the hook part will be either red or green. When pointing at an object that can be grappled to, the hook will turn green, and the object will highlight yellow. This makes it clear what can and cannot be grappled on. This works perfectly. Because now you can't use it at any time (and therefore the object is listening for a controller trigger press at every frame), there is less bugs with the other inputs--though it still needs to be worked on.
I also changed the jump controls from the grip buttons to the touchpad buttons. Now you can hold one of them to move (walk in place, to put it simply), and immediately push the other touchpad at the same time, and pull back to launch yourself in the air. This makes it much easier to run, jump, land, and continue running immediately after.
All of this, in combination with the enemy AI, works really well to get around the environment, and hide from the enemies' field of view. Depending on the enemy's range, you can run away from a melee attack (sword slashes), or try to dodge projectiles being fired at you.
The primary way of getting around in this game is by walk-in-place movement, but I'm also working on a mechanic that relies on teleportation as well: Being that it's a stealth game--Oh, did I not mention that it's a stealth game yet?--one of the objects you can have in your inventory are Flash Bangs. Kinda like Batman. Or ninjas. Or both. Whatever.
The way they work is as follows: You grab one from your inventory. When you grab them, time slows down to 0.25 speed, and a teleportation cursor appears. You chose where you want to go, and warp there in a cloud of smoke, and time goes back to normal speed. This is essentially a special ability that will allow you to get to places you otherwise wouldn't be able to.
. . .
Once all of these are fully prototyped and work the way I want them to, I will be moving onto the actual level design, moving all the mechanics into what will be the actual game.
P.S: The image in the last post is a screenshot from one of the test scenes I made. It's cool, but the final game will look even better. :D
Thanks for reading!
Okay, so, first of all, yes, I changed the site look. I got tired of the old one and found one that I like better.
But, on to the more important stuff:
I am almost finished with the enemy AI! I've been working on it for a while and am super proud of what I have at this point:
There are three types of enemies: melee, ranged, and "flier"
The melee and ranged enemies are self-explanatory (one fights close up with hand weapons, while the other shoots from distances), but the "flier" is something different (excuse spelling, I wasn't really sure what to call it internally!)
It moves around the waypoints in the same way the other ones do, but at set intervals, it will fly up to the highest point, survey the area, then fly down. In the game, the player can run and jump on objects of different heights, so the enemies will react to that and try to fly up and shoot the player down. In VR it is not only quite nerve-racking to suddenly see the flying enemy coming up beside you as you're climbing, but it's a ton of fun to shoot them down from the sky as well.
I also worked on the interaction system a bit better. Now, objects that can be "used" will stay in your hand until you find an acceptable place to put them, allowing for the trigger button to toggle actions, such as shooting a gun.
Along with this, I've reworked the grappling hook to play better with VRTK (Virtual Reality ToolKit), and now it works so much better!
Instead of allowing the player to grapple onto anything, I've decided that it can only be used on certain objects you couldn't just jump to, like cranes above you, etc.
One of the next things I will be working on is a collision sound framework.
In VR, it's extremely important to make the world as immersive as possible, and this includes sound.
While music (more about this later this week!) and ambiance are easy to implement, but with so many objects moving around the scene, most of which are controlled by the player's hands, it's hard to have a single audiosource controlling all of them.
So, I've come up with a way to mark different objects as being "made of" different materials (such as wood, metal, stone), and depending on what type of object is colliding with it (while taking into account how hard the object hits the other object), a certain sound will play. While it's all still conceptual right now, I have a feeling that when I write it up tomorrow it should work properly.
More info to come about this awesome game! :D
Thanks for reading,
So, I originally wanted to implement a feature from Oh Captain VR into this game: the grappling hook.
I thought it would add another stealth element to the game, but I ran into two problems:
1) It made playtesters only want to use the grappling hook to get around, not the locomotion system I talked about yesterday, and made the game too easy and not very fun to use.
2) While it did work, having the physics object being usable in the player's hand made jumping wonky and inconsistent, which we cant have, obviously.
I'm considering just removing the grappling hook altogether because of these issues, and instead making the focus on stealth combat.
Thanks for reading,
As I've mentioned previously, locomotion in VR is always a challenge. For games with a smaller game area, you might not need any form of movement; Games with larger worlds, however, have to either use teleportation or artificial locomotion (when the player's head camera is essentially moved. Similar to how FPS cameras work, just in VR). Teleportation can sometimes break immersion, and artificial locomotion (AL) can cause motion sickness, so what do we do?
Well, after much trial and error with different types of movement systems, we've decided on "Walk in place" locomotion. While this might sound ridiculous (and the implementation in many games have been quite silly *ahem* LA Noire VR *ahem*), but with some tweaking, it can prove to be really cool. It's highly sensitive, so you don't need to swing your arms wildly to go anywhere, you can sorta just sway in place to move. Because your body is actually moving in the real world, there is less vestibular disconnect when the camera is moving. (Which causes motion sickness.) As someone who is usually extremely sensitive to VR motion sickness, I must say that it works really well.
The other issue is jumping: I've noticed that very few VR games have a jumping mechanic. Doom VFR has a really good jumping implementation, where if you move your hands up by your head quickly, you'll jump. This works well and feels great to do, but its easy to confuse normal movements for jumping movements, and that gets annoying fast. What I've done with this game is if you hold the grip buttons on both controllers at once, then essentially pull yourself into the air, you'll jump. Almost as if you are propelling yourself from an invisible slingshot. The amount you jump is directly proportional to the amount you pull yourself, so it's easy to get the hang of and is very accurate when jumping from building to building (*spoilers!*).
In terms of objects, unlike in Oh Captain VR, where objects just become a child of the controllers, allowing them to clip through other objects, the objects in this game track with the controller movement, meaning that they move with physics and collide with each other and other objects in the scene. This means you can duck behind cover, holding a gun against walls/corners/counters and shoot blindly at enemies--it's a ton of fun.
I'm super excited to share more info with everyone as the development progresses!
Thanks for reading,
So, after the unfortunate debacle that was the demise of Oh Captain VR, I started working on my next project. Though I won't reveal what it is exactly just yet, it is something that I've wanted to do since I first started working with VR and I am super excited about it.
I do have a level mockup that I will show sometime, but I've been focusing on finalizing the core gameplay mechanics of the game in a "greyboxed" level.
It has a heavy focus on parkour in VR, with running and jumping across rooftops, along with shootouts, stealth elements...flash bangs, telekinesis, steampunk robots, and more... As someone with a surprisingly weak stomach for VR motion sickness, the way locomotion is handled is important to get right. I'll be explaining exactly how it works in the next post.
It's gonna be super cool, I promise...
PS: Yes, I know there's the annoying "Weebly" branding on the site. As of a few days ago, they changed something that breaks the custom code I added to remove it. I'm working on a fix currently.
Thanks for reading!