Video Game Production



Tank'd


Tank'd is a local split screen free-for-all where four players each control their tank and face off in a battle arena setting. Choose between two maps to do battle in, pick a class that best fits your playstyle, and drive around and fire upon your foes. You can drive into item blocks to acquire items and use to your advantage, and even find health and armor pickups when you are low on HP.




I am the lead programmer for Tank'd. Having made the scripts for player movement and shooting, setting up both Xbox and PS4 controller inputs and for four players, making a class selection as well as unique class abilities, and creating an inventory system reminiscent to Mario Kart and creating the items themselves. Scripts were made to be editable in the inspector for others to adjust and balance certain values, and I always kept the player in mind as I worked on the functionality of our game's features.


Game Link






___________________________________________________________________________________





Sprint 7

December 16, 2020


For this final sprint, much of my tasks involved wrapping up those last few cards of implementing additional items. This includes the Pit Bumper, which allows the player to equip itself with a spike attachment in front of the tank, and is able to ram themselves forward and one-shot kill another player. Another item, the Sludge Bomb, creates a temporary area on the ground that will slow player movement. To achieve this, I made sure the Sludge Bomb GameObject would only be destroyed when interacting with the ground layer - this way it won't be destroyed from touching walls and spawn a sludge spill that's floating in air. Many of these newly implemented items did require me to go back into old scripts, so I did a lot of debugging and internal playtesting to ensure I would not create new problems.


Cards Completed
  • (3) As a Player, I would like to load and shoot a Sludge Bomb.
  • (3) As a Player, I would like to equip and use a Pit Bumper.
  • (1) As a Player, I would like to equip and drop a Mine behind my tank.
  • (1) As a Player, I would like to load and shoot an EMP Round.

After having finished my remaining cards, I did one final sweep to discover some of our scenes were not set up correctly, and after building the game some UI was either misaligned or not functioning. I spent many hours resolving this, and after those final touches the final build was made just in time for release.

Overall, production was challenging but rewarding. There were moments I wasn't sure my skills as a programmer were up to snuff, but I did prevail in the end. I thoroughly enjoyed learning and applying myself in creating functioning game mechanics, features, and systems for our 4-player tank brawl. The experience from this game production cycle has been invaluable for me in better understanding the developing process as well as game design.





__________________________________________________________________________





Sprint 6

November 21, 2020


Now that the item system is implemented, I began working on programming the items themselves. What I did get done, but not fully tested, is our Viper Round (a homing missile) and Rail Spike items. The Rail Spike will simply be dropped behind the player when used, and remain as an obstacle for all players until someone runs into it - while taking damage. As for the Viper Round, I figured out I could use a raycast to check if a player is in its sight, make that player its target, and follow it while also gradually changing its rotation.




I also worked on completing the Collector class's special passive of holding up to two items instead of one. This gave me some trouble with trying to rewrite the logic for the main inventory script, and considering the visual feedback through the UI. Rather than overcomplicating things, I figure the Collector class can simply use the one item they are holding twice (two charges). Verifying with Tyler and Billy, the producer and lead, I went ahead with that plan. It just so happen to be a variable I originally didn't need from the tutorial, and reworked it for my needs. Because of this, adding to the script did not contradict with the code.




Cards Completed
  • (3) As a Player, I would like the Viper Round to lock onto the nearest Player to give them the feeling they are being chased with perfect accuracy.
  • (3) As a Player, I would like the Collector's Tank to be able to carry two items instead of one.
  • (1) As a Player, I would like to use the items I pick up in-game.
  • (1) As a Player, I would like to equip and drop rail spikes behind my tank.
Cards Incomplete
  • (3) As a Player, I would like to load and shoot a Sludge Bomb.
  • (3) As a Player, I would like to equip and use a Pit Bumper.
  • (1) As a Player, I would like to equip and drop a Mine behind my tank.

During this sprint, we had our latest electronic prototype out for players to playtest. We were able to get some decent feedback in terms of bugs and areas in need of polish. Unfortunately, due to the nature of Tank'd being a split screen multiplayer with controller input only, we have been in the dark as far as getting feedback in regards to the fun factor of our game. This is something we were worried about very early on, but only now are we really hurting and realizing it.

For the final sprint (sprint 7), I am looking to finishing the rest of our game's items. We have a Beta build deadline soon approaching, and we are intending to get those bugs and polish in our game for our playtesters. There will be a lot of backend work from me as well: setting up all our prefabs, fixing code to make for smoother transition from class select to playing, and generally aiding the team in any programming tasks.





