Cinq ans d'esclavage

Avez-vous déjà pensé à votre propre jeu? Et qu'en est-il de votre propre jeu multijoueur? Je pense que oui! Beaucoup d'entre vous voudraient s'accrocher au développement de votre propre chef-d'œuvre, où se mêlent votre imagination multiforme et votre perfectionnisme exceptionnel. Je vous comprends et je veux raconter mon histoire de cette façon fascinante.




Contexte


Tout a commencé en 2007, lorsqu'un jeu j2me en ligne basé sur le travail de Sergey Lukyanenko est apparu. Je n'avais pas encore d'ordinateur, et j'ai été très impressionné par ce jeu sur téléphone portable, il a surtout frappé le monde ouvert. Je me suis impliqué et, malgré l'absence de tutoriels, j'ai rapidement compris ce qui se passait.


Le temps a passé, mais l'intérêt ne s'est pas estompé, il n'y avait déjà pas assez de jeu. Le désir d'apprendre comment cela fonctionne et le caractère aléatoire ont incité à l'utilisation de bogues avec des interdictions ultérieures. La poursuite de ses études et le choix de la profession de "programmeur" ont donné une impulsion au développement de mon premier logiciel à but lucratif dans le monde en ligne.


Dès que mes connaissances dans le domaine de la POO ont été renforcées, nous avons déjà décidé avec mon camarade de jeu et mon artiste de développer notre MMO, qui serait cent fois plus cool!


Quel est notre jeu?


Notre jeu glorifie deux factions en guerre, Oseon et Weiland. Chacun d'eux a sa propre planète; à son tour, il abrite les bâtiments nécessaires au développement du joueur.



Accueil planète faction Oseon


Les planètes de faction sont protégées par un système de 12 portes. Après avoir capturé toutes les portes, les joueurs ont accès à la planète ennemie. Il ne suffit pas de se téléporter à travers le chemin ouvert, après quoi il faut capturer la citadelle - le bâtiment principal de la planète. Se trouvant dans une situation difficile, les joueurs de la partie occupée reçoivent des troupes de réserve avec des paramètres 1,4 fois supérieurs aux leurs.


Les batailles se déroulent dans un mode étape par étape, certains les comparent avec des similaires dans "Heroes", d'autres les appellent une sorte d'échecs. En partie, ils vont bien, il y a des unités avec de la magie ici, et vous devrez penser à quelques pas en avant avec votre tête.



Bataille avec l'ennemi


Cependant, le monde cruel des jeux PvP a d'autres mécanismes intéressants, à commencer par le développement habituel de dépôts riches et se terminant par des chasses aux chasseurs de trésors.


Prototype


Comme nous n'avions pas d'expérience dans la création de jeux MMO, nous avons décidé de prendre tout ce qui est mauvais. Notre ensemble comprend: Anthill, Netty, MySQL. Ce n'étaient pas exactement ces technologies. Après beaucoup de travail, nous avons rencontré un tas de problèmes: le manque d'un éditeur d'interface, les micro-journaux de la carte lors du déplacement, la saisie de texte, et bien plus encore. En plein écran, le jeu avait l'air dégoûtant.



Le prototype du jeu. Développement minier


Dans certains cas, lors du changement d'état du jeu, la caméra virtuelle du moteur a commencé à se comporter étrangement.



Le prototype du jeu. Retards


Après une année de développement, où il n'était plus possible de battre en retraite, nous avons néanmoins terminé les mécaniques de base du jeu, assemblé un éditeur de carte et décidé que le moment était venu de le tester en public.
Nous avons ajouté le jeu à VK (sans catalogue) et annoncé le lancement dans notre groupe, où il y avait environ 100 personnes.
A cette époque, le jeu avait un contrôle incompréhensible impliquant le clavier, il y avait de nombreux bugs, ainsi que des cartes trop simples, qui n'avaient que deux couches (herbe et arbres). Et après trois jours de jeu en VK, seulement 15 personnes se sont inscrites - les gens ne comprenaient pas comment jouer. Et nous avons décidé de tout refaire à partir de zéro.


Captures d'écran de l'ancienne version

Super en ligne



Menu d'interaction avec les joueurs



Combattre


Lech, ce n'est pas ça, viens en premier!


Beaucoup, probablement confrontés à l'échec, pensent que ce n'est pas le leur, car beaucoup de temps a été consacré, mais il n'y a pas de résultat visible. Mais abandonner est stupide quand vous avez parcouru un si long chemin. Après quelques mois, nous, avec l'expérience existante, avons décidé de reprendre le jeu.


