This is my first project to create games, I have never worked in this field before. Many tasks were new to me - something simple and some difficult. Sometimes, ideas come to mind, but they are very difficult to transfer to paper. What begins and where ends ...
Idea
Everything, as in any project, begins with an idea. There was an idea to create an online browser game about football fans. The concept of the game: football fans gather before the match and protect the interests of their team. We already have a target audience for which we have placed bets (football fans), but the game must also be exciting for ordinary gamers. My task is to make the game as entertaining as possible.
Ideas, as a rule, a lot. Every day there were at least 2-3 constructive ideas. I relied not only on myself, my friends and even my mother helped me, although she never played anything other than solitaire and zoom deluxe. Sometimes an idea comes from the most unexpected source. It is important to stop, analyze and eliminate unnecessary things. Sometimes we had to give up great ideas just because they do not fit into the overall concept. It is sadder when it was necessary to refuse due to lack of funds or the likelihood of not meeting the deadlines.
')
Disputes within the team took place all the time, everyone treated the project very emotionally and with full dedication. Any little thing could turn into a scandal - from where it is better to place the buttons and ending with strategy, balance and changes in methods. Everyone tried to make their own contribution, so it’s hard for me to judge how much the fate of the project depended on my vision of the game. Truth was born in controversy. And while we were arguing, the project continued.
A game
The game has 3 classes: “Instigator” (Instigator) (little life, little damage, much chance to dodge and increased chance to crit), “Fighter” (average life, many damage, small chance to dodge and a small chance to crit) and Ringleader (Defender) (much life, average damage, a small chance to dodge and a small chance to crit).

Each class has its own antipode: The Instigator is a Fighter, the Fighter has a Defender, the Defender has an Instigator. The principle of operation is as follows: I gave one class strengths and weaknesses, I gave the antipode qualities that the strengths ignore and take advantage of the weak qualities of my opponent. For example: the Defender has a lot of armor, a lot of health, 3 blocks (the damage inflicted on the block is zero, the crit is divided into two) and the average damage. The instigator has little life, little damage, a big chance for crit and dodging, and about. armor. From the fact that the defender has little chance of hitting, his damage does not pose a threat to the instigator, while the instigator has an increased chance of crit, which breaks through the block, and pro. armor. Other antipodes work according to this method.
Characters gain experience after a battle won, as a result of which they raise levels. Each level opens up new opportunities, skills and techniques.
I calculated the experience gained at the end of the battle, probably in the most simple way. There is a maximum experience that a person must achieve in order to raise the level; I divided this experience into the number of battles a character must win. With each level, the number of battles increases, and the experience gained after the battle won also increases. It creates an illusion for the player that until the next level there are not too many battles to win.
Capes
Four attributes that characterize each character: strength, agility, intuition and endurance. The game has maximum values for each of the attributes (except for strength) that the player can achieve. If the player reaches the maximum value, then he will have a 100% chance to dodge, to crit, as well as the maximum armor. Of course there are no things in total that give so many stats to reach this maximum. This maximum is the cap.
We made a level cap, each level level goes up. Thus, we killed two birds with one stone: at the beginning of the game, classes that are based not on damage, but on dodge, crit, armor, etc. will be almost as well evolving as at the last level, provided that players are procured in accordance with their levels. There will be no people walking around in a set of 4 being 10, and saving money for things for the next levels.
Damage Counting
How damage is considered: Weapon Damage + Strength * (1.3) (1.4) (1.5). The numbers in parentheses are the number corresponding to each class. This is not the final damage that will be dealt, as it depends on who caused this damage. The first formula I applied looked like this:
Damage done = Damage * Protection from Damage
Damage Protection = 1 - Armor / Cap Armor
We give the values to make it clearer:
Protection against damage = 1- 500/1000
Damage done = 100 * 0.5 = 50
500 is the current level of protection of the character, the cap at its current level is 1000, as a result, the damage caused will be halved.
But we still have a pro. Armor, which should be stuffed somewhere. After various attempts and tests, I came up with the optimal formula.
Damage Protection = 1 - (Armor * Pro. Armor) / (Cap Armor * Cap Pro. Armor)
We give the same values as in the previous example:
Damage Protection = 1 - (500 * 500) / (1000 * 1000) = 0.75
Damage caused = 100 * 0.75 = 75

As a result, the armor was reduced by 50% and the initial damage itself was increased by 25. At the same time, the damage may increase if pro. armor will be more than a cap at this level.
If one of our players has worked a chance to inflict a critical strike, then the damage inflicted will be doubled. In the case of a block, the damage done is multiplied by zero. In the case of a block and a crit at the same time, the damage done remains unchanged, and in the case of dodging, the damage done is multiplied by zero, regardless of whether it was a critical hit or normal.
Boev system
The player has 5 points on which he can hit and 5 points that he can block. At the same time he can block 2 body parts at once (in the case of a tank with two handles, he can block 3 at once), he can hit only one (in the case of two one-handed, he can attack 2 points at the same time). The player can use the techniques immediately, after which they go into a rollback for a certain time.
The exchange takes place in rounds, the player is not obliged to exchange with each of the players. In this case, it can beat an unlimited number of characters at the same time. The computer randomly chooses your opponent. For example, a 2x2 battle takes place, in one team there is a Defender and the Instigator, and in the other there are two Fighters. The task of the tank for the duration of the battle as long as possible to keep these two DPS-erov, as the fighter has little pro. armor. The defender will pose as a tank that covers the infantry, while the Instigator can do damage without any obstacles. At the same time, the Fighters must somehow outwit, the Defender and find a window to get to the main threat: the Instigator.