__________________________________________________________________________





Sprint 5

November 6, 2020


I had quite the challenge in creating and understanding an item system that would work for our game. That being receiving an item at random upon driving into an item block - like Mario Kart. I had followed one method, tried to fit it in for our purposes, then later scrapping it and following a tutorial that better covers what we are looking for. Now the player can run into an item block - destroying it only when their inventory is empty, receive an item at random from an array and carry it, and be able to use it and remove it from their inventory.

We also have our second electronic prototype deadline coming at the end of the sprint, and so priorities shifted a bit. As we self-playtested and debugged, we realized our current player respawn was lacking. Because we want players to respawn where they died, we want to give them a chance to come back fairly. I created a coroutine function to provide the player with visual feedback with the player's tank, and giving them a temporary invulnerability of 3 seconds.




Cards Complete
  • (3) As a Player, I'd like to be able to pick up and hold items and use them to my advantage.
  • (3) As a Producer, I would like an item pickup system to allow for the randomization of any number of pickups.
  • (1) As a Player, I would like to know when I am respawning and for it to be fair.
Cards Incomplete
  • (3) As a Player, I would like the Viper Round to lock onto the nearest Player to give them the feeling they are being chased with perfect accuracy.
  • (3) As a Player, I would like the Collector's Tank to be able to carry two items instead of one.
  • (1) As a Player, I would like to use the items I pick up in-game.

With our last feature added (item system), moving forward we will begin creating the items themselves. I will also have to accommodate our Collector class in the code for the item system as well (inventory size and item use). Programming interconnecting scripts for an inventory has been a weakness of mine, but I do believe in my ability to create the logic for said Collector class. I am also looking forward to the simple and straightforward single scripts for when making the items.


Tutorial Link






__________________________________________________________________________





Sprint 4

October 24, 2020


Unfortunately, progress slowed down a bit for me this sprint. Not to say I didn't get any meaningful work done, but they were certainly easier, less time consuming tasks. In fact, much of the tasks completed were cards carried over from the previous sprint as well as changes made based on playtester feedback.

I finished creating the unique abilities for the rest of the classes: a speed boost for the Light Tank, a temporary shield of invulnerability for the Heavy Tank, and a self-heal for the Collector Tank. I even went back and finalized the powerful shell blast ability of the Assault Tank. Much of our players did not feel enough of a difference between the playable classes. Now with class abilities finally implemented, I believe this will capture that uniqueness.




Cards Completed
  • (1) As a Player, I would like an activatable ability for the Speeder Class.
  • (1) As a Player, I would like an activatable ability for the Heavy Class.
  • (1) As a Player, I would like an activatable ability for the Collector Class.
Cards Incomplete
  • (3) As a Player, I'd like to be able to pick up and hold items and use them to my advantage.
  • (3) As a Producer, I would like an item pickup system to allow for the randomization of any number of pickups.
  • (3) As a Player, I would like the Viper Round to lock onto the nearest Player to give them the feeling they are being chased with perfect accuracy.

Players felt there was too much precise aiming involved in order to hit other tanks. I had messed around with the tank shell hitbox to improve the accuracy of the shell, and hopefully allow a more fair and right feel with moving and shooting.

Again, I didn't get as much done as I had planned. I did begin working on the item pickup, and looked at how exactly I will tackle that as there are several different methods I can go with. I intend to pick up the pace for the next sprint, and look forward to creating our game's item system.





__________________________________________________________________________





Sprint 3

October 11, 2020


For this sprint there were a lot of issues I ran into when completing my cards, and also for getting things ready for our first electronic prototype as the deadline for that was soon approaching. My problems were as such: getting class selection to work with controller inputs, a class information UI, transitioning from class selection to playing the game for four players, having this transition be seamless, have a player respawn set up, and players damaging each other.

To start, for controller input with class selection I kept things consistent with how I have done inputs for movement and shooting thus far. I created a string that calls the input manager as well as the player number within the same script, and created a float out of that for joystick controls for when the player cycles through the list of playable class options. A time between displaying one class to another was required as otherwise the players would cycle through classes too quickly.

Getting the class selection to gameplay working was particularly tricky when moving between scenes. Moving four players across scenes was an answer I just did not have given the time, and just settled with the class selection be within the same game scene.