Nous avons décidé de faire définitivement la nouvelle version du client avec un rendu graphique via une carte vidéo. Parmi les nombreux frameworks, Starling semblait le plus attrayant, il avait une API similaire avec un flash standard, il était pris en charge par Adobe et il était possible d'utiliser les graphiques existants sans trop d'effort. Enfin, la nouvelle version a fonctionné sans problème.
Pour pixelliser le vecteur à la volée, j'ai pris le générateur Dynamic TextureAtlas . Mais dans la bibliothèque suivante, il a fallu presque complètement réécrire et abandonner les atlas, l'animation prenant beaucoup de place et ne pouvant pas s'intégrer dans l'atlas des tailles autorisées.


Les cartes


Après avoir compris les technologies sur le client, nous avons décidé de traiter les cartes serveur . Chaque planète peut être constituée d'un ou de plusieurs emplacements, entre lesquels vous pouvez aller à droite ou à gauche. Pour chaque emplacement, un morceau de la carte a été créé, composé initialement de deux couches. Plus tard, nous avons décidé d'ajouter un autre calque, puis un autre calque, et en conséquence nous nous sommes installés sur quatre:


  • herbe / sol;
  • pierres \ eau;
  • décorations de la taille d'une cage;
  • grand paysage.

L'idée était que les trois premières couches étaient dessinées dans une seule image bitmap et envoyées à la mémoire vidéo. C'est une bonne approche lorsque, au lieu de trois couches, une est dessinée en arrière-plan. Mais cela n'a pas été sans problème: lors du passage de MovieClipa à l'image suivante pour la pixellisation, toutes les images précédentes doivent être dessinées. À l'entrée de l'emplacement, le jeu a été gelé, il a donc été décidé de transférer toutes les tuiles vers BitmapData à l'avance et de faire des copyPixels rapides. Mais en même temps, une frise désagréable a été obtenue au début du jeu au moment de tramer un grand nombre d'images. Vous avez peut-être vu certains navigateurs se bloquer au démarrage lors du chargement des ressources. Nous ne voulions pas que notre jeu soit le même invalide, j'ai donc limité le temps de dessin des tuiles pour chaque image. Ici, vous pouvez en savoir plus sur la façon de procéder.
Toutes les cartes avaient une taille de carreaux carrés 20x16 de taille 64px. Les données cartographiques ont été écrites dans un fichier au format binaire, où les limites des couches ont été déterminées à l'avance et il ne restait qu'à enregistrer le numéro d'image MovieClip. Ainsi, le poids du fichier de mappage était de 1280 octets. Mais plus tard, le format a été converti en JSON pour faciliter le travail avec les données.


En conséquence, le travail sur les cartes a pris une part importante du développement du client. Afin de pouvoir créer de belles cartes, un éditeur a été écrit sur Flex.



Éditeur de carte


Chacune des 14 planètes a sa propre flore et faune, afin que vous puissiez comprendre visuellement sur quelle planète vous vous trouvez.



Variété


De plus, par programme, nous avons ajouté des moitiés de tuiles pour la carte, de dessus et de dessous, qui reproduisent simplement les tuiles voisines. Cela a été fait pour les éléments interactifs importants tels que les boutons de menu. Des champs d'emplacements voisins avec le brouillard de guerre ont été ajoutés à gauche et à droite - c'était une excellente idée qui a résolu plusieurs problèmes à la fois. Le jeu a commencé à paraître beaucoup mieux en plein écran.



Carte avec brouillard de guerre sur les côtés


Serveur


En traitant avec le client, nous recherchions simultanément un programmeur serveur, mais il n'y en avait pas beaucoup qui voulaient écrire un jeu douteux sans documentation normale. Certains ont commencé à écrire et ont immédiatement abandonné, car on ne savait plus quoi écrire, et se plonger dans les épines de la logique du jeu était ennuyeux. Après un certain temps, nous avons déterminé que nous avions besoin d'un spécialiste capable de concevoir le serveur en Java, et s'il abandonne le projet à l'avenir, je pourrais l'ajouter. Le solveur artisan local nous a aidé avec l'architecture du serveur. Il pourrait, pourrait-on dire, nous mettre sur la bonne voie: il a montré comment créer un serveur et a emprunté l'architecture du cours de formation Mail.ru. Solver ne faisait pas exception et après un certain temps nous a quittés. Après une autre année d'efforts, j'ai réussi à écrire toute la logique de jeu de base. Maintenant, avec le recul, je ne comprends pas pourquoi nous n'avons pas écrit le serveur sur Akka?


