Week 14: Release Crashes

The the beginning of this week was spent banging my head against the desk due to a bug in release mode that would allow the server to play while the client would remain frozen. Since it was only happening in release mode I could not easily find the issue. It took about two days and a couple hundred tries before Visual Studio actually crashed, and it was because of that crash message that I was able to find the cause. It was a padding issue in the client due to using vectors in a struct for powerups. Originally, I was unaware of how many powerups we would have, so I was using dynamic memory. However, it became apparent after getting the powerup UI working that it was unnecessary. I cleaned up the client code and changed the vectors into arrays, and that fixed the padding issue on the client’s side.

The rest of the week was spent fixing the bugs with the powerup UI and finally redoing the menu systems. Gone is the neon, pixely chalkboard rip off!

Samantha Reed

Week 13: Credits & Gamepad

This past week I have been working on getting the credits up and running so the credits button actually has a function. Our music artist has also finished the credits music, so it was a good time to actually start working on that. The current layout of the credits is not finalized, and I plan on tweaking it once the music has been added.

The majority of my time was spent making sure that the menus have controller support. I had bare bones functionality implemented until my teammates brought in an Xbox controller for testing. It took a lot of tweaking to get the buttons to properly communicate to each other, and I had to add input event buffering due to the gamepad sending off multiple events at a time.

On a less technical note, we now have team shirts!

Samantha Reed

Week 12: Prep for Beta

The first part of the week was spent cleaning up the game in preparation for Beta presentations. This involved getting new features (countdown, etc.) to work across networking and fixing any potential game breaking bugs. The rest of the week was spent fixing the different bugs I noticed during the presentation playthrough. There was one bug where the networking worked, but nothing rendered on my screen after switching teams. Thankfully, I was not the one hooked up to the projector, and a few more tests showed that nothing was actually wrong. It was just the table that my laptop was connected to.

The window resize was completed on the 3D rendering side, so I worked with Nick to get the UI to properly change sizes with the window. There are still a few bugs to iron out, mostly in regards to the scoreboard and pause menu.

Samantha Reed

Week 13: Optimization and bug fixes

For the past few weeks I have just been trying to optimize and fix bugs. I have added a few things such as having the floor pulse and working with Sam to get that networked other than that it has just been bug fix here and tweak values here. I have gotten it to stay around 60 FPS on single player but there is no hope for that on multiplayer due to how the networking of objects is done.

Week 10: Fixing Scale, Player Positions, and Scoreboard

 

The first thing I decided to do was to make the scale of the game correct. Up until this point, we were using a mage, a test asset, that was about 3 meters tall. This is about 10 feet tall. This meant that all of our other assets (the hexagon and arena) looked really small compared to the mage. So I decided to scale the mage down to 1.8 meters, so that everything was scaled correctly. While it’s easy to scale the mage down, we had to change several different things for our game to be back to normal.

Continue reading “Week 10: Fixing Scale, Player Positions, and Scoreboard”

Week 11: AI and Strange Occurrences

Every time after someone scores, everyone is reset to a position in the arena and the camera was also being reset. So I had to ask my teammate where he was doing this so I could make sure it skipped the AI. Whenever the AI ran to something, noticeably the ball, it would cause them to go up into the air. Also, when I had the ball and I jumped, they would jump with me. When debugging, I saw that in my RuntTo functions, somehow, the y component was being changed even though I was multiplying y by 0. So I just bypassed that by manually setting it to zero after my calculations.

Then I noticed that if the AI targeted you but stopped before they could hit you, they ended up bumping into you afterwards. Meaning you would still be the target and it would treat it as if they had attacked you. So I just used an isAttacking bool that would null out the target object and the problem wouldn’t happen again.

Week 10: AI and Working

When play testing my AI I noticed that the tank would only hover around the main guy if it was another AI, so I added code that would have him hover even if you were a real player. Then I also noticed that the AI couldn’t score anymore because that goal was off the ground now and a simple throw forward wouldn’t get it high enough to score. So my teammate let me know what function I should call in the Camera in order for the AI to look up. So in the Score function, before they threw the ball, I rotated their cameras up before they tried to score. Later I realized that that wouldn’t work every time because then, when they would try to score, their camera would keep going in circles. So I just decided to take the easy route and rotate their camera in Init.

I saw that even after the AI hit you in attack, the target wouldn’t be nulled and wouldn’t actually change until they wanted to target someone else. So I just set it to null after they hit you. Then I finally decided that my second goalie shouldn’t actually be right next to the enemy teams goal with their goalie. I had it just run back and forth a little distance away from the goal that way it shouldn’t be in the way. It also attacks an enemy if its team has the ball.

Week 11: Scoreboards

The last week was primarily filled with getting Tom’s scoreboard to properly network and toggle. The toggling was easy since the scoreboard is its own script holding all of the game objects and buttons used to create it. All I had to do was make a function that activated or deactivated each object.

Networking the scoreboard did not take too much effort once Tom had all of his initial stats working. I added the stats for the scoreboard to the game state, and every time the game state would be sent the scoreboard would reach into the client to grab the specific stats of a specific player, even if that player is just AI. I had to add a few new functions to the player controller so I could easily set specific stats (the controller is called on when the scoreboard updates itself), but, otherwise, I did not have to tamper too much with the player controller.

There was also an issue with the AI when the player returned to the main menu and started a new game. If they switched teams, then the AI would still be on the blue player they became. I added a remove component function to game objects that allowed me to pass in the class of the component. It would remove the first (and hopefully only) component of that type.

Samantha Reed