Final Build - Documentation Devlog


Comparison between Concept Document and Final Game

A lot of changes have been made to the game since the original concept document was created. I'm sure a lot of first-time game developers are guilty of this, but my original concept for the game was far too ambitious. 

First of all, I initially wanted my game to have an arena mode in the game which would allow for 2-4 player PvP game. While I still think that this would be a cool feature to implement, there just was not enough time, especially considering how the tutorial only got completed in these last 2 weeks, and the endless mode is completely new in this last week. However, I have created the player object in such a way that there could be multiple players in a scene being controlled by different methods, if I had the time to implement this.

I also had the grand idea of making this game into a complete Metroidvania, which looking back on how I progressed throughout the weeks just seems like a ludicrous idea. However, I still think that this would be a cool idea to do in the future if I ever update this project.

Another feature that I didn't really mention in my original design document, but had thought about, was having many different abilities of each type. For example, there would be a shield ability that instead of reflecting the projectiles like the current shield does, it would destroy the enemy projectiles and recover a small amount of juice for the player. The player would be able to pick and choose whichever version of each ability they preferred, allowing for more varied gameplay. Having alternate abilities like this is something that I still think would be a cool addition to the game, and I have "future-proofed" the game if I were to add this feature by having a variable on the player which determines which version of an ability will be used.

Another cut idea was different types of enemies. This would include enemies that could fly or create their own shields, as well as enemies that are just stronger versions of other enemies. This is something that would add more depth to the gameplay and make it more enjoyable but I just did not get around to implementing it in the game.

Overall, the main idea of what I wanted to create has stayed the same, even though many features that I wanted to add did not make it into the final product.


Summary of Feedback from Week 12 Testing Session

As mentioned in the Week 12 devlog, I didn't really have a good form made up for receiving qualitative feedback, and as such I didn't receive a lot of specific feedback on how to improve general areas of my game. However, there was still a decent amount of feedback which gave me enough information on areas to improve.

One responder noted that the use of the middle mouse button to recharge the player's juice was not the best control, as a lot of browsers will often hijack this control for auto-scrolling. Apart from already having an alternative control in 3 on the keyboard, I didn't think that there was anything that I could do about this. However, after changing the viewport dimensions for the game on itch.io, this seems to have been resolved (at least for me). Another issue stemming from this that someone pointed out was that the player's platforms were not appearing where they were meant to, but the auto-scrolling fix solved this as well.

A piece of feedback that many people mentioned was the inability to know how much "juice" the player had left for their abilities. This has been remedied with the addition of the particles that spawn when recharging, to better demonstrate that an action is occurring, as well as a number in the user interface directly showing the player's remaining "juice".

Another piece of feedback was that the controls were not intuitive enough. By that point in development, I did not have a tutorial in the game, and as such the only way to know the controls was to look in the description box below the game on itch.io. However, there is now a tutorial in the game which I think sufficiently explains the abilities to the player, but there is also room for improvement in the delivery of the controls.


List of Assets with Short Descriptions

Art

ASSET NAMEDESCRIPTION
healthThis png is used in the UI of the game and goes behind the player's health number.
particleThis is a white square which is used as the sprite for the particles.
playerIdleThis is a sprite-sheet for an 8 frame animation, as the player was initially going to have animations based off of what action they were currently doing. While this system didn't make it into the final game, the first sprite in this sprite-sheet is what the player and enemies use as their sprite.
powerThis png is used in the UI of the game and goes behind the player's juice number.
projectileNewThis is a white square which is used as the sprite for the player and enemies standard attacks.
scoreThis png is used in the UI of the game and goes behind the player's score number.
standardPlatformThis is a white rectangle which is used as the sprite for the player's platform ability.
standardShieldThis is a white rectangle which is used as the sprite for the player's shield ability.
standardUltimateThis is a sprite-sheet for the four different components of the player's ultimate ground-spike ability.
terrainTilemapThis is a tile map of the original terrain for the game, which would have had different sprites for surfaces/corners/other pieces of terrain. This is still used in the game but all the sprites in this sprite-sheet are now the same colour and indistinguishable from each other.


Physics Materials

ASSET NAMEDESCRIPTION
PlayerPhysicsThis physics material is used on the player's standard collider, and is what handles the physics of moving along the ground. It has a friction value of 0.85 and a bounciness value of 0. 
WallPhysicsThis physics material is used on the player's other collider which is wider than their standard one and thus is the only collider which will touch the walls. It has a friction value of 0 and a bounciness value of 0, meaning the player will slide down walls instead of stick to them.


Prefabs

ASSET NAMEDESCRIPTION
BasicPlayerProjectileA prefab of the player's projectile attack.
BasicPlayerShieldA prefab of the player's shield ability.
BasicPlayerUltimateA prefab of the base of the player's ultimate ground-spike ability.
BasicPlayerUtilityA prefab of the player's platform ability.
EnemyBulletA prefab of the enemies' projectile attack.
ParticleA prefab of a particle which stays in place.
ParticleFallingA prefab of a particle which has gravity applied to it.
ParticlePlayerA prefab of a particle which moves towards the player's position.
ParticlePortalA prefab of a particle which moves towards a portal's position.
ParticlePortalBigA prefab of a larger particle which moves towards a portal's position.
PlayerA prefab of the player character.
PortalA prefab of the portal objects.
RespawnerA prefab of an empty object with a collider which resets the player's position somewhere else on collision.
StandardEnemyA prefab of the enemies in the game.
TutorialTextChangerA prefab of an empty object with a collider which can enable or disable an object in the game world.
ultPart2A prefab of the second part of the player's ultimate ability.
ultPart3A prefab of the third part of the player's ultimate ability.
ultPart4A prefab of the final part of the player's ultimate ability.


Scenes

ASSET NAMEDESCRIPTION
EndlessThe scene where enemies will continue to spawn at portals placed in the game world until the player dies.
MainMenuThe menu scene, featuring the title of the game, buttons to access the two game modes, and a portal for aesthetics in the background.
TutorialThe scene where the player can get to learn the controls of the game and how the player moves around their environment.


Scripts

ASSET NAMEDESCRIPTION
DamageEnemyThis script is attached to the player's projectiles and allows them to collide with and damage enemies.
DamagePlayerThis script is attached to the enemies' projectiles and allows them to collide with and damage the player.
DestroyAfterTimeTaken from tutorial work, this script takes a time in seconds and destroys the game object it is attached to after that amount of time.
DestroyOnCollisionTaken from tutorial work and modified, the original script would destroy the game object it was attached to after colliding with an object with a specific tag. The modified version now has a degree of lenience, meaning it will not be instantly destroyed upon collision, but instead will start a timer and check again once the timer is up. If both times it is colliding with the other object, it will be destroyed.
FadeInChanges the alpha value of an objects SpriteRenderer in increments to make the object fade into view.
FadeOutChanges the alpha value of an objects SpriteRenderer in increments to make the object fade out of view.
ParticleChangeColourThis script is attached to the various particle objects in the game. Which layer the particle is on determines how much the colour will change every frame.
ParticleMoveToObjectParticles which are a part of the "portals" have this script attached to them, as it allows them to move towards the centre of the object at chosen speed.
ParticleMoveToPlayerParticles which are a part of the player's recharge ability have this script attached to them, as it allows them to move towards the centre of the player at chosen speed.
PlayerDieDisables the player object when their health is at or below 0.
PlayerMovementHandles the player character's movement, including their horizontal movement, jumping, and checking if the player is grounded.
PlayerStandardAttackAllows the player to spawn a projectile which is travelling in the direction of their mouse pointer while holding down the left mouse button or 1 on the keyboard.
PlayerStandardRechargeRecharges the player's "juice" while holding down the middle mouse button or 3 on the keyboard. Also in charge of spawning the particles for this ability.
PlayerStandardShieldAllows the player to spawn a shield on their left or right depending on the position of their mouse when they click the right mouse button or press 2 on the keyboard.
PlayerStandardUltimateThis script will spawn the base of the player's ultimate ability on the ground below where their mouse pointer is when they press 4 on the keyboard.
PlayerStandardUtilityAllows the player to spawn a platform at the location of their mouse pointer when 5 is pressed on the keyboard.
PlayerVariablesHolds various variables that the player has, such as their health, current and maximum "juice", score and the amount of damage that their abilities do to enemies. Also holds variables which would allow for alternate abilities to be created and swapped out with current abilities.
RespawnPlayerHas a respawn location and time delay variables. Once the player touches the object this is attached to, it will wait out the time delay before setting the player's location to the respawn location. Also enables and disables the FadeIn and FadeOut scripts on an object which covers the screen at the appropriate times.
RotateTaken from tutorial work and modified, this script makes the object it is attached to rotate by a given amount. The modified version allows the direction of rotation to be randomised.
SceneSwitcherTaken from tutorial work, this script changes the current scene when it is attached to a button and the button is pressed.
SceneSwitcherDelayedModified version of SceneSwitcher, this script will enable the Rotate and ShrinkThenDestroy scripts on the player, allowing these to play out for a bit before switching scenes.
SceneSwitcherOnObjectDisabledModified version of SceneSwitcher, this script will switch the current scene when the player object is disabled (i.e. when the player dies).
ShrinkThenDestroyThis script will reduce the scale of an object by the chosen amount each frame, deleting it once it gets below a certain threshold or disabling it in the case of the player.
SpawnAttackPartThis script is attached to the first three prefabs of the player's ultimate and allows them to spawn the next part after a short delay.
SpawnEnemySpawns an enemy at the object's location, with decreasingly short delays between spawns as the player's score increases.
SpawnParticleSpawns a particle at the objects current location every frame, putting the particle on the same layer and rotation as the object, as well as inheriting its SpriteRenderer's colour.
SpawnParticleCircleSpawns particles every frame in a radius around the object it is attached to. Particles inherit the layer and SpriteRenderer's colour from the object this is attached to.
SpawnParticleFallingSpawns a particle at a random position within a defined area every frame. Allows it to be spawn particles the whole way along the player's platform ability, or the whole way up and down the player's shield ability. Particles inherit the layer and SpriteRenderer's colour from the object this is attached to.
SpawnParticleUpwardsSpawns a small amount of particles at random x positions along an object. The direction that these particles move in is based off of how far to the left or right the particle spawns using trigonometry.  Particles inherit the layer and SpriteRenderer's colour from the object this is attached to.
SpawnReflectedProjectileAttached to the enemies' projectiles, this script will make the projectile destroy itself when it comes into contact with the player's shield, as well as spawning one of the player's projectiles at the impact location moving in the opposite direction that they enemy's projectile was.
StandardEnemyAttackAllows the enemies to spawn projectiles which travel towards the player's location. Only spawns projectiles if there is an active player object in the scene. 
StandardEnemyDieDestroys the enemy object when their health is at or below 0.
StandardEnemyMovementAllows enemies to move to the left or right depending on where the player is, as well as jumping if they come into contact with a ledge and cannot proceed. Also makes the enemy stop when they get within a certain range of the player.
StandardEnemyVariablesHolds various variables about the enemy, including their health, the amount of damage their projectiles do, whether they are currently attacking the player or not, and if they are a stationary "tutorial" enemy.
TextToggleOffWhen the player comes into contact with a trigger with this script attached, the chosen game object will be disabled.
TextToggleOnWhen the player comes into contact with a trigger with this script attached, the chosen game object will be enabled.
UpdateUITextUpdates the player's health, "juice" and score in the UI every frame.

Get Ability Game

Leave a comment

Log in with itch.io to leave a comment.