Лето сорок второго, битва за Берлин… 2

Продолжение, начало в №35

Методика вмешательства Поскольку характеристики некоторых образцов техники злонамеренно искажены и напрашиваются на корректировку, разберемся сначала с природой и методами расчета этих характеристик (кстати, огромное спасибо Рустему Исмагилову, главному редактору журнала "Виват" и члену редакционного совета журнала "Аэроплан", предоставившему мне недостающий справочный материал по технике Второй Мировой войны). При просмотре (examine unit) или приобретении (purchase unit) можно увидеть 15 тактических характеристик.

Cost. Буквально - цена, а по-существу - общая ценность техники в долларах. Эта характеристика обобщает все остальные и считается по довольно сложным формулам, к тому же разным для различных классов техники. Если хотите иметь инструмент для ее расчета, найдите CD-ROM к книге "Энциклопедия лучших игр для IBM PC", выпуск 1. На нем в архиве демонстрационной версии Panzer General есть файл Evlequip.xls. Это Exel'овская таблица данных по технике. С ее помощью можно автоматически пересчитать цену при изменении других характеристик. В моей игре цены на советскую технику немного снижены, в счет "преимуществ социализма".

Max Ammo (MA). Показывает, на сколько боев рассчитан боекомплект данного образца техники. При желании можно выявить соответствие между MA и реальным боекомплектом для какого-либо класса техники, если найти достаточно реальных данных. К примеру, для танковых пушек калибра 75 - 76 мм одной единице боекомплекта соответствуют примерно 10 реальных снарядов, а для калибра 122 мм - примерно 7 снарядов. Аналогично поступаем и с авиацией. Кстати, реальный боекомплект на советских и английских истребителях был обычно в полтора-два раза меньше, чем на немецких. Данных о возимом боекомплекте буксируемой артиллерии и ПТО мне, к сожалению, найти не удалось.

Max Fuel (MF). Показывает, на сколько клеток беспрепятственного перемещения рассчитан запас топлива. Для самоходной наземной техники эту величину можно определить, разделив запас хода по шоссе на 10; для авиации - разделив на 10 дальность полета.

Movement (M). Количество клеток беспрепятственного перемещения. Для транспортной и бронетанковой M равен наибольшей скорости движения по шоссе, деленной на 10 с округлением в большую сторону, но не свыше 8. Однако если данный образец техники известен плохой или, наоборот, отличной проходимостью, то M уменьшается или увеличивается на единицу.

Spotting (S). Расстояние, на котором данная техника способна видеть противника.

Range. Расстояние, на котором данная техника способна поражать противника. R = 0 означает поражение противника в непосредственном столкновении, "грудью в грудь". Противник при этом тут же отвечает огнем, но зато его можно выбить с занимаемой позиции. R = 1 означает поражение противника в контакте, но без ответа с его стороны. Это безопаснее, однако противник не покидает занимаемых позиций. В "моей игре" таким свойством обладают партизаны, фольксштурм, фаустники и некоторые типы противотанковых орудий. Обычная артиллерия имеет Range = 2..3, а дальнобойная артиллерия и тяжелые корабли (capital ship) Range = 4..5.

Initiative (I). Эта характеристика определяет, кто стреляет раньше в боевом столкновении. Для наземной техники это дальность прямого выстрела в сотнях метров. Кстати, разработчики-янки подло занизили этот показатель для советских танков. Пришлось корректировать. Для авиации инициатива связана, вероятнее всего, со скоростью.

Soft Attack (AS). Характеризует поражающие свойства оружия по "мягким" целям (см. Target). По набору этих данных для ствольной артиллерии и некоторых танков и ПТО (но не всех!) можно построить график и использовать его для корректировки явно искаженных данных или определения характеристик техники, вновь вводимой в базу данных. Можно и формулу вывести, но она сильно зависит от опорных данных. Отдельного обсуждения заслуживают системы залпового огня, но оно заняло бы слишком много места. Во всяком случае данные по нашим "катюшам" бессовестно занижены.

