The Schick Hydro Indie Game Jam

Last week Schick Hydro partnered with Playcrafting to put on a indie game jam at Simple Machine in New York City. The planning and announcement for this jam was confidential until a little ago, so I could not talk about till recently.

We came up with a cool game called Calkarious.

Calkarious is a cooperative top-down shooter where two players must defend a powerful brain coral under constant siege by bioluminescent creatures.

Calk1

Set inside a massive sphere of water in deep space –– Calkarious
involves rapid decision making and quick maneuvers as players struggle
against 6 different colored enemies.

Calk2

Each enemy can only be killed by a shot matching its own color, and players
will need to constantly switch up their attacks to survive.

GFT+PC

A third player can even take control of the brain coral itself (with the mouse), and
change its color to absorb similarly colored enemies. Absorb enough
enemies, and you’ll be able to release a devastating pulse attack.

GFT+PC

The brain coral can only take three hits before it is destroyed. Players need to work
together to defend this magnificent coral for as long as possible and
achieve the highest score.

e44xxR

The team for this game jam comprised a group of rockstars game designers and developers! Our team consisted of three of Eos Interactive’s team members Jose, Bobby and John. We also had a the VR game design rockstar behind Paulo’s Wing , Kevin Harper. Last but not least, the last member of the team was me.

One the most interesting constraints we had for the game jam was getting our content to work inside of an arcade cabinet. The arcade cabnet was called Polycade and it was made for creating custom games on a custom cabinet.

lucy-molly

We wanted to use every button in the arcade cabinet for our game.

Polycontrols Our goal of utilizing every button led us to the game mechanic of shooting enemies with the corresponding color and moving the brain coral with the ball on the arcade cabinet to get the brain coral out of danger.

 

Calkarious is free to play today on itch and will be available to play in an arcade cabinet, the best way to play it, on December 15th a Playcrafting’s 2017 Bit Awards.

Screen Shot 2017-11-26 at 3.13.20 PM

Come root on my first VR project Don’t Look Away for the Bit Awards.

Any who this past weekend was fun but I cannot wait to return to Museum Multiverse, my VR puzzle platforming epic! I have had so many cool things to show everyone about the game soon!

Advertisements

A New Way to Hear? fmod in Prod

In Museum Multiverse I knew to make the project truly come together I would need an amazing soundtrack to captivate the player. Thanks to Niko Korolog and his work with adaptive music in my game I now have music that will suck the player in from the start to end of the demo. Niko used a program called FMOD to create an adaptive soundtrack. FMOD is a sound effects engine for video games and applications developed by Firelight Technologies, that play and mix sound files of diverse formats on many operating systems, to learn more about this awesome application visit their site.

Screen Shot 2017-08-10 at 1.18.09 PM.png

This program gives me the control to shut off layers of music at my choosing and turn on other ones through code. To get started on learning this magic I’d recommend this awesome tutorial from FMOD on integrating this middleware into Unity.

I cannot wait to continue incorporating this adaptive soundtrack into Museum Multiverse.

A Mini Game Becomes a Game

Well it’s been a week, and we’ve been able to implement decent rotation of the game objects on the X and Y axis using the Gear VR’s touchpad. Now when we hold onto objects using the trigger, we can swipe left and right to rotate them on the Y axis, and swipe up and down to rotate them on the X axis. We’ve even been able to pick up the rotation of the controller itself to rotate the objects on the Z axis whenever we roll the controller with our wrists. This motion gives instant feedback and a real sense of connection to the objects.

Screen Shot 2017-08-07 at 12.00.50 AM.png

After we implemented these basic controls, we decided to finally put some of our friends in a room with simple rigidbody objects, and told them to experiment and explore as much as they wanted. One of my 3D modeling friends, Jose, was excited to finally see some of the models he made inside of a game.

Screen Shot 2017-08-07 at 12.01.00 AM.png

After switching the headsets and controllers back and forth between our other game developer friends Andy and Rob, Jose noticed that some of his models were missing. When he thought that they might have been glitched outside the room, Rob said that they weren’t glitched at all, and that he hid them somewhere in the room. He then challenged Jose to find them in two minutes. This led to all of us hiding and finding objects for the next half hour or so. We ended up getting pretty sidetracked. It was simple, but in a refreshing sort of way. Rob commented how this should just be a game in its own right and we all sort of agreed.

Screen Shot 2017-08-07 at 12.01.08 AM.png

Screen Shot 2017-08-07 at 12.01.18 AM.png

I’ve decided that given the scope and timescale of Museum Multiverse in its current state, I’m going to instead focus most of my time on this new concept. I’ll still work on Museum Multiverse with Ernest, but for the Oculus Launch Pad program I’m going to be diverting my efforts towards this now. Rob and Jose came up with a name for it already – “The Take”, and are currently working on fleshing out a spy theme and some design documents for it.

Screen Shot 2017-08-07 at 12.01.27 AM.png

Screen Shot 2017-08-07 at 12.01.38 AM.png

 

Week 6: Controls are Working and The Take is taking form!

This week I have been mostly fighting with the controls and have gotten something working finally!

3.jpg

What seemed to have been the problem was that within my player move script I needed to register the movement for the player’s input on the Gear VR Controller and add it to the movement of the player. After the player received this movement I then had to set that same movement to 0 all within one update function.

 

// This add the force from the Gear VR Track Pad on the OnEnable Function

void localTouch(InputTouch touch) {

touchHorizontal = touch.currentTouchPosition.x;
touchVertical = touch.currentTouchPosition.y;

}

// VR Controller
float h = touchHorizontal;
float v = touchVertical;

// Set Them Back to 0f so they don’t move the character anymore
touchHorizontal = 0f;
touchVertical = 0f;

