History of the first Cossacks Game

Original Interview with the Creators of Cossacks
(Google Translation)
Beginning: 

The history of project "Cossacks” began in 1997, when Microsoft presented its strategic game age of Of empires. In it, there were many original motions, which simply cast a spell on players, this was the first revolution in the genre, the new words in strategies, which, left tracks in our hearts. 

At that time we dealt with the creation of online multimedia encyclopedias, whose sales began slowly to go to down, and the development of games became a question of further survival of the company. One way or another, we decided to try ourselves in the new sphere. Proceeding Age  Of empires far and wide, we studied all its special features, we tried to understand how it gathered an audience. In one-and-a-half year of active game the necessary ideas appeared and  an understanding of the fact that we were capable of making a product even better than Ensemble Studios. We were assured in our forces, and started project "cossacks”. 

The first question, which did arise on the very first times of development, in which time frame or period to place the game? In Age of Empires the epochs from the Stone Age to the antiquity are dealt with. We decided "to beat” in - the 18th Century, because Microsoft would for sure select the middle ages for Age of Of empires II, and cossacks would come out by its logical continuation. Actually, we thus made "by third” OF AOE, which does not overlap the first and second parts. This was our marketing calculation. 

Time showed that we were not mistaken. The setting and time of action of game were right which led to the commercial success of the project.  As a result we succeeded in not only making a good game and obtaining pleasure from the process, but also earning rather well.

In the first approximation, "cossacks” appeared as follows: opposition thought between Russia and Ukraine, and in all nations there were four - Russians, Ukrainians, Europeans and Turks. be sold game had to on the domestic market. 

In 1998, when the project was started, in the development team it was only four people. On the present measures, the programmer, designer, historical consultant the leader of project. In two years, when "the cossacks” already left to the finishing straight line, a quantity of developers grew rapidly to 12 people. Although, in addition, this a little. However, it should be noted that the project at the different stages were connected the creators of maps and testers, so that the size of development team varied.
  

The first steps

The first major step toward the commercial project became the demo version, which we in 1999 brought to the exhibition MILIA in [Kannakh]. This was the present "appearance” - we not only showed our project of the interested audience, but also acquired by useful acquaintances with the publishers and other representatives of play industry. There we for the first time heard council to make "Zazakov” with the sight for the entire European market. Strictly, for us this was shocking, since about the potential of our "toy” with confidence they spoke authority, in professionalism of which there were no doubts. The solution to increase a quantity of nations to 16 and to publish the game throughout the world  was accepted.

Strictly, the success followed us from the very beginning project. As it proved to be, we bit into the apple  with the name of the project, since Cossacks - in view of historical reasons - they know both in England and in France. In Europe this word is unambiguously considered the synonym of Russian coloring as "Kalashnikov” or "the vodka”. Success was complete - the learned, but necessary brand brought to us in the West enormous sales.

Continuing the list of successful moments, one cannot fail to speak also about the date of realising it helped the fact that in the year to the output Zazakov the market for strategies was overfilled by projects, moreover not very high quality. Genre ceased to draw developers, and they reduced revolutions. We left exactly when players "they were famished” on qualitative RTS. Furthermore, in the game was begun to operate the original temporary space: from the middle- ages to the 18th century. Important role played very colorful screen shots, on which we "beat” into one of our main enormous crowds of units At that time this was new, and our hordes arrived on the soul and the public, and the press, which was not stingy to the appreciations on the sites and in the periodicals.

But to take user we intended not only by being crowded on the screen [yunitami]. Differences from another RTS were sufficient: in particular, in "The Cossacks” adapted the system of formations with the possibility of the retention of position (stand of ground). As a result forces obtained by bonus to the parameters of protection and attack. Furthermore, we realized the possibility to seize the peasants of enemy and the unprotected buildings and to in parallel develop the nation of the former enemy.  As the basis of this, economic part of the game was assumed, the output of service lives as in the majority of strategies of that time. In "the cossacks” their number was equal to 6. Basic resource was the food, which was used for building of all units and was spent on their content and improvement. Tree, stone and food were obtained by peasants directly on the map, and the remaing 3 resources (gold, iron, and coal) - in the mines. Coal, for example, was spent on each shot.

