GameDevHQ — Day 20 — Creating the Weapon Baseline
For today we started our development in proper by working on our chosen roles to put together a 2.5D side-scrolling shooter. My role for this section of the project was developing the different weapons that the player will switch between as they upgrade themselves by destroying and downgrade themselves by receiving damage. Using the sprites we were provided I set about creating what would be our baseline for different attacks the player could use. The idea behind these shot types are for them to act as methods of attack that provide some gameplay variety but are fairly simple to implement. This way if we try to design more difficult to implement mechanics we have these attacks already made to fall back on if any larger undertaking doesn’t make the cut for the submission deadline. These shot types each had a unique property that would provide different utilities that would scale in power for the player as they defeat enemies and upgrade their abilities. The current shot types that are implemented so far are:
Single Shot: The basic shot that fires at a medium fire rate and each hit deals one damage to the enemy. On hit the shot is deleted meaning each shot can only hit up to one target. By the design prompted in the instructions for the project if the player receives any damage while using any of the other shot upgrades this is the shot type they will downgraded to. Additionally if the player receives any damage while in this lowest upgrade level they will be destroyed and the game will end.
Triple Shot: The player fires three shots in a burst, each shot will be consumed on hit but allows the player to deal three hits of damage in a short period of time. To balance this out as being aa damage upgrade to the sustained fire of the basic shot there will need to be some tweaking to the fire rate of the triple shot to put it at a higher amount of hits per second than the basic single shot. This makes it an options that is strong against clusters of up to enemies or as a means of quickly dealing damage to a boss.
Wave Shot: The player fires a shot that is in a crescent shape that stretches vertically outward. The main benefits of this shot type is that it covers a wider area than the other shot types and the projectile is not destroyed when in contact with an enemy. This allows the shot to pass through multiple targets making it a strong option against groups of weaker enemies.
The logic for this and the previous other two shots are simple implementations that translate the shot object to the right if they are fired by the player and to the left if they are fired by an enemy. Unlike the other shots which are deleted upon contact with an enemy the wave shot requires some different scripting to prevent it from being deleted. One method being implemented to prevent this shot from being deleted on contact while also preserving that behavior for the other shot types is by categorizing the Wave Shot with the tag “Beam” instead of “Fireball” which will also be applied to the Laser Beam weapon that will be covered later in this post. This tag designates any shots that that it is applied to as persistent shots that do not disappear until they leave the bounds of the screen.
Homing Shot: The player fires single shots that track the nearest target. Programming for this shot type will use a chunk of the code developed for the homing shot type used for the Space Shooter project. The benefits of this shot type is it allows the player to take less risks by focusing on evasive maneuvers to continue dealing damage without having to put themselves at risk by putting themselves in the line of fire of the enemies to line up their own shots. In this case the shot is destroyed on contact with an enemy and to balance this to be one of the higher tier upgrades I want to test out how this shot type will perform if each shot deals two points of damage to their target compared to the usual one point of damage for all of the previously listed shots. Currently the logic for this shot has been ported over but it has not been fully implemented as of this writing due to its dependency on the player and enemy components that are still being developed.
Laser Beam: After a short charge up time the player fires a continuous beam in front of them that deals one point of damage on a short interval. This means that an enemy that stays in contact with the beam will take continuous damage. The laser is still currently being developed but the initial design has the laser operate like the wave shot where it is not destroyed on contact with an enemy which allows the player to sweep the laser over multiple targets. In the current design until we come up with something else this is the highest tier of weapon as it provides the ability to deal rapid damage to multiple targets making it very strong in almost all scenarios. As a balancing act there will be a short downtime between shots where the player has to charge the shot for a brief period before firing the laser for a set period of time. This means that while the weapon is strong the player has to manage the timing of the charge and shot duration to maximize their damage and not get caught out during the short downtime.
Current plans are to continue working on building the weapon options with my teammate Mar who is developing a system that allows us to switch between these shot types based on different conditions such as player damage and powerup collection. I also will be aiming to finish up the laser firing mode tomorrow. Following the wrap up for the day we worked on pushing our completed changes to the version control repository and learning a bit more on how to push changes upstream and pull changes from other repositories. This was a very informative session but also a bit nerve wracking since you don’t want to make a mistake that deletes a lot of work, especially the work of others. However it all went smoothly and we were all able to get our version up to date and we can keep moving forward when we resume development tomorrow. Until then mahalo for reading and take care. Aloha!