Tuesday, July 23, 2013

Pre-Alpha Build 6 Released

This new demo is for Windows, Mac, and Linux. It includes all the items which I mentioned wanting to include in the previous blog post.

Principally, this includes:

  • Tutorial Mission
  • Two maps with 3D scrolling backgrounds
  • Score screen between the levels that tracks the player's score
  • A few new placeholder models and sounds from various free sources

Please note that not all of the scoring mechanics have been implemented yet.

Go to the downloads page and give it a try!

Friday, July 12, 2013

Progress Update 6

Quite a few changes have been made, lessons learned, and new goals since the last update so let's get started.

Graphics:

  • New placeholder ships and 3D background are being used. It's good to change the scenery every once in a while.
  • New HUD in place that uses "bump" mapping, also known as normal mapping which creates the illusion of geometrically occluded lighting on a flat surface. Suffice to say, it makes the HUD look really cool when lit up.


Lessons Learned:

I found a neat website called shmup-dev.com where a lot of shmup game developers and hardcore shmup players frequently discuss the genre at large. I picked up a lot of information from their forums about what is regarded good qualities of a vertical shoot'em-up game.
  • The player is powerful, yet fragile.  This is important. In the pre-alpha demos thus far, the player can absorb as many as 10 yellow shots before dying. This has been reduced to 3, but the player's weapons now do more damage.
  • The controls must be very precise. This was a weakness in previous versions while I was poorly emulating analog input. This was mostly fixed in the previous progress update but I've also fixed a problem which allowed you to move faster diagonally that you can on either axis alone by clamping the movement velocity vector to between 0 and the "playerSpeed" value.
  • Scoring mechanics are extremely important for repeat play. Many people play arcade games for fast fun with little time commitment. Those who excel take notice of their score and try to maximize it. Good scoring mechanisms create the hook necessary to maintain the player's interest in score building.
  • "Popcorn" enemies should be abundant in each wave of bad guys to create that satisfying "crunch" and constant sense of destruction for the player. Having easy to kill enemies makes the experience more rewarding between destroying the harder guys. Even when you miss the bigger guys, you at least sometimes get a lucky kill on one of the little guys and that creates a sort of random reward schedule for some players.
  • Needs to be simple enough to learn in a moment, yet complex enough to stay interesting. I think the premise of Aggressor fits this description, but I don't think its been very effectively communicated. To help this, I've created a Tutorial level and changed the term "Capacity" to "Energy" which is a concept that more people are surely familiar with. I've also changed the graphics of the enemies' projectiles to have subtle cues of their effects by indicating a "plus" or "negative" sign with the light flare on them. Hopefully some will see this as "yellow adds energy and red subtracts energy," but you never know...  Also, the orange enemy projectile has a circular flare as to denote "zero energy" and the heat meter color has been changed to orange.
Bugs Fixed:

Too many to mention. Thanks to all of you who have played the demos and posted feedback on found bugs and errors. This helps me out tremendously! 
Goals Set For Next Demo Release:
  • Need at least two levels complete with a prototype score screen segueing between them.
  • Two new bosses for these levels. I'm thinking that the boss from the previous demos will be used for the third level and these new bosses will be much more straight forward and easier.
  • Need a tutorial level (already done) to help demonstrate the premise of the game. 

I hope to accomplish all this within the next two weeks.
Best laid schemes...

Friday, June 7, 2013

Progress Update 5




Quite a few things have been changed since the last build:
  • I've added an experimental new element of the game call "heat" as a way to prevent capacity discharge spamming. This also allows a new minor dimension of gameplay, hopefully without adding too much complexity and confusion.
  • Getting hit by enemy projectiles, using capacity discharge abilities, and dashing all increase heat. 
  • If the heat meter is full, you can no longer dash or use your capacity discharge abilities. Heat automatically decreases with time. The amount of heat that you gain and how quickly it leaves will likely need to be tweaked for quite a while to get it right.
  • The heat element of the game allows for new enemies and situations that can't kill you but instead cripple your abilities by heating your ship.
  • In addition to the regular heat and capacity gages, much taller versions have been added to the left and right peripheral edges of the screen for clear visibility during play. 
  • The dash is no longer a transient effect but is active as long as you hold the dash button, increasing movement speed twofold.
  • The dash effect is now using the trail renderer at various areas of the ship. This gives a nice streak look.
  • At some point, I stopped testing with my keyboard controls and had only been using my gamepad. I must have changed the controls for dash and capacity discharge abilities. They have since been remapped to [Left Shift] and [Space], respectively.
  • Input lag issue has been rectified. I was emulating an analog joystick with digital keys by tweening vector values between [-1,+1] over time. I'm still emulating the analog input, but the sensitivity has been amped way up so it effectively never touches the values between -1, 0, and +1. I'm keeping this in simply for the onscreen Android joystick controls.
  • We're transitioning into 3D backgrounds which will allow more flexibility in the design of the environment since we can repeat assets in a more non-patterned way, making them look better without using much more memory (if done correctly). The background in the screenshot is quite ugly, but it's programmer art made in Google SketchUp. Expect better background assets in future builds.
  • The "spin shot" feature has been removed since it seemed like a pretty obscure ability anyhow. It may come back later on, but for now it's on the cutting board. 