During balancing of game we made all resources on the map infinite. Plus of this diagram - could be played by one base as conveniently by developing its empire. Naturally, they were and inevitable minuses - is lost the part of the game, when you have the troops and there is no possibility of building units, so that sum depends on that how you will conduct last battle. This strongly shortened the time of play session.

Disputes about the vision of project began at the very beginning developments. We spent week on the explanation of that, to select for us 2d or 3d (isometry- prospect), and only by the strong-willed decision of Sergey [Grigorovich] they decided to stop at the two-dimensional cursor. Now this solution can seem strange, but it is not worth forgetting, that the breakthrough into 3d could manage too dearly for that time. Furthermore, in favor two-dimensional character told the fact that with the development of technologies with its aid of those days it was possible to make more qualitative and detail units. Finally, our "crowds of units”, important and original feature of game, could be realized only into 2d.

There was one additional important moment, because of which we did not begin to break into  the third dimension. At that time we did not want to compete with the important developers, who packed enormous sums into the development of the new generation of 3d- strategies. Market 2d RTS rapidly was reduced, and we proved to be almost by sole representatives on the Ger. after being dismantled with the measurements, we began to experiment with the angle of the slope of camera. Versions there were several - from 90 to 45 degrees, but we stopped at 30. It turned out that in this case our sprite troops appeared most attractively and did not shun units confronting after them, which simplified management of important armies. As we already spoke above, initially game was planned to the output only in the territory of the CIS. Since the basic chip of game - simultaneous mapping of 8000 units for us it was necessary to develop their technologies of mapping drawing and error of the logic of game taking into account the fact that the future players will have computers only below average level. Generally, the selection of main  features cost the large credit to our chief programmer - the rates of writing the code were about 300-400 lines during the day! The volume of the clean code "Zazakov” at the moment of realising (1.5 mb.) could be compared by the volume [s] "Anna [Kareninoy]”. The chief programmer  with the outstanding memory, who always remembered, "which where lies”, without resorting to the commentaries of the code.

Some of the basic problems in the development of cursor were the conclusion of the large number of units and three-dimensional landscape, the rapid search for way and the artificial intellect. Several it was necessary to bustle with the multi-user game and the game through the Internet. During the work on Cossacks we constantly held in the mind main rule - our code it must not impede. We consider that this succeeded for us. The basic concept, on which was done "rapid” code - function were not bulky, but all algorithms linearly depended on a quantity of units.  

Search for the way

In post mortem"Zazakov” one cannot fail to mention one of the major problems, which encountered developed. This is the search for way - fundamental task of play developments. In our case it was necessary to contend with the fact that the usual search algorithms, with which the map is divided off into the passable and impervious zones, and from the point of outcome to the point of destination are plotted a curve, envelope "of impassability”, it does not approach. All were abutted against so many times mentioned in this post mortem 8000 units, which godlessly impeded on the classical algorithms.

The two-level search for way, which consists of two parts, helped to leave the situation. The first of them - "global”, way in it searches for on the topological zones, which had interconnections and certain conditional weight the second part of the system - "precise” search, which was used for displacing from within the framework 1 topological zone (general search for way on the map, broken into the squares into 16x16 pixels).

The System worked as follows: in order to find way, units searched for the shortest way, and then, when they entered into final region, checking the straight lines, which connected the centres of topological zones, was selected way in that indicated by player point, using a precise search. The presence of topological zones healthily helped with the creation by theAi. As has already been spoken, each zone had its weight (this index it influenced the presence and the number of enemy troops). By the Ai, was built way on the topological zones, going around dangerous places by side. On the map there were as a rule, about 700 topological zones, which considerably facilitated the search for way, in comparison with 16384[kh] 16384 of possible points.

However, this successful in every respect search for way skidded with the presence of the walls, by which they partitioned off topological zone. In order to go around this problem, we realized the algorithm of a dynamic change of the topological zones in the real time, which proved to be very complex task.  