All of the above will be performed with proper use of techniques. The one who will make more correct decisions, or the one who will show endurance and will be able to calculate the rival will win.
At the end of the battle, the winning side will be rewarded with experience and other features. All players contribute to the victory (except afk), so the entire winning side receives the same bonuses.
At first, I wanted to make the players receive a bonus according to the damage done. The idea was doomed to failure, as there are classes that are designed to bring the team victory not with damage, but in other ways, being there some techniques that enhance the attributes of your team, or neutralize the main player in the enemy team. Therefore, we considered that the best option would give everyone the same amount of experience and bonuses, because each of them at least helped me.
Receptions
Starting from the first level, each character will receive the first reception. Some techniques are available for all classes, and some are intended only for one class. In order to use the tricks player requires the presence of energy / aggression / stamina. Receptions have a rollback. The stronger the reception, the rollback and cost it increases.
Some techniques gave a lot of trouble: they did not work as originally planned, they did not work at all. Some had to be removed only because there was no possibility to do it, and some did not fit one class and had to be changed.
At first, I made a very big mistake - I gave the antipodes techniques that increase their weak side. As a result, lost interest in the game and all classes became the same. My advice to you: never give tricks that increase the character's weak side.
The Instigator had one move that filled up life for 6 rounds. I did not want to change the properties of the reception, but due to the fact that he has not enough maximum life, he does not get enough life and the reception becomes useless. For two days I tried to find this balance, but it did not work out, in the end I gave this method to the Defender and came up with something new for the Instigator, which increased his chance of evasion.
One feature that was recently implemented is energy regeneration. One programmer, playing for the Defender, said that his level of resistance was spent too quickly and the techniques that restore it do not help sufficiently. I did not want to give even more energy for using this or that technique and could not decide what to do.
I was struck with the idea: what if the level of skills were regenerated passively. But all the classes are different and my task was that energy regeneration depended on the players too. The feature is the following: each of the classes will receive some energy / aggression / stamina depending on a successful strike, crit or successful block. Everything will happen in this way:
Energy recovery
Successful Blow = Energy
Successful Crete = 3 energy
Recovery of aggression
Successful Strike = 2 aggression
Successful Crete = 4 aggression
Restoration of resilience
Successful Kick = 3 stamina
Successful Block = 1 Persistence
I took into account the strong, not forgetting about the weak qualities of each of the classes (the one who blocks the most gets the bonus and who rarely gets hit and gets more bonuses). Participating in fights where there are many rivals, the tank will get more stamina, since it has 3 blocks, thus the chance of blocking attacks is increased.
Fights "Ranked"
From the very beginning I wanted to create a type of battles that would measure the skill level of each of the players and that the system itself would find it more suitable for this player's opponent.
I came across a very interesting formula that is currently used in chess. It is called "Formula ELO". This formula finds an opponent chess player who is equal in experience and skill. About the same formula I used in this game.
The principle of operation is similar. Calculates the skill level of the player. If the player has just started, then this figure is zero. After that, the system is looking for an opponent with about the same rating as his. Suppose that the system has found an opponent with a rating of 10. At this point, player A’s chances of player A’s player B. are calculated.
The probability of winning a player A = 1/1 + 10 ^ [(eloB-eloA) / 400]
The probability of winning a player B = 1/1 + 10 ^ [(elo-eloB) / 400]
* elo A = current player rating A
* elo B = current rating of player B
That is, the probability of winning player A is ≈0.48, and the probability of winning player B is ≈0.52. Then it is necessary to calculate what rating player A will receive if he wins or how much he loses if he loses. The same must be calculated for player B.
If Player A wins,
New Player Rating A = elo A + k (1-exA)
In the event of Player A being defeated
New Player Rating A = elo A - k (1-exB)
If Player B wins
New Player Rating A = elo A + k (1-exB)
In case of defeat of Player B
New Player Rating A = elo A - k (1-exA)
* exA - probability of winning player A
* exB - probability of winning player B
* k - This number will decrease after the first 30 battles have expired, after which it will stop at 25 (50 25). This is done so that new players can quickly determine their rating.
In simple words, the formula rewards players who have small chances of winning, without losing significantly the rating in the event of a loss. Also, players with a higher rating will lose more in the event of a defeat against players whose skill level is significantly lower.
Conclusion
I think these are all the main problems that I encountered while working as a game designer. I must say that developing games is cool, but even working on such seemingly simple projects requires a lot of effort, effort and patience. Hope that creating games is easy and fun. I would appreciate your constructive criticism.
The game itself is located at:
www.fbgates.com