To do (programming):
  • Add a continue screen for when you run out of credits. I haven't been very clear to all the beta testers that the "I" key will give you more credits. "I" is not a very obvious key to choose, but it still works for now.
  • Come up with a way of chunking the 3D background objects in a more discreet way so that it can be varied more easily and efficiently.
  • Create a new between-level map screen that better reflects our new vision for the game.
  • Test out a Linux version of the demo.
  • Create a placeholder enemy that uses a flame weapon to impact the player's heat.

Thursday, May 9, 2013

Pre-Alpha Build 5 Release (Windows and Mac Only)

I've uploaded the latest build. Unfortunately, I haven't worked on the Android version to bring it up to date with the other builds. This build incorporates a new enemy ship model. There's nothing final about it, but it proves that we're capable of making and integrating new meshes into the engine, and that's pretty dang cool.

We still have plenty of work ahead of us, and now with Summer break upon us maybe progress will begin to accelerate. Head on over to the download section, try the new demo, and make sure you try out the new spin shot! (Charge a shot by holding the fire button, then dash)


Monday, March 25, 2013

Progress Update 4

Gameplay:

If you dash while charging your gun (hold the fire button to charge), you will launch the charge shot in a curved path, much like putting spin on a tennis ball or ping pong ball. The projectile will also bounce off of enemies making it a devastating wrecking ball against clustered enemies.




The boss's homing rockets have been slowed down since they were pretty frustrating to try to dodge at their original speed. Also, in response to feedback from the testers, the homing rockets can damage the boss if you are nimble enough to steer them into him.

I've also added a new enemy AI. This one is a very simple script that allows an enemy to move to a random screen location, track the player and fire a few shots in that direction, retreat to a new random screen location and repeat.

GUI:

I've added an in-game menu to allow several options to the player. Pressing the escape key, Pause, or even "P" while in game will bring up the menu. From here you can resume game, quit to main menu, quit the game, or configure sound options. It's not too terribly flashy, but the buttons have animated tweens in reaction to the mouse hovering over them and being pressed.


The Boss now has a health bar to indicate how much damage is required before he's defeated. This constant feedback makes it much easier and more fun to play.


Now after beating the boss, you are taken to a map screen where you can select your route through the galaxy. This may or may not make it into the game since the scope of the game is not certain at this point.

Polish:

Previously, when the player was moving while at the extreme left or right sides of the level boundaries, the ship would have a jerky movement because of collision detection. Put simply, every frame, the ship wants to move out of bounds but the collision detection refreshes at a fixed time interval which is not frame rate dependent. So, while the player is trying to force the player out of bounds, there is a constant back-and-forth battle between the player's input moving the ship and the collision detection moving the ship back because it shouldn't allow the ship to move any farther.

To prevent this, I added a script to stop the player from moving any farther in the direction of the boundary that they are clipping against. So if you drag your ship all the way to the right end, the script recognizes the collision has occurred between the ship and the right boundary and will disable the player's ability to move any further in that direction. I also removed the rotation animation from the ship while in this condition for good measure.

Friday, January 11, 2013

Potential Distribution Platforms

So, I've mentioned the desire to distribute the final game on PC and Mac, but there are actually a few interesting new outlets in the Android domain.  I think Aggressor would be a great fit for these new devices:

Ouya

This new device basically brings console-level rendering power to Android based games/apps. This is a great way to channel hardcore gamers into a marketplace dominated primarily by casual games by giving the players much better graphical and controller fidelity.
(Ouya website)


Nvidia's "Project Shield"
This device is much in the same vein as Ouya in that it has potential to reel in a more hardcore audience by means of physical controls. However, this device is very portable.
(article website)

I'm sure there are other great emerging platforms out there, each a possible opportunity for this project.  The good and bad things about this is that there are more outlets for the game to be released, in theory making it more likely to get published and promoted. The downside to these outlets is that we could be competing against every other Android game that's ever been published before, assuming they go to the trouble of programming support for physical buttons.

Tuesday, December 18, 2012

Progress Update 3


I've implemented controller support for gamepads on Windows and Mac platforms. The best part of this is that it will make porting to Xbox Live Arcade and PlayStation Network more seamless as I can rapidly test and tweak the control settings and make sure they are fine tuned before compiling.


When using the joypad, I've made the dashing controlled by a seperate button + analog direction rather than a double tap, since it's not really practical to double tap a joystick.  It seems to work quite nicely.

Bugs:  I've fixed a bug where if you move outside the play area while your respawning invincibility is in effect, you could not get back into the scene. Apparently I disabled collisions with all objects including the borders, rather than just disabling collisions between the player and enemies/projectiles.

Feedback that I'm working on:  The homing missiles are jerks!  This probably won't be the actual first boss, so the difficultly is a little off scale.  I may make the missiles a little slower and allow them to damage the boss if you can steer them into him.  Maybe that's the only way to damage the eye, or maybe that's the way to bust the eye shield off?  Feel free to share your thoughts.