Other problems

There were some problems, also, in the graphic department. The enormous volumes of two-dimensional drawing, which it was necessary to operate, led us to the creation of its own size: each sequence was packed separately, using an algorithm LZ with the general dictionary. A good compression ratio was reached due to this, but access to each sequence did not require unpacking previous.

Problem with the error of the fog of war arose. Since to dynamically calculate a radius of survey for each of 8000 units, without straining in this case processor sufficiently complicatedly, we devised the following solution. Around units it was arranged from 1 to 8 points - map of the fog of war. And further by the method of solving Laplace's equation was reached the smoothing between these points. As a result the fog of war appeared reliably, smoothly and did not impede. One additional pleasant solution was connected with mapping of water, with which we were straightened with the aid of the rapid and promising algorithm, which, by the way we was utilized, until now. Small waves on the water were integrally and rapidly solved by the physical real equation of wave processes. And [rendering] of one "aqueous” texture with the size of 256[kh] 256 of points on the computer 200 MHz occupied fractions of millisecond.  

Game through the Internet

The technology of net game was realized as follows: Let us assume that 1, 2 and 3- play time. Let us assume that player -2 presses an [icon] to build a [unit] at a certain moment, and packet with the information about this order is sent away to the computer of player -1. In this case the computer of player -2 carries out this order on 3 times, when packet will theoretically be in player -1. Thus, occurs the synchronization of the computers of player -1 and player -2. If packet does not reach (it is lost) and player -1 did not obtain information about the order, then he stops at 3 stages, but player -2 goes further, to following time, since he sent packet.

Player -2 does not obtain any packets from the player -1 even he thinks that the packet is, probably lost and sends packet again. Player -1 obtains packet, sends away his packets, and itself goes to 4 time. After player -2 obtained the packet of orders from the player -1, game was synchronized, and they further continue to be exchanged packets. And although situation with the loss of packet appears extremely rarely, nevertheless it was necessary to solve this problem. This method is good fact that after the sending of packet the player -2 must not wait packet with the confirmation of the fact that the order is obtained. Also in the development stage a problem arose, with the real time, which goes differently in the different machines. With the game of more than hour the difference appeared somewhere in 1-2 seconds. This problem especially was manifested with [pinging] more than 1000. for eliminating the problem of machine the [pinging] and it was calculated real time. The packets of data were sent for this, was fixed the time of sending and [ping]. Further time was equalized.  

Multi-user game the Internet

The problem of the de-synchronization of game on two computers appeared in most different situations, and to [otsledit] it was possible only miraculous. The searches for the solution occupied weeks. Sometimes with the design schedule of sines and cosines, which was used everywhere (for example, for the search for ways or flight trajectory of projectiles), on the different computers were obtained different values.

This problem arose because of so called of floating of point of inconsistency (nonconformity of value with the use of the floating point). For the successful search for precise place in the code, which became the reason for de-synchronization, we made a generator of random number (which it influenced almost everyone: the arrangement of units the won back personnel of animation, the returned orders… on the whole, everything which it had to be synchronized), which was put into the doubtful sections of the code.

The values between the machines were compared after the end of play cycle and if numbers were different, which means, it occurred de-synchronization. In this case the programmer obtained the name of file and the number of the line, where occurred "the failure of random number”. Further by the method of assumption and near-scientific "spear "was located the specific place in the code, which the causal de-synchronization could become. Obtained bug mercilessly was destroyed. In spite of titanic efforts on the finishing of Internet- game, it should be noted that interest in the net battles in "The Cossacks” was not very high. By reason to that - the step by step publication of game in the different countries, because of which the community of Internet- players in no way could collect critical mass, First "Cossacks” left in Germany, then England and France, then in Spain, Japan, Italy and so on. In all our game left in 17 countries of the world, but interest in the Internet- game grew too slowly. The very large number of player`s online was about 500, and on average - 150-200 in the daytime even 10-50 at night.

