Придумался мне тут сценарий простенькой игры про "космооперу ближнего прицела".
У нас есть две планеты. Скажем, Земля и Марс. Эти планеты, соответственно, воюют.
Планеты производят Массу. Обе по десять килограммов в секунду, например. 864 тонны в сутки. В любой момент мы можем взять произвольное количество Массы и превратить её в Корабль.
Когда у нас есть Корабль (скажем, сто тонн) мы начинаем распределять его Массу. Масса делится на Топливо и свободное место.
Свободное место можно занять радиаторами, ракетами и лазерами. Подробнее каждый пункт будет описан далее.
Кроме распределения массы, мы прописываем каждому Кораблю уникальный движок. Движок места и массы не занимает, пожалеем игроков. Это просто параметр. Вернее, три параметра. Скорость истечения, тяга, и тепловыделение. Два первых параметра произвольно выставляются игроком, третий рассчитывается, как произведение двух первых.
Что это значит. Вы управляете кораблём, выставляя ему вектор ускорения - других параметров регулировки у вас нет (ещё можно стрелять из лазера и запускать ракеты, но об этом позже). Тяга отвечает за ускорение на единицу времени, а скорость истечения - за ускорение на единицу топлива (делённое на общую массу, само собой). Таким образом, если у вас высокая тяга, но низкая скорость истечения, вы без проблем догоните любого противника (или убежите от него), но через пару минут маневрирования останетесь без топлива. Если наоборот - вам без проблем хватит топлива до Марса и обратно, но лететь придётся несколько месяцев, и в пути вас даже ленивый перехватит. Если оба параметра высоки - у вас есть практически идеальный движок, быстрый и экономный... только вам приходится его каждые пять минут выключать, чтобы корабль не поджарился.
Корабль считается уничтоженным и снимается с карты, если его температура превысит определённое значение. Кроме того, от температуры напрямую зависит заметность при движении по инерции - радиус, в котором его видят другие корабли и планетарные датчики. При ускорении радиус во много десятков раз выше и пропорционален текущему тепловыделению (скорости роста температуры), а не температуре как таковой.
Можно потратить часть Массы на радиаторы - они ускоряют снижение температуры.
Лазер работает на том же принципе - повышает температуру вражеского корабля, чтобы довести её до точки разрушения. Десять процентов всегда идёт на нагрев собственного корабля. А сколько из девяноста процентов оставшихся идёт на нагрев вражеского - зависит от расстояния.
Если два корабля оказываются на расстоянии тысячи километров друг от друга или менее, любой из них может выполнить спецкоманду "идти на таран". При этом оба корабля получают существенный прирост температуры, пропорциональный массе и относительной скорости партнёра. Как правило его достаточно для разрушения обоих кораблей, хотя крупный и может иметь достаточно радиаторов, чтобы это тепло сбросить.
Ракета - это по сути тот же космический корабль, только вложенный в свободное пространство другого космического корабля. У него есть свой уникальный двигатель, свой запас топлива, могут быть при желании проектировщика свои лазеры и свои радиаторы... он даже может нести в своём свободном пространстве собственные ракеты, если того пожелает игрок-проектировщик. Количество таких "матрёшек" упирается только в предел делимости (масса кораблей измеряется в килограммах).
Ракета может в любой момент отделиться от корабля-носителя (спецкоманда) при этом у неё будет та же скорость, что и у корабля-носителя в момент отделения. Отделение, вероятно, необратимо (ибо обратная стыковка несколько геморна с программной точки зрения, да и игроку слишком геморно будет скорости выравнивать).
Атмосфера противника (как и наша) имеет параметр температуры. Она греется, когда в неё влетают корабли (особенно если у них высокая масса и скорость), а также когда её облучают лазерами. Медленнее греется, чем звездолёт, конечно. Зато радиаторов на неё не поставишь. Конечная цель войны - нагреть атмосферу противника до критической температуры и не дать нагреть нашу.
Да, чуть не забыл. Чтобы наши космолёты все не были одноразовыми, необходимо дать им возможность заправляться. Так как построение кораблей-заправщиков потребует решения той же неприятной проблемы стыковки, можно отступить от реализма, и позволить кораблям заправляться рабочим телом на лету. Скажем, в собственной атмосфере, во вражеской атмосфере, и в раскиданных по карте газовых облаках.
Итого, объект типа "корабль" описывается семью константами:
Тяга двигателя
Расход топлива двигателя
Тепловыделение двигателя
Масса
Максимальное количество топлива
Количество лазеров
Количество радиаторов
И восемью переменными:
Принадлежность
Текущее количество топлива
Текущая температура
Координаты
Скорость
Ускорение
Обстреливаемый в данный момент объект
Количество и типы ракет
Эти объекты перемещаются по двухмерному полю, где кроме них есть ещё два объекта типа "планета" и несколько объектов типа "облако".
Собственно говоря, это всё. Боль-мень соображающим программистом это лепится за пару суток, насколько я понимаю. Ещё нужна система сохранения типов спроектированных кораблей и бегунки масштабов - для изменения разрешения игрового поля (летают-то корабли на миллионы километрах, а дерутся на тысячах), и для изменения скорости течения времени (полёт длится неделями, а сражение может занять секунды). Тоже вроде бы ничего сверхъестественного.
При этом тактическая гибкость огромна. Сразу интуитивно представляются следующие типы:
Линкор - корабль с большим количеством радиаторов и лазеров, со сбалансированным движком.
Рейдер - корабль, целиком состоящий из запасов топлива и радиаторов, с единственным хилым лазером.
Боевая станция - куча лазеров и радиаторов, хилые запасы топлива. Движок "ионный" - с высокой скоростью истечения и низкой тягой.
Лазерная боеголовка - куча лазеров, никакого топлива и радиаторов. Быстро доходит до критической температуры, зато пока сгорит, успевает ТАК прожарить противника...
"Подлодка" - корабль с "ионным" движком, ползущий к цели (вражеской планете) много месяцев, зато практически незаметный.
Перехватчик - корабль с мощной тягой и низкой скоростью истечения, радиус действия небольшой, зато в нём он догоняет почти кого угодно.
Взрыволёт - корабль с высокой тягой и высокой скоростью истечения, но соответственно, с кошмарным тепловыделением. Пару секунд ускорились, полчаса остываем.
У нас есть две планеты. Скажем, Земля и Марс. Эти планеты, соответственно, воюют.
Планеты производят Массу. Обе по десять килограммов в секунду, например. 864 тонны в сутки. В любой момент мы можем взять произвольное количество Массы и превратить её в Корабль.
Когда у нас есть Корабль (скажем, сто тонн) мы начинаем распределять его Массу. Масса делится на Топливо и свободное место.
Свободное место можно занять радиаторами, ракетами и лазерами. Подробнее каждый пункт будет описан далее.
Кроме распределения массы, мы прописываем каждому Кораблю уникальный движок. Движок места и массы не занимает, пожалеем игроков. Это просто параметр. Вернее, три параметра. Скорость истечения, тяга, и тепловыделение. Два первых параметра произвольно выставляются игроком, третий рассчитывается, как произведение двух первых.
Что это значит. Вы управляете кораблём, выставляя ему вектор ускорения - других параметров регулировки у вас нет (ещё можно стрелять из лазера и запускать ракеты, но об этом позже). Тяга отвечает за ускорение на единицу времени, а скорость истечения - за ускорение на единицу топлива (делённое на общую массу, само собой). Таким образом, если у вас высокая тяга, но низкая скорость истечения, вы без проблем догоните любого противника (или убежите от него), но через пару минут маневрирования останетесь без топлива. Если наоборот - вам без проблем хватит топлива до Марса и обратно, но лететь придётся несколько месяцев, и в пути вас даже ленивый перехватит. Если оба параметра высоки - у вас есть практически идеальный движок, быстрый и экономный... только вам приходится его каждые пять минут выключать, чтобы корабль не поджарился.
Корабль считается уничтоженным и снимается с карты, если его температура превысит определённое значение. Кроме того, от температуры напрямую зависит заметность при движении по инерции - радиус, в котором его видят другие корабли и планетарные датчики. При ускорении радиус во много десятков раз выше и пропорционален текущему тепловыделению (скорости роста температуры), а не температуре как таковой.
Можно потратить часть Массы на радиаторы - они ускоряют снижение температуры.
Лазер работает на том же принципе - повышает температуру вражеского корабля, чтобы довести её до точки разрушения. Десять процентов всегда идёт на нагрев собственного корабля. А сколько из девяноста процентов оставшихся идёт на нагрев вражеского - зависит от расстояния.
Если два корабля оказываются на расстоянии тысячи километров друг от друга или менее, любой из них может выполнить спецкоманду "идти на таран". При этом оба корабля получают существенный прирост температуры, пропорциональный массе и относительной скорости партнёра. Как правило его достаточно для разрушения обоих кораблей, хотя крупный и может иметь достаточно радиаторов, чтобы это тепло сбросить.
Ракета - это по сути тот же космический корабль, только вложенный в свободное пространство другого космического корабля. У него есть свой уникальный двигатель, свой запас топлива, могут быть при желании проектировщика свои лазеры и свои радиаторы... он даже может нести в своём свободном пространстве собственные ракеты, если того пожелает игрок-проектировщик. Количество таких "матрёшек" упирается только в предел делимости (масса кораблей измеряется в килограммах).
Ракета может в любой момент отделиться от корабля-носителя (спецкоманда) при этом у неё будет та же скорость, что и у корабля-носителя в момент отделения. Отделение, вероятно, необратимо (ибо обратная стыковка несколько геморна с программной точки зрения, да и игроку слишком геморно будет скорости выравнивать).
Атмосфера противника (как и наша) имеет параметр температуры. Она греется, когда в неё влетают корабли (особенно если у них высокая масса и скорость), а также когда её облучают лазерами. Медленнее греется, чем звездолёт, конечно. Зато радиаторов на неё не поставишь. Конечная цель войны - нагреть атмосферу противника до критической температуры и не дать нагреть нашу.
Да, чуть не забыл. Чтобы наши космолёты все не были одноразовыми, необходимо дать им возможность заправляться. Так как построение кораблей-заправщиков потребует решения той же неприятной проблемы стыковки, можно отступить от реализма, и позволить кораблям заправляться рабочим телом на лету. Скажем, в собственной атмосфере, во вражеской атмосфере, и в раскиданных по карте газовых облаках.
Итого, объект типа "корабль" описывается семью константами:
Тяга двигателя
Расход топлива двигателя
Тепловыделение двигателя
Масса
Максимальное количество топлива
Количество лазеров
Количество радиаторов
И восемью переменными:
Принадлежность
Текущее количество топлива
Текущая температура
Координаты
Скорость
Ускорение
Обстреливаемый в данный момент объект
Количество и типы ракет
Эти объекты перемещаются по двухмерному полю, где кроме них есть ещё два объекта типа "планета" и несколько объектов типа "облако".
Собственно говоря, это всё. Боль-мень соображающим программистом это лепится за пару суток, насколько я понимаю. Ещё нужна система сохранения типов спроектированных кораблей и бегунки масштабов - для изменения разрешения игрового поля (летают-то корабли на миллионы километрах, а дерутся на тысячах), и для изменения скорости течения времени (полёт длится неделями, а сражение может занять секунды). Тоже вроде бы ничего сверхъестественного.
При этом тактическая гибкость огромна. Сразу интуитивно представляются следующие типы:
Линкор - корабль с большим количеством радиаторов и лазеров, со сбалансированным движком.
Рейдер - корабль, целиком состоящий из запасов топлива и радиаторов, с единственным хилым лазером.
Боевая станция - куча лазеров и радиаторов, хилые запасы топлива. Движок "ионный" - с высокой скоростью истечения и низкой тягой.
Лазерная боеголовка - куча лазеров, никакого топлива и радиаторов. Быстро доходит до критической температуры, зато пока сгорит, успевает ТАК прожарить противника...
"Подлодка" - корабль с "ионным" движком, ползущий к цели (вражеской планете) много месяцев, зато практически незаметный.
Перехватчик - корабль с мощной тягой и низкой скоростью истечения, радиус действия небольшой, зато в нём он догоняет почти кого угодно.
Взрыволёт - корабль с высокой тягой и высокой скоростью истечения, но соответственно, с кошмарным тепловыделением. Пару секунд ускорились, полчаса остываем.
Tags: