Hello, I am Mehmet
I am a game programmer with over three years of experience in both Unity and Unreal Engine, I have been in the industry for about a year and I am ready to create more amazing games!
Project Dash & Slash
Welcome to Team 7s Dash & Slash, this game was created in 6 weeks for a school project. I was one of the programmers that took care of some UI elements, did most of the menu settings, handled player data and some of the gameplay elements.
(Poster was created by Emil Samuelsson)
Blaster Caster
Blaster Caster was a project I decided to make to learn Unreal Engine and how their multiplayer system works. I have implemented multiplayer using Epics online service and connected it to Steam so that everyone that downloads the game on steam will be able to play with each other, you can find random games to play as well as use the server browser to find a specific game to play.The game only has one mode which is Free For all (more will be added) but it's everyone against everyone. There are three different weapon types and they are Projectile weapons, Raycast weapons and rocket projectile weapons. There are also power ups for the player to pick up. The power ups can be read more in the In Depth Look button.
A hero's adventure
This was a fun project to put together all the skills I learned from a few courses I had taken for c++ and raylib. It's a 2D action game with some basic AI and mostly just trying to push my limits on what I can make in a small amount of time.
Unannounced Unreal Engine Project
Lead Programmer: Worked on every aspect of the gameSome of the aspects I worked on was:
Inventory System
Multiplayer functionality
Vehicle mechanics
AnimationsSurvival game with the goal of collecting items and exploring
Project Dash And Slash
Dash and Slash is a rouge-like rhythm-based RPG game where the player has to defeat waves of enemies to the beat of the music. The player and the enemies can only move to the beat of the music that is playing, each level also has its unique song to not annoy the player. Whenever the player completes a level they get a chance to purchase an item that can greatly increase your chances of success.
Some of my assignments
In the beginning, we knew that we wanted to create a rhythm-based game so my programming partner started looking into locking the player into beats that we can then change.I started looking into enemy movement and attacking being tied to a beat system and this was the first prototype of that movement. I tried connecting the enemy movement to the click of the mouse which worked decent.
Making a plan for the games architecture
After we got a bigger picture of what we wanted to do we started making a flowchart and a class diagram to better understand what we want to do and how we should structure it. We used Miro to create both the flowchart and the class diagram.
Character upgrades and handling player data
We wanted the player to be able to upgrade the three characters that were in the game, we had to then save those upgrades for later so that the player could then turn on the game and still have those upgrades intact. So, I used a split between Units PlayerPrefs where I saved the cost of the different upgrades, and I used JSON to save the character stats they had upgraded. Then whenever the player loads into the character selection screen it would remember which character the player chose and loaded all of the info into the game. I later noticed however that PlayerPrefs isn't the best option since it goes into the windows register and modifies, trying to delete data from there could cause trouble in the future.
Code snippets for saving and loading
A global audio manager to play sounds whenever we want to.
The global audio manager served as our main sound hub where we could access all sound files as well as all of our different sources to play the sounds in. So, let's say I wanted to play a player taken damage sound on the player source, this manager would make it extremely easy for the designers to go into the code and make that happen. What the audio manager would do is find every audio clip in a specific folder and load it into the game and then we can play clips wherever and whenever we want with simple commands.Code snippets of the audio manager and some use cases.
Items upgrading your character in-game
Since this was a roguelike game we wanted items that would boost your stats during that run but wouldn't carry over to the next run. Upgrades that we managed to make was increasing your damage, your maximum health as well as increasing your maximum "frenzy" (which is an ability bar basically) The item dropping stat upgrades was unfortunately cancelled however we used these items in the shop.
Video Trailer
Blaster Caster
Blaster Caster started as a project where I wanted to learn how to make multiplayer games using Unreal Engine but then it evolved into a multiplayer third person shooter with an arsenal of weapons, power ups as well as different game modes. Here I will go through the thought process of how I managed to create these different systems and how the game evolved.
Creating the online system
Before we could play test anything or even start creating the game, we needed someway to make people connect to eachother. I started researching on how to connect people through steam and found that Epic Online Services does that for you, but I wanted to make it isolated from everything else so that I could add this system in any project I created. So I opted to make a plugin.Most of the functions and functionalities of the system was already in place so all I had to do was to bind delegates to callbacks and create functions that would respond to when a delegate gets fired. This is how the function for creating a session would look like.
The character, the animations and the weapons.
Creating the character and finding animations for the character was quite difficult as I have not touched Unreal's animation system that much but to my surprise there were a lot of tools to make at my disposal to use and the documentation was very helpful.One of my favorites thing that I have learned while making the animations was how to use FABRIK on the hands of my character to make it look more realistic holding the weapon.After some of the animations were in place I would shift my focus to how the weapons would behave. I wanted a server authorative system so that it wouldn't feel unfair while playing so all hits from the weapons would ONLY be called on the server and then replicated down to clients in-case there was a hit to a target. Firing would also only occur on the server and then replicated down to clients. Cosmetic stuff such as visual effects and sound would play clientside to make it feel more smooth. There were in total three different weapon systems I created that designers and myself could use to create different weapons.There are projectile weapons where an actual projectile would be fired, there are raycast weapons which is a line trace from the weapon to where the player aims, you could also add scatter to it which randomizes shooting a bit and finally there were rocket projectiles which is the same as a projectile but it created an when hit.With these systems there were quite a bit of versatility in weapons that could be made. Some of the weapons I decided to create were: An assault rifle with auto fire capabilites, a sniper which can zoom in and one shot a player, a shotgun which deadly close range and the player could also cancel its reload to fire bullets. These were just some of the weapons you could create though.
The power ups
When I was play testing with my friends I felt it was quite boring at that times to just shoot, and I thought about power ups so that players can get an advantage by getting to a strategic vantage point to find a power up. The power ups I added were one for getting health back, one for recharging a shield bar, one for a really fast speed buff so that you could run extremely fast, one for jumping really high and one for increasing your maximum amount of health. These made the game extremely fun and more interesting as there were weapons that could one shot a player however now you will need to think about what kind of power ups the opponents have.
In Conclusion
This was an extremely fun and great learning experience, however it's not done yet as I want to add more game modes such as Gun Game where each defeat you get, you would upgrade your weapon until you win with the final weapon. I also want to add lag compensation so that the game feels even more smooth while playing across the network and that even if you are lagging you would still have a decent experience playing the game. But that's all for now. Thank you for reading this! I hope to hear back from you!
A Heros Adventure: The beginning
A very simple game about a hero trying to defeat the mobs of the world and rescue the habitants from the evil terrors of doom!
The Start: Drawing the map and the character
To even have a game, we are going to need a game window and also somewhere to draw everything on. Raylib helps us with this so we just need to specify what we need to draw and where. So, I imported my map that I created in the Tiled program and started drawing the map on the position 0,0 and with some trail and error I found out that scaling it with 4 would be a good fit.After drawing the map, I needed a character so I downloaded a character online and since this was a spritesheet to able to draw the character, we had to create a rectangle which we only showed one of the sprites. To do that we had to divide the sprite by the number of sprites that was in the spritesheet, in my case this was 6 and the height would be the regular height of the picture. Now, we have a character but, what about movement?To move the actual character, we would actually need to move the map instead. Since, the screen will always be at a position of 0 and if we moved the character we would leave the screen bounds and wouldn't see where we were going. So, to calculate the vector of which we want to move the map from, we take the direction of which way the player wants to go and normalize it, afterwards we scale it by the speed so that we don't go too slow and subtract it by the current map position, this way we will move the map in the direction the player wants to go whilist keeping the character still in the screen space. Now, we can go to enemies and obstacles.
The Middle: Making enemies, obstacles and some cleaning up.
I quickly noticed that the enemy is very similar to the character so what I did was that I created a new class called basecharacter with all the features of the character and then created two seperate classes deriving from basecharacter called enemy and character, there were some virtual methods in the base character like for example the tick function since it would do the same thing for enemy and character however, the character had to get input from the player on where to move, while the enemy would just chase the player and we could seperate the functionality that way.To move the enemy we had to do some more vector subtraction this time between the main character and the enemy itself to set the velocity, we only had to set the velocity since the base character will take care of moving the enemy with the provided velocity and in case we collided with the player, we would damage it, we would also check so that in-case we are too close to the player we would stop our movement this will stop it from spazzing out.And for the final thing, we had the obstacle, this was just something in the world that the player couldn't walk through, like a rock. What we would do is that we would render it and then in-case we hit the player we would "undo" the movement the player tried to do which we did by saving the players last position and setting the current position to the last position in-case we tried to walk into a obstacle. Pretty simple. All we have left is the sword to attack enemies and some polishing.
The Finale: Sword and attacking plus extra polish
To draw the sword, we had to think about the rotation of the sword, because whenever the player pressed the left mouse button, the sword would be rotated a certain degree to replicate a swing, luckily for us, raylib had a function called DrawTexturePro which includes a rotation of the texture which we could then manipulate the rotation.As you can see on the second picture we can make it look like the sword is on the floor.
Conclusion and reflection
This project was a ton of fun and I have learned a lot about how the C++ language works in comparison to the C# language. I still have more to learn especially about for example, pointers and how to structure the code. But overall very fun project. Thank you for reading!
Unannounced Survival Game in Unreal Engine
This project was my first ever work in Unreal, it is a survival game where the player is supposed to collect items and discover unknown lands.I was the lead programmer on this project. This was a very fun experience since this was my first time using a completely new engine aswell as trying to guide our team into making an amazing game without any technical difficulties.(Music from the video is from Zero no Kiseki - Get Over The Barrier! Created by Falcom)
The Start. Movement Systems.
For the movement, we wanted the player to be able to crouch, sprint, swim, and jump. Fortunately Unreal helped us a lot with the movement and all I had to was add the ability to swim and sprint.The sprint was achieved by just changing the movement speed, which the designers can change to their hearts' content.As you can see down below, we are checking in case the player is swimming and holding down shift and if the player is doing that, we will start to swim faster, however, if the player is only holding down shift and is not swimming, we will only make him run faster and whenever the player releases the shift key he will start to regenerate his stamina.I am also setting the movement speed modifiers twice (one time for the client and one time for the server so it can replicate it to the rest for a smooth experience for clients) since we wanted to also have a multiplayer version of the game but we will get into that later on.
Inventory system. Part One: Items
The first thing I had to do was research what kind of inventory we as the team wanted and as well as what could be scalable to hold a ton of items at the same time without lagging the game. After a few days of researching, I found some good ideas on how to do an inventory system and tried to mix some of them to come up with (what I thought) was a really good inventory.To start with, I created two structures, one for the item itself and one for the slot inside the inventory which looked like the pictures below. (click on them in case they look weird)The mat 1-3 stands for materials which we will also get into later. So, now we finally have a way to store item information and a way to simply create new items for the players to use, now what?
Inventory system. Part Two: Actual Inventory
Now, we have information for an item, so how do we let the player pick up the item and then display that item somewhere on the screen?Well, for picking up items I used an interface called IInteractable which will serve as a pillar for everything interactable. So, whenever we want the player to interact with something we can check if the object that the player is interacting with has implemented the interact method and if it has then called that method.Now, that we can interact with the item, we need somewhere to store it, so what I did was that I created an actor component so that I could re-use it whenever I wanted an actor to have an inventory. I could go through all of the methods that this component implements however I would need to write an essay about it. The gallery will give you a bit more in-depth look on the system.
Inventory system. Part Three: UI and the finale (for the inventory).
It's been a long ride, but we are finally at the end. I just want to thank you for reading this far.So, we can now pick up items and store them, now we are missing the final piece of the puzzle which is actually showing the items to the player.First off I created a HUD where we can place everything related to the player in there, for example, the inventory, health, stamina, etc.The inventory was created using a grid panel and whenever the window gets constructed it will check how many slots the interacted inventory component has and then display the appropriate amount of slots which is a widget blueprint that checks what is inside of itself. I think pictures can explain better words this time.
Replication and mulitplayer.
This was my first time doing a game that had to be online, however, it was actually very fun, and Unreal is very welcoming when it comes to its multiplayer component.What we wanted was a multiplayer survival game where the player could drop items at each other and also fight enemies together. However, we only got as far as sharing items.To accomplish this I had to re-think how the dropping and picking of items would happen.If a client picked up an item, it would then send a message to the server, telling it, "I picked up this item, please add it to my inventory" and then destroy it so that no other player could access it.Since the server is king, nothing would change on that front, if the server picked up an item, they would automatically destroy it for everyone.We also, later on, implemented a basic chest system that would serve as storage for the player, however, there was no way for any other player to have the same chest since they all ran their own version of the game, so to fix this we had to make sure we sent a message to the server whenever someone put in an item in a chest and tell them "hey I put in X item in here", the server would acknowledge it and then replicate it to everyone else.These are just some example cases of the multiplayer aspects of the game that I have worked on.
Final words and a thank you for reading.
In conclusion, this was one of the most fun project I have had, this was a three month long project where I had to learn a completely new mindset from working with Unity and C# for so long, it was so much fun and I will keep working on with Unreal and Unity just to master them both.There were a lot of mechanics I couldn't go through but some of them wereA scrapper, who could give you material depending on the items you gave him.A dialogue system using Excel and branching dialogue depending on what you chose to say.And much more that I can't remember.And a final word, once again thank you for reading this page and hopefully I will be hearing from you soon! Have a great day!