// Do all my movement logic after….

This is looking good for now. I will take more time for refinement in controls in the future but progress is being made!!!
Speaking of progress being made… I have still been play around with the idea I had from last week as well.

Over the last week we’ve been working on getting the Gear VR controller to work within our scene and interact with objects. It’s been slow going, but I think we’re finally making some progress. So far, I’ve been able to make a raycasting object that is attached to the Gear VR controller in the scene. This raycaster can detect designated objects, temporarily change their material as it hovers over them, and teleport/lock them to the impact point of the laser with a press of the trigger. Because we’ve given these objects rigidbodies, they will move and bump into other objects in the scene as we move the controller around. Then, when we let go of the trigger, the object will fall to the ground with physics. I’m a little hesitant to rely so heavily on physics in a mobile VR game like this, but anyone who has gotten a chance to try this out has responded positively to these simple but intuitive forms of interactions with objects in 3D space.

My next goal is to figure out how to make the rotation and precise manipulation of objects feel tight and refined. This is the most important part because I want the players to appreciate the detail of the art they’re picking up, and they can’t do that unless the controls feel smooth and intuitive.

Week 4: Handling Camera Movement in VR

FOV.jpg

I am facing a problem in Museum Multiverse, the third person camera still feels weird following the player. I want to make sure the movement is smooth and comfortable for the camera and player, so I have been looking around for solutions and I think I found one.

Limiting the player’s peripheral view reduces the motion sickness of movement. I learned this from a paper I found on the subject by Ajoy S Fernandes and Steven K. Feiner at Columbia University. Basically the solution they learned from experimentation had a real reduction of motion sickness by limiting the view based on player speed.

So how do we do this in Unity?

First we would need to import the older Image Effects into Unity from the asset store. We are really just looking for the Vignette And Chromatic Aberration script. After you import this add this to your main camera. Once this script is added you need to set everything on the script to 0, you will only be playing around with the vignetting option.

Screen Shot 2017-07-09 at 3.11.17 PM.png

Try playing around with the Vignetting values to see how it effects your camera!

Screen Shot 2017-07-09 at 3.14.53 PM.png

Next we are going to write a script to adjust the Vignetting based of the Camera speed.

using System.Collections;
using System.Collections.Generic;
using UnityStandardAssets.ImageEffects;
using UnityEngine;

public class FOVLimiter : MonoBehaviour {
    private Vector3 oldPosition;
    public float MaxSpeed = 6f;
    public float MaxFOV = .7f;

    public static float CRate = .01f;
    public static float RateCutOff = .25f;

    // max .7 Vignetting

    private VignetteAndChromaticAberration fovLimiter;
    // Use this for initialization
    void Start () {
        oldPosition = transform.position;
        fovLimiter = GetComponent<VignetteAndChromaticAberration> ();
    }
    
    // Update is called once per frame
    void Update () {
        Vector3 velocity = (transform.position  oldPosition) / Time.deltaTime;
        oldPosition = transform.position;

        float expectedLimit = MaxFOV;
        if (velocity.magnitude < MaxSpeed) {
            expectedLimit = (velocity.magnitude / MaxSpeed) * MaxFOV;
        }

        float currLimit = fovLimiter.intensity;
        float rate = CRate;

        if (currLimit < RateCutOff) {
            rate *= 3; //fast rate since the field of view is large and fast changes are less noticeable
        } else {
            rate *= .5f; //slower rate since the field of view changes are more noticable for larger values. 
        }

        fovLimiter.intensity = Mathf.Lerp (fovLimiter.intensity, expectedLimit, rate);
    }
}

So what the heck is the Field Of Vision (FOV)Limiter script is doing? We are grabbing the distance the player has traveled each frame to find the speed of the player and calculate how much of the field of vision should be limited based on the player speed. So remembering some key points from the paper, the rate of the FOV transition can be faster at some points when the field of view is large because fast changes are less noticeable, but FOV changes are more noticeable for larger values.

Right now this is working pretty well but I know this is only step one to making a great 3rd person VR camera. Next week I will be focusing on making a smarter camera that can follow the player without getting stuck on walls.

If you would like to learn more about limiting camera view to prevent motion sickness and other VR tips I would recommend checking out FusedVR these guys are great!

Playing around with Unity 3D… No wait trying to fix Unity

So I started my coding career in the hopes of making a game one day. In my countless search of finding resources to help me in this journey I found  internships that had many elements of game development, workshops that were really expensive but informative, and online game design courses. I found all of these resources very informative, but one of the elements I found the most consecutive beneficial to me was the online resources this is were I learned most of my game development and programming skills before The Flation School. I don’t normally talk about this as much as I would like but I am really appreciative of The Flatiron School for giving me the opportunity learn code because I would either need to have a lot of money to go to bootcamps for coding or had to have been a woman to learn how to code without going into debt in college.  However, because I did a ton of videos without the foundation of programming I had no idea what I was doing so I went back to the code I wrote for some particular games to understand what is going on now that I have a better understanding of coding.

logo (1) n3-1Z5OV_400x400

So this was still relatively difficult because most of my coding with game was in programming languages like C# and GameSalad which uses a cover language to make objective C easier. one of the methods I would like to go over in this blog because there are a ton that I programmed, but I wanted to show one of the coolest I learned and that would be the explode method in C#. This method is a destructive method that can chain on other behaviors. in this game I chose to spawn piece of the player with the explosion. which creates an effect of the player being blown to pieces. So I would like show a demo of this and talk about it alone with it.

However, in the process of trying to get my demo working for class I realized that there was a major problem with unity’s new editor it could not handle translating old projects. I will finish this blog post when I figure out more on the subject

Screen Shot 2015-04-01 at 12.48.26 AM