Friday, April 25, 2014

Week 19 Day 4 - Post Beta 1 Report, Preparations for Scholar's Day, and How Screwed We Are.

We are getting really bad about not consistently posting to this blog...

Anyways, we did make progress since the last blog post.  All issues from the problem list have been solved, except for the following:

  • Disconnecting from an unresponsive server takes too long
  • Gravity toggle stops the player's momentum from their own movement (but not momentum from pushes and abilities)
  • HUD will occasionally stutter in it's display.
    • We know where the error is happening for this, but not how to fix it.  It's a weird issue with Unity's OnGUI system.
The player resolution select is not optimal, however it gives them the option of all their possible resolutions and full-screen.  The problem comes with how they are displayed, it's just bunch of buttons with the possible resolutions.  This is annoying, however Unity lacks any sort of drop-down menu, and other options involved a lot of customization for a feature that the user would only alter once or maybe twice.


When fixing the grounding issue, we had tried several methods of seeing if the player was on the ground.  The first method was simply using the collider to determine if we were colliding with objects below a certain point on the collider.  This was effective until we altered the shape of platforms to include a subtle slope.  The collider doesn't nicely slide down this slope while moving, and will quickly alter between the touching and not-touching states when moving down.  We tried to fix this by introducing a delay after the collider left the object, and if it didn't come back into collision within that time, it would actually be considered off the ground.  However doing that caused another issue, the player's jump counter is reset while the player is on the ground, and about 10% of jumps would not register as properly off the ground, essentially giving them another free jump.  Extending this to catch this odd case would have gotten even more complicated, so we went back to the drawing board for detecting groundedness.  We created a class, called Groundable, whose job it was to determine if the object was on the ground.  This class simply fires a raycast a very short distance below it's parent object, checking to see if it hit anything (other than the object itself).  This method solved all of the problems described above, and is actually portable enough that we could apply it to other things, such as crates if we needed to check their groundedness.

Beta 1

The Beta 1 test went very well!  Our group of users were thorough in testing all the pieces of functionality for any bugs and such issues.  We received positive opinions about the game, but nothing really constructive in that regard, probably due to the younger age of the test group this time.  However, we did glean some interesting pieces of information from watching them play:
  • Inexperienced users would control the character with the arrow keys, making all the ability controls unreachable
    • We are going to disable the arrow keys, as it only creates bad habits, and there is no way to map all the functionality of the game to keys around the arrow keys on the keyboard
  • Ability keys at QERF was not intuitive
    • We are going to also map the abilities to 1234 as alternatives to the QERF
  • The blink ability made the player virtually unkillable if used correctly
    • It was way too easy to just blink up into the air, back to safety
  • Players could blink out of the map, killing themselves on accident
  • Aiming the cone ability was difficult for inexperienced users
  • Users complained about not being able to see the edge of map, where they will die.
    • This could be solved by adding a colored plane to the edge of the map, however we don't know if this will actually be visible and distinguishable due to it effecting all directions.  It may be simpler to just leave things the way they are

Scholar's Day

We prepared a poster for BVU's Scholar's Day.  We will be 'presenting' the poster while other students, faculty members and such look at the work students have been doing for the year.  It's some very cool stuff, and a great opportunity for us to tell the world what is going on with this crazy project.  Here's a copy of our poster, for those interested:


We're doomed.

So we reviewed the original schedule for Dias, that was created way back last semester:

