At the end of the last milestone post, I mentioned that we were going to focus on technical challenges for this milestone, but we realized that we were jumping the gun a little. One of the tasks we were planning was to stress test Unity with how many characters we could render on screen in a scene. We decided to push this off to a later date as we don’t have any finished characters or level art….which means a stress test at this point would be pretty useless. So for this milestone, we decided to focus on experimentation, both technical and design.
Enemy Vision Cone Logic
We are currently playing around with the idea of our enemies having visible vision cones. Our original idea for how these would function was something like this:
- Detect player
- If see player for X seconds, shoot
- If lose sight of player, look at last known location for Y seconds then return to regular state
This worked fine, but we weren’t finding it to be very hard or challenging and we were finding it a little hard for players to understand what was going on (probably more so due to our visual representation more than the logic)
Our level designer, Chris, suggested a different idea. We added a specific area directly in front of the enemy that would act as an “instant death” area. This area does not change and only moves based on the facing direction of the enemy. The remaining area is used to detect the player and then the enemy will rotate towards the player, trying to get the “instant death” area to pass over the player.
In our initial testing we have found out two things:
- This makes the game much more challenging because the player can’t just try to escape in any direction.
- Players have been able to “get it” much more quickly then with the previous version.
A lot more play testing is going to be required to figure out which one will stand the test of time, but so far, this was a very promising idea.
Player feedback improvements
This next feature was a pretty easy one to pull off, but we spent some time adding visual and audio cues to key moments in the game to help the player understand what the enemies were doing in the scene. Most cues were based around enemies detecting the player and for now we basically just followed Metal Gear Solid’s lead…
Vision Cone Visual Representation
For this we started looking at what other games had done and we decided that we definitely wanted something visual to represent the vision cone in the world. Metal Gear Solid is known for having vision cones on the mini-map only and we wanted something more like Volume by Bithell Games so that the player knows exactly where and when they will be detected.
Volume by Bithell Games
I was able to find some code that essentially does this (just not as well as Volume does) thanks to the Unity community! It still needs a lot of polish, but we were able to get a really basic visual representation up and running quickly that represents the design we discussed above.
The next technical experiment we wanted to play around with was a streaming level solution. I’ve written a streaming level system in the past for a custom C++ engine and luckily Unity gives you all the tools needed to get this up and running pretty quickly.
As discussed in the above video, there are still improvements to be made, but we used this tech to try streaming a few actual levels in succession and it really improved the overall feel of the game by not having any loads in between levels.
Next milestone, we will be focusing on white boxing more levels for play testing and getting a few more types of enemies in the game. We’ll also be trying to narrow down a level or two to use as an art test. This will hopefully let us start to nail down the art style of the game and begin progressing towards a legit vertical slice of the game.