The quantity of players necessary for the appearance of valuable community capable of involving new users, we at that time evaluated into 2000. Important companies (Blizzard, Microsoft, EA) publish their games simultaneously throughout the world, attaining the huge amount of players on the servers and creating stir around the Internet- possibilities of its production.  

Finishing straight line

At the beginning of the work on the project all were proud of its work and project. But in the end colleagues began "to burn down”. Doubts about the success appeared, which developed the syndrome "infinite repair”.

Someone began to indicate that the drawing is insufficiently detailed, someone - that the game there will not be popular and it is even now uninteresting. They concluded project, having literally gritted teeth. When we left to the stage of beta testing "Zazakov” and sensibly were estimated the volumes of works, it became understandable that another minimum of 6 months will be required to the project. In order not to allow disruptions, we send to the extreme measures and they introduced the system "of military time”: working day began at 6 in the morning and lasted to 11 in the evening with the dinner interruption one hours of purpose were clear as, and from us it was required not to be breathed out on the finishing straight line, in this most complex section of any round.

The most severe order of day was somewhat smoothed out by the addition of dual wages and by free dinners. All came without the delays and worked without putting away the hands military time it lasted for the development team of long 3 months, during which of beta forged himself to "gold master” of the project. After the final version "Zazakov” was sent to publisher, and thehalf-dead development team was in full strength sent for leave.  