According to this schedule, we should be much further in our project.  Namely, we should have all abilities implemented, breaking and moving platforms, a platform generation system, and a respawning system.  We can safely say our goals got a bit lofty toward the end of this schedule, and we did a poor job of predicting how long it would take to solve certain issues (not to mention we added animation, which isn't even on this schedule...) and how full our schedules would be.

The first decision we made regarding this schedule, and the end-of-semester deadline that is swiftly approaching is to cancel the Beta 2 Test.  We won't be able to implement any sweeping changes to the game and be able to test them by the time that the end of the year arrives, so we simply plan to move ahead with any changes and not have another large test.

We realize that there in insufficient time to complete even a fraction of these items before the semester is over, so we are going to focus on 1 or 2 items and try to complete them by the time the semester ends.  The items that are the most appealing are:
  • Add missing abilities
  • Complete work on character weight
These items are integral to the original design of the game, with players being divided into 'classes' with the ability to pick and choose abilities from other classes.  We probably won't be able to complete all planned abilities (as that would nearly double the current amount), but hopefully we can complete several of the interesting ones.

This has been a very constructive semester, and looking at this schedule really nails home how important it is to take into account problems that are going to occur during development when picking deadlines.  We should have added sufficient padding around certain items in the original schedule, and been less eager to squeeze even more features in.  The ability implementations is still surprising with how long each of them took.  We easily could have spent an entire week on certain abilities, let alone 2 weeks for all 12.  This is a really important concept that will definitely be taken away from this project as a whole.

Monday, March 31, 2014

Week 16 Day 1 - What we did, and what we didn't - Beta 1

We just realized that it's been about 3 weeks since our last update (below the goal of at least 1 post per week).  Break was a bit less productive than we had hoped, partly due to other obligations, and partly due to the difficulty of models/animations with the player characters.  We were unable to finish any more abilities.

We've made quite a bit of headway recently, and also uncovered more issues we didn't realize we had.  The problems that are solved are crossed out below.

Issues we knew about:
  • Disconnecting from an unresponsive server takes too long
  • HUD will occasionally crash while respawning
  • Tab-score menu does not get drawn with consistency every frame
  • Gravity Toggle stops the player's momentum from their own movement (but not momentum from pushes and other abilities)
  • Slam ability (called Gravity Increase during alpha 2) does not properly throw surrounding players into the air
  • Blink ability requires that a player be standing completely still to activate
  • Detecting when a player is grounded is still inaccurate.
  • Players will on rare occasions be granted an extra jump when they leave the ground (because the game thinks they are still on the ground)
  • Players will appear to not be on the ground when going down small inclines 
  • Players can select resolutions from the Unity Game Menu that do not work with our interface
  • This options should really be moved to the settings menu 
  • There is no tooltip for what all of the abilities on the Game Lobby actually do.  Players are currently selecting abilities at random based on their names
  • Players can't edit their options from the game lobby

  • Issues we found out about:
    • When a client gets a kill it doesn't always get counted
    • Ground Slam will sometimes pop the caster into the air
    • Area push should really be a sphere, rather than circle around the player
    • HUD will have similar not-getting-drawn issues as the Tab-score
    Animations
    We were able to get a model and some basic animations in for players over break, however this took longer than expected, slowing progress on other aspects of the game.  We have a different walking animation for forward, backward, and strafing left and right.  There is also a single animation frame that is active while players are in the air.  There are almost no options for free animations, and we had to get some raw motion-capture data off the unity store for free, and make our own animations from the motion capture data.  You can see the blend of movement animations below:


    Along the right side of the screeen, you can see the breakdown of where Unity will blend our animations.  Our individual animations can be partially blended together by unity automatically, we simply have to feed in values for the x/y of the 2D blend.  I set the red dot for the current mix of values at the top in the matrix, displaying the forward animation in the lower right.  In the center of the screen, you can see the entire blend tree with all of the attached animations, and sliders for the variables the blend is based on.

    Player Weight
    We also added weight to the players.  This currently is only effecting the movement speed of the players.  We will need to do some serious tweaking to the values to get weight to properly effect abilities in the expected manner.

    Effect Handler
    We are starting to realize that there are a large number of abilities and other things that are starting to effect certain stats on each player, like their movement speed, and their weight.  We are thinking of implementing an Effect Handler for each character, that would handle how long these effects last and ensuring they are properly organized and removed.

    Preparations for Beta 1
    In the final week before the Beta 1 test, we hope to add another ability or two, see if the weight can effect more than just the movement speed of players, and try to eliminate more items from the bug list from the top of this post.

    Sunday, March 9, 2014

    Week 12 Day 7 - Known Issues, and Preparations for Beta 1

    The test this last weekend was very unhelpful.  Mostly in the sense that we didn't get any good information from the test, due to other issues with the game.  There were problems with maintaining a proper connection to the server, and the server handling users coming in and out.

    We are aware of a number of bugs with the system currently, and they are as follows:
    • Disconnecting from an unresponsive server takes too long
    • HUD will occasionally crash while respawning
    • Tab-score menu does not get drawn with consistency every frame
    • Gravity Toggle stops the player's momentum from their own movement (but not momentum from pushes and other abilities)
    • Slam ability (called Gravity Increase during alpha 2) does not properly throw surrounding players into the air
    • Blink ability requires that a player be standing completely still to activate
    • Detecting when a player is grounded is still inaccurate.
      • Players will on rare occasions be granted an extra jump when they leave the ground (because the game thinks they are still on the ground)
      • Players will appear to not be on the ground when going down small inclines
    • Players can select resolutions from the Unity Game Menu that do not work with our interface
      • This options should really be moved to the settings menu
    • There is no tooltip for what all of the abilities on the Game Lobby actually do.  Players are currently selecting abilities at random based on their names
    • Players can't edit their options from the game lobby
    We've decided to alter the project schedule for the next test.  With spring break still going on during the time we intended for Beta 1, we are now pushing it back to the weekend of April 4-6.  We also are pushing back the scheduled goal for this week, due to the state of the game, and the issues listed above.

    The schedule for the next several weeks is:

    • Week 13 - Check as many items out of the above list as possible
    • Week 14 - Implement more abilities, add player mass to the game
    • Week 15 (spring break) - finish implementing abilities, add platform movement, possibly add models and clean up more from the checklist above.
    • Week 16 - Polish for Beta 1, finish any work on models
    Work on the project has certainly slowed in the previous weeks, in a frustrating fashion.  We hope to pick it up in the coming weeks, as we have some cleanup to do.

    Saturday, March 1, 2014

    Week 11 Day 6 - Alpha 2 Test

    Today we had our Alpha 2 test.  Things didn't go as we had planned.  Dias was basically unplayable.  The following were all issues that we discovered at the test.

    • Players' HUDs would sometimes not load properly
    • Sometimes players wouldn't respawn
    • Boxes from the "Box Drop ability" were buffered when created, but not buffered when destroyed, resulting in dozens of boxes across some clients staying around.
    As a result of these game-breaking bugs we had to end the testing period without getting the kind of feedback we wanted.  We may perform a small in-house test later, when we get these bugs fixed.

    It is obvious that we have a lot of work yet to be done.  We will post again after we have talked about our goals we want to meet before our next test.

    Monday, February 17, 2014

    Week 9 Day 7 - GitHub Troubles & Abilities

    This week we hit some problems with GitHub.  Zach commited his first change, and we were nearly unable to merge the commit.  It appears that Git doesn't do things nearly as simply when it hits conflicts in files.  We spent half of Saturday trying to get his changes into the system.  They are in there, but we are unsure exactly how we did it.  Our continued usage of GitHub is currently in question.  If we are going to have this much trouble with solving file conflicts, we may go back to SVN, as it worked quite simply there.

    In less exciting news, the storing of teams was altered, to more easily accommodate grabbing the Team color or name.  Some odds and ends bugs were fixed with the display of the Score menu.  The side view camera is now implemented and working.  There is a known issue of the camera falling through objects when pointed straight up in the air (falling through platforms, we need to test if it still does this for other objects).  We'd also like the add the ability to swap the camera to the other side of the player dynamically in the game, now that it is no longer centered (This really shouldn't take more than an hour or two to accomplish).

    We are down to 2 weeks before Alpha 2, and are getting a little bit behind on schedule.  We hoped to have 2 columns of abilities implemented by this coming test, however have not focused our efforts directly on those columns.  We will need to step it up this next week if we hope to have 2 columns completed in time.

    The current ability chart is as follows:

    Light Role Support (Builder) Role Heavy Role
    Attack-based Ability Cone Push* (coned area) Box Drop* (from sky) Area Push* (area around player)
    Defensive-based Ability Blink* (Straight up) Create Wall* Steal Weight
    Movement-based Ability Roll (possibly ignore other abilities while rolling) Grapple (like a grappling hook) Ram (run forward and push other players out of the way)
    Ultimate (and probably imbalanced) Ability *** Destroy Platform Ground Slam
    Passive Ability 1/2 Dash Cooldown Aura that lowers cooldowns for nearby players Weight Gain

    *These abilities are implemented currently
    *** This ability is still in consideration.  We are trying out one of the following possibilities:
    • Gravity Toggle - allows the player to not be effected by gravity while activated (Right now they can toggle this on and off, that will probably change)
    • Rocket (fires a projectile rocket that applies a large force on the player it hits, or maybe an explosive force around the location it hits)

    Saturday, February 8, 2014

    Week 8 Day 7 - Individual Scoring and Pre-Alpha 2

    We spent the other day coming up with a system for individual scoring and awarding points to people who get "kills".  Every time a player gets hit by an ability, the caster of that ability is added to a list, along with a time stamp.  When a player dies, the last player to hit him is awarded a kill point.  Every other player in that list is awarded an assist point.  Players in the list with a time-stamp within the last five seconds are only awarded points.  We are also keeping track of the amount of times players die, so that any player can review his/her performance after every game.

    We have implemented a few abilities but most still haven't been worked on.  We are still discussing if we are going to change some of the abilities from the previous table we posted.

    We still need to work on changing the camera from a top perspective to a side perspective, along with a follow camera while someone is waiting to respawn.

    Thursday, January 30, 2014

    Week 7 Day 4 - Odds, Ends and Abilities

    Today we nailed down a complete list of abilities.  Obviously this will change as we try new abilities out, but we want to get as many of these implemented as possibly by Alpha 2, or at least 2 columns of abilities.

    Light Role Support (Builder) Role Heavy Role
    Attack-based Ability Push (coned area) Box Drop (from sky) Push/Slam (area around player)
    Defensive-based Ability Blink (Straight up) Create Wall Steal Weight
    Movement-based Ability Roll (possibly ignore other abilities while rolling) Grapple (like a grappling hook) Ram (run forward and push other players out of the way)
    Ultimate (and probably imbalanced) Ability Rocket (large force on player it hits) Destroy Platform Ground Slam
    Passive Ability 1/2 Dash Cooldown Aura that lowers cooldowns for nearby players Weight Gain

    From the previous list of TODOs, we have completed the following:
    • Pinging system that disconnects clients when they lose connection with the server
    • The last player that 'dies' at the end of a game is properly destroyed when the game is over
    • The mouse is now 'locked' to the window while controlling the character
      • Solves the issue on Linux with the mouse escaping the edge of the window
      • Solves the issue on Mac with opening the top OS menu when aiming upwards
    • Characters now are instantly 'teleported' to the location they respawn to, rather than being pushed to that location
    Minus the items that are directly linked to abilities, here are our remaining goals for Alpha 2:
    • Hit detection
    • Character-based scoring, rather than just Team-based
    • Moving the camera to aim from the sides of the characters, rather than from the top.
    As a final note, work was started on the Box Drop ability under the Support Role, however we are considering doing the Light and Heavy abilities as the 2 columns.  The reasoning for this is that those 2 roles are more easily understood to inexperienced testers.  It would also give a better idea for what to expect from the choosing of abilities for all other users.