Finally getting our scene set up and ready for playtesting, I set up the scriptable objects I had made to display the class information so that the player can make more of a decision on what class they want to play. When playtesting ourselves we learned of a new problem: the player's tank can be tipped over on its side. I added a raycast to shoot downward from the tank to check if it is grounded, and implemented a countdown timer for when the player will respawn and reset their orientation should they not be grounded. Sharing the same function, it is also working for when the tank takes enough damage for the player to die.




Cards Completed
  • (3) As a Producer, I would like all four players to be able to select their tank class before each game begins.
  • (1) As a Player, I would like the class selection method to be implemented into the pre-game waiting lobby of our game modes.
  • (1) As a Player, I would like my tanks to respawn after they are tipped over so that I can get back into the action.
Cards Incomplete
  • (1) As a Player, I would like an activatable ability for the Speeder Class.
  • (1) As a Player, I would like an activatable ability for the Collector Class.
  • (1) As a Player, I would like an activatable ability for the Heavy Class.

Besides my individual tasks I was assigned, there was a lot of getting things ready for our electronic prototype. I feel as a team we collaborated well in setting small goals for ourselves and communicating what we need done for playtesting. Scene set up, controller kinesthetics, and class uniqueness became our main focus on what we knew we could get done for players to test.





__________________________________________________________________________





Sprint 2

September 24, 2020


This sprint I had a more steady workflow in terms of task progression, with the exception of minor hiccups. The important thing is big strides were made, and things were eventually working properly. I ended up adding a value to the tank object's gravity to fix the default slow fall and give it a sense of weight when driving off ledges. I also switched the tank shooting feature from hold and release for a charge shot to just shoot when the button is pressed with a time between shots value added. We felt this was a more comfortable and more enjoyable way to do combat.

But the biggest task I was assigned with was creating a class selection for the players to cycle through, then being able to ready up with their chosen class and jumping into the game scene. I was able to achieve this using Scriptable Objects, utilizing a template I made for class information, and attaching the respective tank class prefab so that each class is listed and can be viewed. As of right now, only for a single player has this been tested and is functioning. I also went ahead and messed with movement speed and fire rating to give classes uniqueness, and even started with creating a unique class ability for the Assault Tank.




Cards Completed
  • (1) As a Player, I'd like the tank movement controls to be fluid so that I feel in complete control of my tank and that the feedback is precise.
  • (3) As a Player, I would like to select which class I am playing.
  • (1) As a Game Designer, I do not want the players rapid-firing while in-game.
  • (1) As a Player, I would like each class to have a different feel from one another.
  • (1) As a Player, I would like an activatable ability for the Assault Class.
Cards Incomplete
  • (3) As a Producer, I would like all four players to be able to select their tank class before each game begins.

As mentioned, there were some minor obstacles I faced during this sprint such as retracing my work from sprint 1, understanding Scriptable Objects, and getting the scene transfer to function right. As a team, we also worked out issues and resolved them like the inputs for the players, split screen, and debugging. Moving forward, we have set our goal to complete any tasks that pertain to getting a fully functional and playable level ready for the electronic prototype.





__________________________________________________________________________





Sprint 1

September 11, 2020


For this sprint as programmer, I focused mainly on accomplishing writing basic movement, shooting, and damage received to function for the player's tank. While working closely with our lead, Billy, and producer, Tyler, we wanted to reference a Unity tutorial so that our framework for our code would be solid and consistent. By following what the tutorial covers, I have created a sort of template that can be later adjusted to our needs for how we want our game to be played.


Tanks! Unity Tutorial



Cards Completed
  • (1) As a Player, I'd like player controls to be simplified to a controller so that don't have to worry about different key binds.
  • (3) As a Player, I'd like to be able to charge up my cannon and shoot a destructive shell out of my tank.
  • (1) As a Player, I would like to feel the destructive power of my tank when I hit another player with my shots.
Cards Incomplete
  • (1) As a Player, I'd like the tank movement controls to be fluid so that I feel in complete control of my tank and that the feedback is precise.



One of the biggest problems our team faced was trying to set up an HDRP Unity project to work with GitHub, as the team wanted to use it simply to learn it. There were quite a lot of errors we were getting initially when accessing and sharing the project. At first we restarted the project to try a different HDRP version, and this seemed to work out for us for a little while. But, new errors and headaches came later on, so we decided to do without it.

Thankfully, these technical issues did not set my work back by very much. However, it was the uncertainty and unstable workflow in the beginning that became my issue. I pushed through the rough start, kept in constant communication with the team, and managed to complete the majority of the tasks I was set out to do.


Tutorial Link

Comments