Для пехоты принимается AS по сумме огневых средств одного отделения. Для многих ПТО AS также принимается не по орудию, а по орудийному расчету. И для некоторых танков принимается по пулемету, а не по пушке. Кстати, для пулемета, нормального и крупнокалиберного, AS = 1. Несколько винтовок в сумме тоже дают AS = 1. Для корабельных орудий AS принимается примерно вдвое ниже, чем для сухопутных такого же калибра, иначе слишком круто получается. А вот из чего исходили разработчики игры, назначая Soft Attack (равно как и Hard Attack) для бомбардировщиков - загадка. При вводе в игру новых "бомберов" или корректировках приходится опираться на аналоги.

Hard Attack (AH). Характеризует поражающие свойства оружия по "твердым" целям (см. Target). Для танков, ПТО и зениток они пропорциональны калибру (Cal, в сантиметрах) и квадрату дульной скорости (v 2, м/сек) бронебойного снаряда. Здесь хорошие результаты дает формула: AH=3.5 х Cal х (v 2)/1,000,000 Хорошие - это значит близкие к прописанным в базе данных по технике. Однако применять эту методику, хотя в игре так и сделано, для бронебойных подкалиберных снарядов я бы не советовал - слишком круто получается. Только не путайте это с реальной бронебойностью - она вычисляется совсем иначе.

Определяя AH для артиллерии, можно воспользоваться прилагаемым графиком. Излом кривой в области калибра 15 см можно объяснить сменой физической модели поражающего действия. До 15 см - проникновение снаряда в броню, а свыше 15 см - действие взрывной волны или крупных осколков.

Air Attack (AA). Характеризует поражающее действие оружия по воздушным целям. Для обычных нескорострельных зениток величина AA довольно близка к массе снаряда (в кг). А вот для самолетов методика расчет AA - загадка. Похоже, здесь складываются условные единицы скорости с условными единицами оружия, может, и маневренность как-то учитывается. Ясно лишь то, что для большинства советских истребителей этот показатель бессовестно занижен. При вводе в игру новой техники можно опираться на аналоги. Скажем, истребитель "И-180", на котором Чкалов разбился, по скорости превосходил "Me-109E" и уступал "Me-109F", а по вооружению был примерно равноценен последнему. Вот и назначим ему AA средний между этими двумя. "Ла-5ФН" примерно равноценен "Спитфайр-IX" и должен иметь AA = 16, но никак не 10.

Naval Attack (AN). Характеризует поражающее действие оружия по морским целям. Для надводных кораблей обычно AN =2 х AH. О методике расчета для другой техники ничего определенного сказать не могу.

Ground Defense (GD). Характеризует защиту от поражающего действия наземного оружия. Методика расчета тоже не ясна, но при сопоставлении этих характеристик для советских и немецких танков с учетом реального бронирования складывается впечатление, что назначены они добросовестно.

Air Defense (AD). Характеризует защиту от поражающего действия оружия авиации. Методика расчета тоже не ясна.

Close Defense (CD). Характеризует защиту в том случае, если к моменту обмена ударами войска уже находятся в непосредственном контакте с прошлого тура. Пехота, буксируемая артиллерия, авиация имеют CD = 0. С бронетанковой техникой сложнее. Здесь просматривается (если это не мои иллюзии) такая зависимость:- для легкой бронетехники базовый CD = 1..2;- для средней бронетехники базовый CD = 3;- для тяжелой бронетехники базовый CD = 4;- если есть фальшборта или экраны, CD увеличивается на 1;- если есть пулемет, кроме зенитного, не учтенный в AS, CD увеличивается на 1;- если турель зенитного пулемета оборудована бронещитками, как это было на многих немецких самоходках, CD увеличивается на 1.

Target. По типу цели бывают:- Soft (мягкая) - пехота, буксируемая артиллерия и грузовики;- Hard (твердая) - бронетехника и форты и доты;- Air - воздушная цель;- Naval - морская цель.

Все эти характеристики содержатся в файле Panzequp.eqp. Он представляет собой базу данных, где на каждый образец техники отведены записи по 50 байтов. Если вы надумаете дополнять эту базу, как это сделал я, имейте в виду, что в первых двух байтах файла содержится число записей N (даже если они поначалу пустые), а длина файла должна быть N х 50 + 2, иначе игра не загрузится.

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

