Saturday, November 14, 2015

Day 83: Slow Down There

Today was a good wrap-up and addition of further content. On top of various bug fixes, we introduced the next enemy, an odd inclusion of a squid creature:


Unless hit by contact, the squids' ink bullets do not hurt the player. This required a bit of extra working, as the player is set up to move slowly for five seconds while the black ink effect slowly interpolates from the bear's color. Along with that, the water also can wash off the ink effect. This was a bit tricky, as I had to keep track of the coroutine and prematurely start or stop it based on added ink or entering the water. Reinstantiating the coroutine did the trick.

The squid also has a very particular movement. Instead of moving with a specific velocity, the squid has a coroutine that applies a force every couple of seconds that gives it a more realistic burst movement, akin to that of an actual squid.

With this new enemy in and a couple of fixes here and there (the slider, for example, blocking the player from tilting toward the bottom of the screen), the game is pretty tightly made at this point. Just needs a bit of playtesting (which can be difficult with so much going on in the scene!)

Friday, November 13, 2015

Day 82: Not Enough Boss Phases

Today was spent wrapping up the phases on Boss Sauger. I managed to use the coroutines yet again to establish a flashing color for the charge; that way, the boss can telegraph its charge forward. The tricky part was to make the coroutine a data-driven time scale, so it would stop right before the charge phase actually ended:


As for the other two phases, it was fairly straightforward - the last phase required a new bullet type, as the bullets curved toward the left edge of the screen by way of a left-oriented gravitational acceleration. As for the shots that came out of the top and bottom, I devised a series of locations in a set of children for each side of Sauger.



And that's it for the visual progress; I've been attaching plenty of sounds to the game to give it a bit of flavor, so one can imagine these screens with plenty of fancy sound effects attached to it.

Thursday, November 12, 2015

Day 81: Sauger's the Boss

Boss Sauger was the main target for today's work. After mixing an iteration of coroutines through different wave delays and combining all sorts of rotations, lasers, shotgun shots, enemy birthing, and even a charge shot, I'm glad to see the combination of the serializable classes from the wave spawning class and the coroutines to switch between each phase make the system much quicker than I thought it would for Boss Sauger's phases:





The sheer amount of phases planned in this brute is a programming challenge in itself. Onto the next couple of phases tomorrow!

Wednesday, November 11, 2015

Day 80: Arms and Armor

Today was a difficult day in terms of progress; the Remote Desktop client was not functioning at all today, so I had to swing by school in order to get work done.

With that, I managed the rocket arms, which fire outwards based on a radius set by the user's finger and slowly retract back. At first the team was worried about the contact damage being too powerful and able to ward off any and all bullets and enemies, but the arms are actually quite tricky to aim and are more useful to defend against bullets:


I also setup some initial scripting for the boss, the SAUGER. Mr. Sauger currently has three detachable armor pieces that, instead of completely disappearing upon death, drop to the bottom of the screen. The preparation is slight, but should help make something to work with when I start working on boss attack phases.


Tuesday, November 10, 2015

Day 79: Cooling Down for Interim

Today actually turned out to be a successful interim! I managed to get the honeycomb all settled out and worked as a powerup for the bear to absorb. The only tricky part was having to rework the scripts so that the powerup could be reused upon reset. That meant deactivating game objects instead of destroying them.



I also stuck in cooldowns and invincibility frames for Major Ursa; the invincibility was a tricky coroutine since I needed to reset the coroutine every time the Major got hit. This was fixed by constantly assigning a new coroutine so it would take over after the previous one finished up. As for cooldowns, we decided to assign shrinking properties to the buttons to reflect charging attacks.


Next up? Extendable bear claw shields and one heck of a boss fight.

Monday, November 9, 2015

Day 78: Sliding Along

Today was a day to balance a couple of things out before the interim demo; the angler enemy finally got its shots in, a spike tooth that fires in the general direction that the fish is traveling. With a low shoot rate they look rather innocuous, but their size is definitely terrifying.

I also put in separate cooldowns for the missile and mortars (as not to overuse them) and kickback from the missiles and mortar shots. The missiles were a simple kick in velocity, but the mortar required a reworking of the accelerometer motion. Luckily enough, linear interpolation helped smooth out the accelerometer motion more, so a kickback was as simple as offsetting the position by a small amount and letting the accelerometer slowly catch back up.

On top of that, I replaced the boost buttons with a smooth slider. No more clamped horizontal velocity here! The slider allows more area for touch input and allows a smoother change in velocity.



That said, I'll be working on a honeycomb powerup next. Phew! Just trying to get Unity's Pro water to show something other than blue was definitely a challenge. I had to interpolate it again with a separate horizon color, even in a refractive option.

Sunday, November 8, 2015

Day 77: Productivity Comes in Sine Waves

Today was quite the challenge! The main to-do of the day was setting the shoot style of the mortar; I figured that one could aim and fire with rigidbody velocity based on trajectory, but that unfortunately didn't work for a mortar arc. Nor did trying some double equation magic when trying to find a parabola through two points. What my producer did suggest worked well; one could fire the trajectory upward at a high angle off screen, and then shift the mortar right  above the target point to land properly. Combining that with spawning a random group of explosions within the unit circle (thank you, Random.InsideUnitCircle!), and the mortar is complete to go:



As for the angler, the fish was supposed to follow a sine wave movement. Similarly to the bullet movement in the salmon bullets, I could directly control the curve of the fish and rotate it toward the next point in the curve for smooth pointing toward a drunken sine wave. Combine that with variable offset, amplitude, phase, and angular frequency, and...


Next up: Angler bullet spikes!