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.

Tuesday, January 21, 2014

Week 6 Day 2 - Character Movement, Cone Push and Alpha 2 Prep

On Saturday, we had our first test, Alpha 1.  We had 10 players participating (Big thanks to all of you!), and got a lot of great information out of it.  Also the post-play questionnaires brought up some good points.  A few we already were aware of, in particular:
  • Players couldn't be pushed if they moved
  • Over the head viewpoint tends to cause pushes to be down into the platforms, and not be as useful
  • Jump counter could be reset by any kind of contact with objects, not just your feet hitting the ground
We also had a server disconnect during the second game, and all clients thought they were still in the game.  Right now we are relying on Unity to call the correct functions when this disconnect happens.  Obviously that isn't enough, so we are considering inserting our own pinging method.  The idea would involve each client pinging the server for a connection, and if they didn't receive a response within a second or two, to automatically disconnect themselves.
We already completed a couple of things on our list of tasks for Alpha 2:
  • Characters can now be pushed while moving
    • We are moving the rigidbodies of players in a new way, which has a new issue in that their velocities are not effected by it, however pushes work as expected now.
    • This new method also feels much smoother than changing the velocity
  • The chatbox in the lobby and game was broken during the test, and has been repaired
    • We forgot to update how we are sending players now, since that update in the last week before the test
  • Duplicate names now have a number appended to them, which increments until it finds an open possible name
We've started the list for Alpha 2 goals, which will undoubtedly be modified in the coming days:
  • Design abilities
  • Implement abilites (Why is this one item?!)
  • Game Lobby Character Creation
  • HUD
  • Handle Server Disconnect
  • Respawning at game end
  • Follow camera while respawning
    • This is optional really, we are debating whether we even want this, as an overhead camera is fine
  • Hit detection
  • Proper scoring for players and not just teams
  • More thorough testing on mouse input
    • One of the testers reported issues when looking down while turning
  • Try aiming camera from the side of the player, rather than from the top
    • pushes will be generally aimed downward with the top camera, making the pushes less effective
  • Characters currently lerp to their respawn location from where they hit the boundary, they should simply be teleported
The plan is to hit a few of these odds and ends issues from the test for the remainder of the week, while also beginning to draw out what all the abilities are going to be.  We hope to have a ready list of abilities by next week.  The 2 weeks after that will be spend implementing as many abilities as possible.  The remaining 2 weeks will be spend cleaning up the other systems before the Alpha 2 test.

Wednesday, January 15, 2014

Week 5 Day 3 - Physics my friend, We are the master now!

So we found out what our problem was with the push ability.  The problem that we perceived we had was that for no reason the force from the push would send the player flying straight up into the air, with only a little horizontal force.  The problem that we actually had was the way we were handling movement.