Есть только одно маленькое "но". Вот добавил я в базу советский тяжелый арттягач "Ворошиловец", хочу назначить его транспортным средством для формируемой в Барановичах бригады 203-миллиметровых тяжелых гаубиц. Так нет! Гаубицы я прописал в базе вместо тяжелых "катюш" - и они доступны. А тягач дописан к базе - и недоступен. Коды доступной техники прописаны в самом исполняемом файле. А влезть туда также нагло, как в базу, мне не по зубам. Как решить эту проблему - увидим дальше.

Где, что и как лежит 

К счастью, большая часть данных, необходимых для создания собственной истории, "зашита" не в исполняемом файле Panzer.exe, а в Panzequp.eqp, файлах сценариев Game0##.scn, файлах карт Map##.set и Map##.stm (## - номер сценария), названия городов находятся в Mapnames.str, названия сценариев (те, что на кнопках выбора) и вводные текстовые сообщения к сценариям - в Scenstat.bin и, наконец, файлы выходных текстовых сообщений к сценариям содержатся в директории /Scnbrief. Кроме того, названия сценариев прописаны и в Panzer.exe.

Такая организация материала позволяет человеку, даже не знающему ассемблера и не умеющему работать с отладчиком (как автор этих строк, которому, конечно же, стыдно за такой пробел в своем образовании), отредактировать технику и написать собственные сценарии. Достаточно лишь элементарного знания о базах данных, записях, полях, шестнадцатеричной кодировке, а также умения пользоваться DOS'овской утилитой File Compare для сравнения файлов и Disk Editor'ом из нортоновских утилит. Пригодится умение написать простейшую программу на Турбо-паскале или Бейсике. Ну и терпения вагон лишним не будет.

Форматы данных исследуем методом "научного тыка". Например, загрузили сценарий и сохранили игру. Потом танковый, скажем, юнит, стоящий в каком-нибудь городе, перевооружаем другой техникой и сохраняем игру под другим номером. Сравниваем оба файла сохранения бинарно, записывая результат сравнения в файле 0_1: fc /b game.sv0 game.sv1 0_1 В результате узнаем идентификаторы обоих образцов техники, коды активности юнита и где записан престиж. Заодно можно судить и о структуре данных в файле сохранения. Дальнейшие исследования ускоряются по мере накопления знаний.

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

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

Каждая из воюющих стран имеет свой код-идентификатор, например: немцы - 08, советские - 20 (14h) и т.д. Описание размещения войск построено в виде записей, содержащих поля с различными данными: код техники, которой оснащен юнит; код транспорта, если таковой имеется; код страны; код временного транспорта, морского или воздушного для десантируемых войск; координаты юнита на карте; сила юнита, окопанность, уровень боевого опыта в сотнях единиц. Назначение номера юнита не предусмотрено, номера присваиваются автоматически.

Так вот, знание того, как прописывается юнит и позволяет частично решить упоминавшуюся проблему с тягачом "Ворошиловец". Мы просто вносим гаубицы с этим тягачом в сценарий. Точно также можно посадить нашу пехоту на американские БТР'ы или на лошадей - кому что нравится. Возможны эффекты и поинтереснее. Прописать транспортом к немецкой 88-миллиметровой зенитке противотанковую пушку на основе этой же зенитки. И использовать при необходимости в том или ином режиме, переключая их кнопкой Mount/Dismount. Точно также можно объединить некоторые типы самоходок.

Но у такой комбинации "два в одном" есть и два недостатка: во-первых, пополнение потерь обходится по двойной цене, а во-вторых, комбинацию эту можно получать, лишь манипулируя со сценарием или файлом сохранения. Так что надо особенно беречь такие уникальные войска.

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

Разбираясь со всей этой кодировкой, думал: будь я разработчиком, как бы я делал эту игрушку? Технику и сценарии так бы и делал. Только списки доступной техники поместил бы в отдельные файлы. Зато карты кодировал бы по записям на каждую клетку. Поле координат, поле местности, поле названия и т.п. Но у разработчиков, очевидно, были свои причины сделать так, как сделали. А в общем все подчиняется нормальной человеческой логике и вполне доступно для понимания въедливого геймера, даже если он и не профессиональный программист.

После того, как мы более-менее сориентировались с устройством инструментов моделирования истории, перейдем к самой истории.

Владимир Каминский  

Окончание следует


Компьютерная газета. Статья была опубликована в номере 36 за 1997 год в рубрике виртуальные радости :: нет данных

©1997-2022 Компьютерная газета