P.S.

 the completion of the work on "Cossacks” and of the delivery all of the patch (one should recognize that after realising it followed very "fatty” patch) we mud-flow the multi-user game sat through on our server half a year. They came running early in the morning, to the work, and they remained after work on entire night… they played. Furthermore, after output Zazakov, we revealed that in 50% of games in the Internet people negotiated not to attack at the beginning of session - from 15 to 60 minutes. And we made this option in add on (it is called it Peace Of time - "time of nonaggression”), which proved to be sufficiently useful finding. Then, after being gathered with the forces and the ideas, they threw "Zazakov” on the regiment and populate for "the achievement of America”. The game, begun as small project for the domestic market from the small, no one not of known development team, grew as a result into the large play product, which left in two ten countries of world and that gained the deserved glory. To realise it us the faith in its forces and unfading feeling of enthusiasm helped. Each trip to the exhibition, when people like the programmers Age of Of empires or John [Romero] approach the stand and tell "wow” each praiseworthy by preview and opinion on the forum gave positive emotions, gave to us real understanding into the fact that we can make mega-Heath. This forced us to be laid out to the complete. "Cossacks”  that cost. Development of design - this as game into the football: goalkeeper can pass goals, but entire development team loses, and if it catches ball, then wins entire development team. Entire work in the development team rests on all crew members without the exception. Accordingly, the success and popularity us in the entire world - merit of each crew member. 


Original Russian Text

История Казаков

Начало :

История проекта "Казаки" началась в 1997 году, когда компания Microsoft представила на суд общественности свой стратегический тайтл Age of Empires. В нем было множество оригинальных ходов, которые просто завораживали игроков, это была настоящая революция в жанре, новое слово в стратегиях, которое, надо признаться, оставило след в наших сердцах.

В то время мы занимались созданием мультимедийных энциклопедий, продажи которых стала потихоньку идти на спад, и разработка игр стала вопросом дальнейшего выживания компании. Так или иначе, мы решили попробовать себя в новой сфере. Исходив Age of Empires вдоль и поперек, мы изучили все ее особенности и фичи, старались понять, чем она взяла аудиторию. За полтора год активной игры у нас появились нужные идеи и понимание того, что мы способны сделать продукт даже лучше, чем Ensemble Studios. Мы были уверены в своих силах, и запустили проект "Казаки".

Первый вопрос, который встал на самых первых порах разработки - это в каком временном периоде разместить игру? В Age of Empires затронуты эпохи от каменного века до античности. Мы решили "бить" в ХV - XVIII века, потому что Microsoft наверняка избрала бы средневековье для Age of Empires II, и Казаки получились бы ее логическим продолжением. Фактически, мы тем самым сделали "третью" AOE, не пересекающуюся с первой и второй частями. Это был наш маркетинговый расчет.

Время показало, что мы не ошиблись. Сеттинг и время действия игры были выбраны правильно, что привело к коммерческому успеху проекта. Microsoft вложила в раскрутку тематики Age of Empires большие средства, тем самым поспособствовав продажам Казаков. В результате нам удалось не только сделать хорошую игру и получить удовольствие от процесса, но и неплохо заработать.

В первом приближении "Казаки" выглядели так: противостояние задумывалось между Россией и Украиной, а всего наций было четыре - русские, украинцы, европейцы и турки. Продаваться игра должна была на отечественном рынке.

В 1998 году, когда проект был запущен, в команде насчитывалось всего четыре человека. По нынешним меркам, это мизер - программист, дизайнер, исторический консультант и руководитель проекта. Через два года, когда "Казаки" уже вышли на финишную прямую, количество разработчиков выросло втрое - до 12 человек. Хотя, опять же, это немного. Впрочем, следует отметить, что к проекту на разных стадиях подключались создатели карт и тестеры, так что размер команды варьировался.

 

Первые шаги

Первым важным шагом к коммерческому проекту стала демо-версия, которую мы в 1999 году привезли на выставку MILIA в Каннах. Это был настоящий "выход в свет" - мы не только показали свой проект заинтересованной аудитории, но и обзавелись полезными знакомствами с издателями и прочими представителями игровой индустрии. Там же мы впервые услышали совет делать "Казаков" с прицелом на весь европейский рынок. Собственно, для нас это был шок, так как о потенциале нашей "игрушки" с уверенностью говорили авторитете, в профессионализме которых не было сомнений. Так было принято решение увеличить количество наций до 16 и издавать игру по всему миру.

Собственно, удача следовала за нами с самого начала проекта. Как оказалось, мы попали в яблочко и с названием проекта, так как казаков - в силу исторических причин - знают и в Англии, и во Франции. В Европе это слово однозначно считается синонимом русского колорита, как "Калашников" или "водка". Успех был полный - узнаваемый, но незаезженный бренд принес нам на Западе огромные продажи.

Продолжая список удачных моментов, нельзя не сказать и о дате релиза. Нам помог тот факт, что за год до выхода Казаков рынок стратегий был переполнен проектами, причем не самого высокого качества. Жанр перестал привлекать разработчиков, и они сбавили обороты. Мы вышли как раз тогда, когда игроки "изголодались" по качественным RTS. Кроме того, в игре был задействован оригинальный временной промежуток: от средневековья до 18 века. Важную роль сыграли очень красочные скриншоты, на которых мы "били" в одну из наших главных фич - огромные толпы юнитов. В то время это было ново, и наши орды пришлись по душе и публике, и прессе, которая не скупилась на высокие оценки на сайтах и в журналах.

Но брать пользователя мы собирались не только толпящимися на экране юнитами. Отличий от других RTS хватало: в частности, в "Казаках" применялась система формаций с возможностью удержания позиции (stand ground). В результате отряды получали бонус к параметрам защиты и атаки. Кроме того, мы реализовали возможность захватывать крестьян противника и незащищенные здания и параллельно развивать нацию бывшего врага. В основу экономической части игры была положена добыча ресурсов, как и в большинстве стратегий того времени. В "Казаках" их число равнялось 6. Основным ресурсом была еда, которая использовалась для постройки всех юнитов и тратилась на их содержание и усовершенствование. Дерево, камень и еда добывались крестьянами непосредственно на карте, а Оставшиеся 3 ресурса (золото, железо, и уголь) - в шахтах. Уголь, например, тратился на каждый выстрел.

При балансировке игры мы сделали все ресурсы на карте бесконечными. Плюс этой схемы - можно было играть одной базой, как угодно развивая свою империю. Естественно, были и неизбежные минусы - теряется часть игры, когда у тебя есть войска и отсутствует возможность постройки юнитов, так что итог зависит от того, как ты проведешь последний бой. Это сильно укорачивало время игровой сессии. 2D или 3D?

Споры о видении проекта начались в самом начале разработок. Мы потратили неделю на выяснение того, выбрать ли нам 2D или 3D (изометрия-перспектива), и лишь волевым решением Сергея Григоровича решили остановиться на двумерном движке. Сейчас это решение может показаться странным, но не стоит забывать, что для того времени прорыв в 3D мог обойтись слишком дорого. Кроме того, в пользу двумерности говорило и то, что при тогдашнем развитии технологий с ее помощью можно было сделать более качественных и детализированных юнитов. Наконец, наши "толпы юнитов", важная и оригинальная черта игры, могли быть реализованы только в 2D.

Был и еще один немаловажный момент, благодаря которому мы не стали рваться в третье измерение. В то время мы не хотели конкурировать с крупными разработчиками, которые вкладывали огромные суммы в разработку нового поколения 3D-стратегий. Рынок 2D RTS быстро сокращался, и мы оказались чуть ли не единственными представителями на нем. Разобравшись с измерениями, мы начали экспериментировать с углом наклона камеры. Вариантов был несколько - от 90 до 45 градусов, но остановились мы на 30. Оказалось, что в этом случае наши спрайтовые войска выглядели максимально привлекательно и не закрывали стоящих за ними юнитов, что упрощало управление крупными армиями. Как мы уже говорили выше, первоначально игра планировалась к выходу только на территории СНГ. Поскольку основная фишка игры - одновременное отображение 8000 юнитов, нам пришлось разрабатывать свои технологии отображения графики и просчета логики игры с учетом того, что будущие игроки будут иметь компьютеры чуть ниже среднего уровня. Вообще, выбор главной "фичи" стоил большой крови нашему главному программисту - темпы написания кода были около 300-400 строк в день! Объем чистого кода "Казаков" на момент релиза (1.5 Мб) мог сравниться по объему с "Анной Карениной". Главный программист – человек с отличной памятью, который всегда помнил, "что где лежит", не прибегая к комментариям кода.

Одними из основных проблем в разработке движка были вывод большого количества юнитов и трехмерного ландшафта, быстрый поиск пути и искусственный интеллект. Немало пришлось повозиться с многопользовательской игрой и игрой через Интернет. Во время работы над Казаками мы постоянно держали в уме главное правило - наш код не должен тормозить. Считаем, что нам это удалось. Основная схема, по которой делался "быстрый" код - функции не были громоздкими, а все алгоритмы линейно зависели от количества юнитов.

 

Поиск пути

В постмортеме "Казаков" нельзя не упомянуть одну из главных проблем, с которыми столкнулись девелоперы. Это поиск пути - фундаментальная задача игровых разработок. В нашем случае пришлось столкнуться с тем, что обычные алгоритмы поиска, при которых карта разбивается на проходимые и непроходимые зоны, и от точки исхода до точки назначения строится кривая, огибающая "непроходимости", не подходит. Все упиралось в так много раз упоминаемые в этом постмортеме 8000 юнитов, которые на классических алгоритмах безбожно тормозили.

Выйти из ситуации помог двухуровневый поиск пути, состоящий из двух частей. Первая из них - "глобальная", путь в ней ищется по топологическим зонам, которые имели соединения между собою и некий условный вес. Вторая часть системы - "точный" поиск, который использовался для перемещения в рамках 1 топологической зоны (обычный поиск пути по карте, разбитой на квадраты в 16x16 пикселей).

Система работала следующим образом: чтобы найти путь, юниты искали кратчайший путь, а затем, когда входили в конечный район, проверяя прямые, которые связывали центры топологических зон, выбирали путь в указанную игроком точку, используя точный поиск. Наличие топологических зон здорово помогло при создании ИИ. Как уже говорилось, каждая зона имела свой вес (на этот показатель влияло наличие и число войск противника). ИИ строил путь по топологическим зонам, обходя опасные места стороной. Как правило, на карте было около 700 топологических зон, что значительно облегчало поиск пути, по сравнению с 16384х16384 возможных точек.

Впрочем, этот удачный во всех отношениях поиск пути буксовал при наличии стен, которыми перегораживали топологическую зону. Чтобы обойти эту проблему, мы реализовали алгоритм динамического изменения топологических зон в реальном времени, что оказалось очень непростой задачей.

 

Прочие проблемы

Были некоторые проблемы и в графическом департаменте. Огромные объемы двумерной графики, которыми приходилось оперировать, привели нас к созданию собственного формата: каждый кадр паковался отдельно, используя алгоритм LZ с общим словарем. За счет этого достигалась хорошая степень сжатия, а доступ к каждому кадру не требовал распаковки предыдущих.

Возникла проблема с просчетом тумана войны. Так как динамически рассчитать радиус обзора для каждого из 8000 юнитов, не напрягая при этом процессор довольно сложно, мы придумали следующее решение. Вокруг юнита расставлялось от 1 до 8 точек - карта тумана войны. И далее методом решения уравнения Лапласа достигалось сглаживание между этими точками. В результате туман войны выглядел достоверно, плавно и не тормозил. Еще одно приятное решение было связано с отображением воды, с которой мы расправились с помощью быстрого и перспективного алгоритма, который, кстати мы используем до сих пор. Маленькие волны на воде целочисленно и быстро решались физическим реальным уравнением волновых процессов. И рендеринг одной "водной" текстуры размером 256х256 точек на компьютере 200 МГц занимал доли миллисекунды.

 

Игра через Интернет

Технология сетевой игры была реализована следующим образом: Предположим, что 1, 2 и 3 - игровые такты. Предположим, что в некоторый момент Игрок-2 нажимает на иконку строить юнит, и пакет с информацией об этом приказе отсылается на компьютер Игрока-1. При этом компьютер Игрока-2 выполняет этот приказ на 3 такте, когда пакет теоретически будет у Игрока-1. Таким образом, происходит синхронизация компьютеров Игрока-1 и Игрока-2. В случае, если пакет не доходит (теряется) и Игрок-1 не получил информацию о приказе, то он останавливается на 3 стадии, а Игрок-2 идет дальше, на следующий такт, так как он пакет отправил.

Игрок-2 не получает никаких пакетов от Игрока-1 и думает, что пакет, наверное, потерян и посылает пакет снова. Игрок-1 получает пакет, отсылает свои пакеты, а сам идет на 4 такт. После того как Игрок-2 получил пакет приказов от Игрока-1, игра синхронизировалась, и они дальше продолжают обмениваться пакетами. И хотя ситуация с потерей пакета возникает крайне редко, эту проблему все равно пришлось решать. Данный метод хорош тем, что после отправки пакета Игрок-2 не должен ждать пакета с подтверждением того, что приказ получен. Также на этапе разработки возникла проблема, с реальным временем, которое на разных машинах идет по-разному. При игре больше часа возникала разница где-то в 1-2 секунды. Эта проблема особо проявлялась при пинге больше 1000. Для устранения проблемы машины пинговались и вычислялось среднее время. Для этого посылались пакеты данных, фиксировалось время отправления и пинг. Далее время уравнивалось.

 

Многопользовательская игра и Интернет

Проблема рассинхронизации игры на двух компьютерах возникала в самих разных ситуациях, и отследить ее можно было только чудом. Поиски решения занимали недели. Иногда при расчете таблицы синусов и косинусов, которая использовалась повсеместно (например, для поиска путей или траектории полета снарядов), на разных компьютерах получались разные значения.

Эта проблема возникла из-за так называемой floating point inconsistency (несоответствие значения при использовании плавающей точки). Для успешного поиска точного места в коде, которое стало причиной рассинхронизации, мы сделали генератор случайного числа (на которое влияло почти все: расположение юнитов, отыгрываемые кадры анимации, отданные приказы... в общем, все, что должно было быть синхронизировано), который вставлялся в сомнительные участки кода.

После окончания игрового цикла значения между машинами сравнивались и если цифры были разными, значит, произошла рассинхронизация. При этом программист получал название файла и номер строки, где произошел "сбой случайного числа". Далее методом предположения и околонаучного "тыка" находилось конкретное место в коде, которое могло стать причинной рассинхронизации. Найденный баг нещадно уничтожался. Несмотря на титанические усилия по доводке Интернет-игры, следует отметить, что интерес к сетевым баталиям в "Казаках" не был очень высоким. Причиной тому - поэтапное издание игры в разных странах, из-за которого коммьюнити Интернет-игроков никак не могло набрать критическую массу. Сначала "Казаки" вышли в Германии, потом Англии и Франции, затем в Испании, Японии, Италии и так далее. Всего наша игра вышла в 17 странах мира, но интерес к Интернет-игре рос слишком медленно. Самое большое количество игроков в онлайне было около 500, а в среднем - 150-200 днем и 10-50 ночью.

Количество игроков, необходимое для появления полноценного коммьюнити, способного затягивать новых пользователей, мы в то время оценивали в 2000. Крупные компании (Blizzard, Microsoft, EA) издают свои игры одновременно по всему миру, добиваясь огромного количества игроков на серверах и создавая ажиотаж вокруг Интернет-возможностей своей продукции.

 

Финишная прямая

В начале работы над проектом все гордились своей работой и проектом. Но под конец сотрудники начали "выгорать". Появились сомнения в успехе, развился синдром "бесконечного ремонта".

Кто-то стал говорить, что графика недостаточно детализирована, кто-то - что игра не будет популярной и уже сейчас неинтересна. Проект заканчивали, буквально стиснув зубы. Когда мы вышли на стадию бета-тестирования "Казаков" и трезво оценили объемы работ, стало понятно, что проекту потребуется еще минимум 6 месяцев. Чтобы не допустить срывов, мы пошли на крайние меры и внедрили систему "военного времени": трудовой день начинался в 6 утра и длился до 11 вечера с обеденным перерывом в один час. Цели были ясны как никогда, и от нас требовалось не выдохнуться на финишной прямой, на этом самом сложном участке любого забега.

Жесточайший распорядок дня несколько сглаживался начислением двойных зарплат и бесплатными обедами. Все приходили без опозданий и работали не покладая рук. Военное время длилось для команды долгих 3 месяца, в течение которых из беты выковывался к "золотой мастер" проекта. После того, как финальная версия "Казаков" была отправлена издателю, полуживая команда в полном составе была отправлена в отпуск.

 

P.S.

Поле завершения работы над "Казаками" и выдачи всех патчей (следует признать, что после релиза последовала очень "жирная" заплатка) мы сели за многопользовательскую игру и просидели на нашем сервере полгода. Прибегали рано утром, до работы, и оставались после работы на всю ночь... играли. Кроме того, после выхода Казаков, мы обнаружили, что в 50% игр в Интернете люди договаривались не нападать в начале сессии - от 15 до 60 минут. И мы сделали это опцией в аддоне (называется она Peace Time - "время ненападения"), что оказалось довольно полезной находкой. Потом, собравшись с силами и идеями, забросили "Казаков" на полку и засели за "Завоевание Америки". Игра, начатая как небольшой проект для внутреннего рынка от маленькой, никому не известной команды, вырос в итоге в крупный игровой продукт, вышедший в двух десятках стран мира и снискавший заслуженную славу. Реализовать его нам помогла вера в свои силы и неувядаемое чувство энтузиазма. Каждая поездка на выставку, когда люди вроде программистов Age of Empires или Джона Ромеро подходят к стенду и говорят "Вау!", каждое похвальное превью и отзыв на форуме давало положительные эмоции, дарило нам реальную понимание в то, что мы можем сделать мега-хит. Это заставляло нас выкладываться на полную. "Казаки" того стоили. Разработка проекта - это как игра в футбол: вратарь может пропускать голы, но проигрывает вся команда, а если он ловит мяч, то и выигрывает вся команда. Вся работа в команде опирается на всех членов команды без исключения. Соответственно, успех и популярность нас во всем ми