In our movement script every frame we were checking if the player was attempting to move, and subtracting our target velocity (0 if the character wasn't trying to move) from our current velocity.  So if we were still and the character was trying to move, we would start moving, and if we stopped trying to move, the character would be slowed down to a velocity of 0.  This means that every time we applied a force to that character, the next frame they would be slowed down to a stop.  However, we were handling jumping (movement in the vertical direction) differently.

Therefore in actuality, the vertical movement wasn't the problem, and the horizontal movement was.  When we saw that our push ability didn't move the character very far, we vastly increased the force at which we were applying the ability.  This made the forward movement seem a little more correct, but insanely increased the vertical force.

Our solution was to revamp the way we were doing movement, and not push the player to a stop any longer.  This means we now have to rely on actual physics for the character to come to stop, such as air drag and friction.  After readjusting some values our movement is back to normal, and we finally feel comfortable with our push ability.

We have the following variables that we can adjust to modify the finer movement mechanics of how the game runs:

  • Gravity
  • Static Friction
  • Dynamic Friction
  • Air Drag/Resistance
  • Bounciness (we have not messed with this yet)
We still have an issue with how we are respawning players and the game ending.  Currently, each client waits three seconds before trying to respawn their character, and if the game is over, they destroy their game object instead.  However, if the game were to end, and a new game start in that three second time period, the game object wouldn't ever be destroyed.  We would then have multiple game objects on one client, along with multiple cameras and strange things begin to happen.

Overall we feel pretty good about where we are, in relation to how far away our first alpha test will be.

Monday, January 13, 2014

Week 5 Day 1 - NetworkViewIDs, Scorekeeping and Push ability

Today was spent adding a ScoreKeeper to the game.  Whenever a player is respawned, they tell the player, and the score is updated appropriately.  Right now we are only basing scores on when opposing players hit the edge of the map.  In post-Alpha 1 builds, we intend to base it on the last player to push/effect the player before hitting the edge.

We didn't fully get to an end game condition, however it seems like that won't take too much time to finish up tomorrow.

There were more issues with how we were mapping players to their builds.  It turns out that the NetworkPlayer that we were using will only work as we expected on the Server, and the unique numbers for each client are not available on other clients.  We are now allocating a NetworkViewID (Which is guaranteed to be unique) for each player, and they pass this with all their correspondence.

There is still work that needs to be done on the Push ability.  It seems that no matter how we adjust the force being applied, it will often times transform into a large vertical movement, that we can't seem to follow.  The vertical movement seems random, and we need to more thoroughly investigate this issue.  It doesn't seem to be caused by physics materials on the object, as we are controlling for those.

We also made an online form for the post-play questionnaire after the two test games.  We also put a button linking directly to it in the main menu of the game, to make getting to the survey easy for our testers.

The remaining list for Alpha 1 preparations:

  • Push Ability adjustments
  • More thorough network testing
  • End condition for games (Score and timer)
The link to our Alpha 1 signup is at the following address: http://goo.gl/hgkHZU

Friday, January 10, 2014

Week 4 Day 5 - Teams and Character Builds!

Thursday and Friday were spent reworking how we are storing a player's data on the clients.  It turns out that we misunderstood how the Unity Networking RPC and Network.Instantiate methods were passing "sender" data, and everything is actually coming from the server on the clients (which makes a lot of sense, now that we think of it...).  We spent quite a long time hunting down this issue, which manifested when we were trying to pass a player's build to the other clients, which also includes what team they are on, and their chosen name.  Once we figured out what the issue was caused by, everything worked as expected.

We are now passing builds to all clients, and they are apply aspects of the build to each character.  Right now the only change is the team, which will change the character's color.  Post-Alpha 1, this will be where we apply their choices for jump/movement/role abilities, and weight.

We also have a crosshair! Yay!

This puts our list of tasks to complete by next Saturday's test at the following:

  • Rework push ability
  • More thorough network testing
  • Score keeping, and win condition
  • Create official post-play questionnaire for Alpha 1

The link to our Alpha 1 signup is at the following address: http://goo.gl/hgkHZU

Wednesday, January 8, 2014

Week 4 Day 3 - Current Status

We are about a week and a half from Alpha 1 test.  This week has been pretty productive, with completion of the following tasks:

  • Game lobby character customization placeholder
  • System for character names, and rework of chat box
  • Boundaries to the arena, and respawning when you hit these boundaries
  • Reworked character ability management, so now abilities are loaded when the player is created
    • Currently these are all predefined for each player, and is not sent over the network (That will probably be for Alpha 2)
  • Network test
    • Able to create servers and join them as expected
    • This test displayed an issue where some players will completely lose control of their character, and fly off in a random direction.  We aren't sure what causes that issue, but it's definitely something that will need to be fixed before Alpha 1
This puts us about on track for where we wanted to be at this time.  We still have the following tasks to complete before Alpha 1:
  • Rework push ability, to act more appropriately
  • Teams, score keeping and end of game
  • Game lobby game placeholder information
  • More thorough network testing
  • Add cross hair to the HUD
  • Create official post-play questionnaire for Alpha 1
We have also created the web form for our Alpha 1 test sign up, it can be found here.  We are hoping for about eight people for each of the two testing times.  That would give us a fairly large sample to draw data from, while still being manageable.

Shortened link to sign up form: http://goo.gl/hgkHZU

Wednesday, January 1, 2014

Week 3 Day 3 - Ending and Exiting the game

Today was spent making it possible to end and exit games.  The host player can now end the game for all players, sending them back to the game lobby.  Any client player may leave the game, which sends them back to the main menu.

There is currently a small error that Unity receives on the server during arbitrary game endings. This happens because the server removes all the objects in the game, but receives one last update from a client about their object.  That last update throws an error because the object no longer exists.  We are properly removing the footprint of RPC calls associated with each object, however this message manages to get through.  It may just have to be an error that exists, as it doesn't actually cause any issues with the game.

We also have a working Pause Menu and HUD.  The pause menu features settings that can be modified in the game.  The HUD currently just has placeholder information that will be added in later (possibly between the Alpha builds).

We put together a list of items we have started, but need to put more work into before the Alpha 1 test:

  • Physics/Push Ability
  • Game Lobby information and display
    • Placeholder information for character customization
    • Placeholder information for game customization
  • Spawning, Respawning, and boundaries to the arena
  • more thorough network testing
    • We haven't actually gotten a game to work between two computers yet, however all the backend should exist now for that to work properly
In addition to these items, we have a number of things we haven't started yet, but wish to complete before the first test:

  • Teams
  • Character ability management
  • Score keeping and a win/loss condition