Vous pouvez lire sur l'architecture ici - Architecture d'un serveur de jeux en ligne utilisant Skyforge comme exemple ; vous pouvez également trouver des conférences sur Intuit. Sur notre serveur, bien sûr, pas 2 millions de lignes, mais aussi beaucoup. Aucune fibre (comme dans Skyforge) n'est utilisée, et notre serveur s'est probablement avéré moins lisible. Soit dit en passant, le code qui a été utilisé pour la même fibre pour le multitâche non encombré dans Skyforge a été publié beaucoup plus tard, lorsque tout fonctionnait déjà pour nous.
Alors que j'étais occupé avec le serveur et collé la logique sur le client, l'artiste a complété les détails manquants, qui sont immédiatement tombés dans le client. Dès que le serveur était prêt, nous avons lancé un test alpha. Cette fois, tout était presque comme il se doit, mais les bogues et les erreurs du serveur ont dû être corrigés pendant longtemps.


Dans les deux sens. Mécanismes de jeu auto-nés


Je voudrais vous parler d'une autre chose inhabituelle dans le jeu. Comment nommeriez-vous un joueur qui fait spécifiquement une armée incomplète et perd contre d'autres joueurs / bots? Nous les appelons «prunes». Ils fusionnent l'expérience et abaissent intentionnellement leur niveau, de sorte qu'ils deviennent plus forts à leur niveau. Ceci est important lorsque le niveau des joueurs qui peuvent être attaqués est limité et leur donne plus de possibilités de développement. Il devient plus facile de vaincre des ennemis de haut niveau et d'obtenir plus de récompenses. C'est comme pomper votre persan, mais dans la direction opposée. Bien qu'il puisse sembler plus simple que le jeu classique, le drain d'expérience vous demande plus de temps et de pompage habile au départ. Si vous abaissez le niveau d'un personnage faible, cela ne donnera pas un gros avantage et ne fera que tirer le joueur vers la moyenne. Augmenter et abaisser le niveau peut être infiniment long. Même après avoir atteint le développement maximum pour son niveau maximum actuel, le joueur peut atteindre un niveau encore plus élevé pour accéder aux nouvelles technologies et fusionner à nouveau ses progrès par l'expérience, tout en restant aussi fort en technologie.


Les débutants ont un problème quand ils ne peuvent rien faire à de tels nains pompés. Nous avons résolu ce problème en introduisant des restrictions, en divisant les joueurs en deux groupes: vous ne pouvez attaquer des robots que sur des robots, avec des restrictions sur le niveau maximum sur d'autres joueurs et sur les mêmes joueurs fusionnés. Ainsi, ils ont presque cessé d'exercer une pression sur l'équilibre du jeu et, surtout, ils pouvaient continuer à faire ce qu'ils voulaient.


Ça n'a pas marché, pas fartanulo


Nous sommes entrés dans le catalogue des jeux VK le 4 février 2018, et pas la première fois. Notre première candidature a été rejetée sans explication, alors que nous avons postulé de nouveau, nous avons néanmoins été ajoutés au catalogue.


Malgré le long temps de développement du jeu, il n'a pas été possible de saisir tous les détails; nous avons fait beaucoup d'erreurs. Tout d'abord, ils ont fait une erreur avec la plateforme: tous les joueurs ne sont pas prêts à passer beaucoup de temps dans un jeu 2D par navigateur, qui nécessite un mécanicien. Beaucoup de gens sont habitués à des jeux plus simples et plus compréhensibles, où il y a plus de plaisir dès le début. Notre formation dans le jeu, pour le moins, a échoué. Après avoir terminé le didacticiel, les joueurs oublient en toute sécurité ce qui était là, et peut-être qu'ils ne lisent même pas.
Selon les statistiques de VK, nous avons un énorme dépotoir de joueurs, pour la plupart, seuls ceux qui ont déjà joué à ce vieux jeu et connaissent déjà la mécanique restent longtemps.


48 semaines plus tard ...


Environ un an après le lancement de la version alpha, il est devenu clair que Flash cesserait bientôt de fonctionner dans les navigateurs. À partir de ce moment, j'ai décidé de porter le client vers quelque chose de plus tenace. Bien sûr, il est plus agréable d'écrire dans un langage familier, j'ai donc choisi LibGDX. Ce framework Java nous a permis de ne pas réécrire une partie de la logique, mais simplement de la copier depuis le serveur. Il a de bonnes abstractions pour les cartes de tuiles et une implémentation pour Tiled, qui nous a permis d'écrire rapidement du code pour nos cartes. Mais il y a aussi des faiblesses: rendu des polices, manque d'éditeurs d'interface visuelle en direct, etc.


À l'heure actuelle, un client alpha pour Android est écrit, qui implémente 50% de toutes les fonctionnalités du jeu.



Client de jeu mobile


Le développement est toujours en cours. Si vous souhaitez dessiner ou écrire quelque chose pour un client mobile, écrivez.


Je voudrais également exprimer ma gratitude à l'ingénieur du son Peresvet Mukhanov et au compositeur Artem Davydov, ils ont écrit tout ce qui peut être entendu dans le jeu en très peu de temps et de très haute qualité.

Source: https://habr.com/ru/post/fr451636/


All Articles