Sprites:
Sprites I used in the final product:
This is the main character sprite I created. This sprite is what the player will be using throughout the game. Since my game was going to be a shooter game, I decided to design my player after a soldier as it will set a setting of war into the game. I originally made the character look less detailed and blocky but decided to update the character to look like this as it is much better looking.
This sprite is the Zombie enemy that I had to fall back to after I found that the enemy soldier was too hard to code. I made him look very bloody and gave him green patches of skin to make him look more like a zombie. The zombie shares a very similar look to the player soldier as the zombie used to be a soldier, before he turned into a zombie, and still has the soldiers armour on.
Sprites I did not use in the final product:
This is the original design for the enemy. The enemy shares a similar look to the player soldier as the enemy is a soldier aswell, but the enemies armour has a white and grey look, as they are winter soldiers. I decided in the end not to use this sprite as coding the enemy to shoot a gun was too difficult, so instead I used the zombie as I could make it attack the player with a melee attack that is far easier to code.
Weapons:
Weapons I used in the final product:
This weapon is the machine gun that is the only weapon available to the player in the game. It has a high fire rate so it is ideal to use as it can deal damage at a higher rate. I designed this by looking at examples of guns and then created it in Piskel to use. This design has 4 different shades of grey to add a camouflage look to it so it does not look plain and boring.
Weapons I did not use in the final product:
This weapon is the pistol that I wanted to add as a secondary weapon to my game, but never got the time to do it as it was too difficult to code the machine gun alone, so coding another weapon would have brought many bugs along with it. I also designed this weapon by looking at examples of pistols online and then used Piskel to create the weapon. The pistol was originally meant to have a medium fire rate with medium damage, but it never made the final game. I wanted to have this as a permanent weapon for the player, and the player could swap between the primary weapon to the pistol I had no time to code it and it was too difficult to do.

This is the shotgun I had designed from online inspirations. This gun would have had been a close range weapons in which when fires, the shells would scatter and cover a wider area, but also would have a slow fire rate and short range. This weapon would have been useful for close quarters and would kill an enemy instantly if the player was close enough to the enemy. This weapon did not make it to the final game as the coding would have been too difficult, like the pistol, and there were plenty of other things to try and fix at the time.
Enemy weapons
This is the zombie enemies long range attack, If the player gets close enough to the zombie, the zombie would chase the player while firing acid, and if it touches the player than the player will instantly die and have to restart the level. I wanted the long range attack of the zombie to be somewhat acidic as the zombies cannot use weapons such as machine guns, but acid suits them better as the saliva of a zombie is extremely harmful. I also made an animation for the acid, so when it is fired, the animation will play until the acid is destroyed.
Collectibles:
Collectibles that did not make the final product.
When I was in the early stages of developing my game, and still planning some stuff, I wanted to have a collectible system. These collectibles would be hidden around the map and would give the player points for each collectible found. I designed this collectible to look like it is covered in jewels and looks very valuable. This did not make the final game as I had forgotten about this as it was not that important, and the coding would also have been complicated although not too hard to do.
Ammunition:
This screenshot shows an ammo mag that I had designed in Piskel. This mag was originally supposed to be in the game to show how much ammo is left in every clip of the gun, so when the mag became empty, the player would not be able to shoot unless the gun is reloaded. I did get this to work in the game, but then it became really buggy and too many issues had arose from this, such as the reload not working properly, or the gun not being able to shoot at all until a few seconds after the gun had actually reloaded. I liked this concept and wanted to keep it in the game, but the issues forced me to remove it from the game.

This is my design for an ammo pack. I decided that I wanted to add ammo packs to the game so that the player would be able to replenish ammo if there is no ammo left. I like the design as it is simple and easy to recognize what it is. With this pack, the player gains a certain amount of ammo for the gun, but it cannot exceed the max ammo limit. This pack is very useful and is an important feature of the game.
Layout Screenshots:
Main Menu:
This screenshot shows the main menu of my game. There are 3 options here and a simple background design. New game starts the main game from the beginning, load game reverts back to the previous save point so the player can carry on their progress. Finally, the controls options takes the player to a control page, which shows the player how to play the game by showing the controls. In that screen, there is also a feature to return back to the main menu. The background is orange because I did not have alot of time to make the background look better, and I used the tilesets from my game for the background aswell so that it is not just an orange background, but it also has some tilesets to make it look better and more eye-catching.
Level 1:

These screenshots show what my game looks like. I did not have much time to make a background as I was too busy working on other things, and a background was also hard to do as I am not very good at art so I could not make a good background. The yellow background was instead put in place to make the game look like it is in a beach area, as the tilesets are wood and there is also water in the map. I made the wood textures in pyxel. I made many different designs before I chose this as my final tileset, but I removed the old designs as I did not like them and they did not look good in the game. I also made a crate tileset. The player is currently standing on one right now. This also makes the game look more like it is on a beach as during wars, beaches tend to have crates scattered, usually filled with supplies. I also added some water into the game so if the player falls into the water, the player will die and have to restart the level. I think the water made the game look even better and gave more detail to the level. The screenshot also shows the enemy zombie that the player will have to kill, and the player holding the machine gun on the other side of the map, which shows what the game will play like.
Control Screen:
This final in game screenshot shows the victory screen. This is where the player will be sent to if they have defeated the boss in the first level. I did not have much time to work on this properly as it was something I decided to do at the very late stages of the development of the game. It shows the player, the gun the player and uses and the enemy zombie with some text above. I also used the tilesets I used for the level in this screen to make it look less boring, although it still does not look as good as I wanted it to. I would have liked to add more detail to the screen, possibly a few buildings in the background.
Coding:
Enemy Movement & Shooting Coding:

This screenshot shows the code I had to use to make the enemy move and also shoot. I made an attack state for the zombie so that when the player is in the zombies line of sight, the zombie would go towards the player and attack it. I have also coded it so that if the player is no longer in the zombies sight, the zombie would stand still and play its idle animation until it has sight of the player again. In order to give the zombie the line of sight code, I had to give it line of sight as a behavior, and then set the range and cone of the line of sight. For example, if the cone was 360, the zombie can see all around it, but if the cone size was 180, it would only be able to see in one direction. The range of the line of sight increase how far the zombie can see, so the further it can see, the earlier it can begin to attack the player. For the shooting code, I decided that when the zombie has line of sight of the player, it would use its ranged attack, in which is shoots acid at the player. I coded it so that every 1.5 seconds, the zombie would shoot acid and the player would have to avoid it. The speed of the acid is set to 250 so that it is not too fast, but still puts up a challenge. To make sure the acid cannot just fire through the entire level, I made sure that if it hit a tileset, the acid would destroy itself, and if it hit the player, the player would then die and have to restart.
Enemy Health Coding:
The enemy health code was really simple. I made a global variable and set how much health I wanted the enemy to have. For this enemy, I gave it 35 health. In order for the zombies health to go down, I made sure that every bullet that hit the zombie would take 1 health off the zombie, so it would take 35 bullets from the player in order to kill the zombie. I gave the zombie a high amount of health as it is the only enemy in the game, so I wanted to make it somewhat challenging. I also added a code where if the zombies health fell to 0, the player would then have to wait 3 seconds and once the time is up, the player will be sent to the screen that says you have won the game. Enemy health is a very important factor as without it, the enemy would not be able to die so there would be no point of having an enemy if it cannot die.
Pick Up Weapon Coding:
This section of coding was by far the hardest and most time consuming code of my entire game. It took so many different methods and attempts to try and pin the gun to the player but none worked so I had to find another different method. I had some help with this section of coding, and global variables seemed to have been more effective than using pins. With this global variable, I set it so that when the level starts, the HoldGun global variable would be set to 0. This means the weapon is not in the players hand and cannot be used. Then I set it so that if the player collided with the weapon, the HoldGun variable would go up by 1, meaning the gun is now in the players hand and can be used. In order for the gun to stay in the players hand, I had to add another code where every tick, the gun would be positioned in the players hand, which means it doesn't move away or behave inappropriately.
Shooting Coding:

For the shooting code, I originally used the space button to shoot. But due to the code with holding the weapon and mirroring, I had to switch to different keys, and for the shooting I decided that the best bet would be to use the mouse. Left click makes the player shoot left and right click makes the player shoot right. In order to do this properly, the left click also makes the player look left and shooting right makes the player turn right. I also made sure that the arrow keys, which are the keys needed to move, altered the way the player faces. Pressing left arrow key makes the player look left and pressing the right arrow key makes the player look right. This bit of code also ties in with the enemy health code. In the code I set it so that when the bullet hits the zombie, 1 point is taken off the enemies health and will eventually kill the enemy. In order for the bullet to not be able to travel through the level and tilesets when fired, I added in the code where if the bullet's hit any of the tilesets in the game, the bullet will then destroy itself.
Weapon Ammo Coding:
This smaller piece of code is the ammo counter. This is visible in the top left of the game screen and shows how much ammo is left in the weapon. As shown in the code, when the weapon runs out of ammo, the text that shows how much ammo is left turns red, and also changes from showing how much ammo is left to "Out of Ammo" so the player knows when there is no ammo left in the gun. This also needed a global variable to work properly. The global variable starts at 53 (starting the level always uses a bullet, could never find a fix for that so this work around had to do) and for every bullet fired, the number drops by 1.
Mirror Gun Coding:
The mirror code is what makes the player turn to face the direction in which the player is either shooting at or walking towards. So if the player shoot or walks right, the player will always face right so the player knows where he is moving. There is also code for animations in this, but I never managed to get the walking animations to work so there is no walking animation for my player. Without this code, the player sprite did not work as it should, it usually did not turn right or left when needed to so this coding fixed that issue.
Save & Load Coding:
This very simply piece of coding is what I used to save and load the game. By pressing the O key, the player can save their progress and by pressing L, the player can resume their progress from where they left off.
Global Variable Coding:
Global Variables are very important codes in this game. Without these variables, the enemy would have no health, there would be no ammo limit in the game, and I would not have fixed the bug where the player could not pick up the weapon properly. Global Variables are code that are usually used to give objects or sprites health, and are used for many other things.
Restart Level Coding:
This is a piece of code that shows how the player can restart the game manually, and what can also make the game restart. The first piece of code shows that when the player is destroyed, the level restarts, which obviously is an important factor in the game. The code below that shows that when the player collides with the enemy, the level automatically restarts and the ammo global variable resets. I also added a manual restart code, so when the R key is pressed, the level restarts and the ammo variable resets yet again. The final piece of code simply shows that when the level starts, the shooting code is deactivated so the player cannot shoot unless the gun is picked up.
Main Menu Coding:
This is a very small code which I created for the main menu screen. For the first piece of code, I created an invisible box sprite which went behind the "New Game" text. When this box is clicked on with the left mouse, the player is taken to the first level of the game and then the player can play the game. The second piece of code shows that when the text "Load Game" is clicked on, the game automatically loads the previously saved file. And for the final piece of code, if the invisible box behind "Controls" is clicked on, the player is taken to a screen that shows the controls for the game, so that the player knows how to play the game.
Control Coding:
This is the shortest piece of code in my game and by far the easiest to do. This code is for the "Controls" screen of my game, which is the page that shows the controls for the game. The code simply says that when the left mouse button is clicked, anywhere on screen, the player will be sent back to the main menu. This allows for easy access between the main menu and the controls screen of the game.