ОСТОРОЖНО! ОШИБКИ! Добра тебе, почтеннейший анон.
Представляю тебе на суд онлайн-игру об одиночестве, бесконечно бесконечности и безысходности.
Начну, пожалуй, с короткого изложения игрового мира.
Мир - бесконечная
(почти) вселенная, холодный и одиноки космос, набитый пустыми и одинокими планетами, звёздами и системами.
Колония (далее База) людей покинула солнечную систему миллионы миллиардов лет назад, в связи с грядущим концом земли (солнце не вечно, все дела). Было отправленно 7 колоний. Отправились они в разные стороны и задача их - лететь далеко-далеко, пока не найдётся стреда, пригодная для жизни. Действие разворачивается на одной из колоний. (колония №5 на пример)
Колония представляет себе гиганскую консервную банку со спящими людьми, и управляемую AI по имени Niki. Так этот корабль довольно не плохо автоматизирован и готов пролететь тысячи световых лет не тревожа сон спящих.
Однако супер-совремннные крутые двигатели, которыми оснащена станция не так круты как оказалось. И доставили колонию не только за пределы видимой на то время вселенной, а ещё и не понятно в каком направлении. Дальш веселей. Пока Niki собирала карту звёздного неба - колонию атаковала группа бомбардировщиков. Атака была отражена автопилотом, ондако потерпела лютые повреждения и не могла двигаться дальше. AI-Niki была вынуждена будить людей и просить их о помощи.
Первым делом колония должна была готовится к следующему удару, вероятность которого велика, так жа Базе нужны ресурсы для ремонта и восстановления.
Niki так же не валяла дурака по дороге, и напридумывала массу причудливых технологий, винррнейшая среди которых - технология, позволяющая управлять техникой удалённо, не вынимая пилота из его капсулы на базе. Так что теперь ты, %username% - это твой корабль. Он - твои руки, ноги, глаза и крылья. Он твой мечь и лопата. Он - это ты.
Каждому будущему пилоту выдаётся корабль, (приемлемый для пилота по классу и проф-пригодности).
И так мы в космосе.
Niki отблагодарит тебя за ресурсы и найденные ценные планеты и ситемы.
Никакой злой стороны нет. Только то, что тебе поведала Niki. И если они появятся - их нужно уничтожить, или быть уничтоженным. Задача всей колонии - возобновление ресурсов и развитие.
Помним что Niki - это AI.
AI глубоко насрать на разборки между пилотами, на то в какие они группировки объединяются и как распоряжаются.
Однако Niki охраняет зелёные зоны и пространсттво вокруг базы люто карает тех, кто устраивает разборки в этих зонах.
Niki может объявить зелёной зоной любую зону на своё усмотрение, если она соответствует определённым характеристикам.
В зелёной зоне нельзя открывать огонь по членам колонии.
В качестве карательной меры Niki помечает нарушителя как преступника и объявляет его в розыск. Можно откупится ресурсами, а можно получить по лбу ботами Niki или от других юзеров, которые взяли квест на поимку конкретного приступника.
Квесты частично генерятся. На пример Niki часто выдаёт задания на поиск новых планет, содержащих определённые ресурсы, чтобы потом объявить их зелёной зоной. На каждого нарушителя "зелёного режима" создаётся карательный квест - "Найти и уничтожить".
Стоит отметить что у пользователя может быть два корабля. И в розыске будет только один из них. (хотя нельзя взять квест на поимку своего корабля). Так же корабль можно пустить на метал после того как ты насвинячил. С весомым штрафом конечно. будем считать это лазейкой в законодательстве.
При появлении противника (как те что напали на колонию) автоматически создаётся квест на перехват.
на планету можно приземлится. Юнит окажется в замкнутом пространстве. По типу "планету можно облететь вокруг". Где правила поведения такие же как и в космосе, но с возможностью строить наземных юнитов и постройки.
Универстальная единица. Ракета - это такой же юнит как и танк, шахта, планета или самолёт.
Танк отличается от самолёта наличием гусениц и отсутствием двигателя для полётов и прыжков. Шахта отличается от самолёта отсутствием девайсов, приводящих её в движение. Однако ничто не мешает прицепить потом к ней двигатель. Правда понадобится большой и мощный двигатель, ибо поднять здание в воздух сложнее чем лёгки самолётик. Опять таки - бурильная установка весьма велика для того чтобы стаивть её на маленьки летательный аппарат.
ракета вообще от корабля ничем не отличается, кроме надора автопилотов (которые тоже можно изменить).
На пример добавить к ракете грузовой отсек, набить его ракетами, и поставить пусковую установку на ракету. Получим подобие советской ракеты "Сотона" :3 - пару кликов в панели автопилота, и ракета будет выпускать суб-ракеты в тот же момент, как только на ракету попытался навестись целевой объект или другая ракета.
Юнит существует с начала игры и до его смерти. Если юзер оффлайн и не в зелёной зоне - его корабль вполне себе может быть сбит другим пилотом или "тем самым неизвестным протиником".
Каждый юнит имеет слоты под устройства - двигатели, щиты, пушки, бурильные установки и так далее... качества которых меняются в зависимости от материала, из которого сделана единица. То же самое касается и самих айтемов - пушек, щитов, двигателей...
- Айтемы - ещё одина универсальная единица. Рассмотрим на примере буровой установки. Скажем у неё изначально заполненно несколько слотов - сверло, сборщик, контроллер, двигатель, генератор.
Собираем другое сверло из другого материала - буравая установка изнашивается быстрей. Собираем её полность из углеродистых волокон и лёгких высокопрочных материалов, ставим более мойщиный источник питания и двигатель - она работает быстрее и весит меньше - можно прицепить её на средний кораблик и ты - "сам себе шахта"
Ресурсы - это грубо говоря материалы, которые делятся на несколько групп.
- Горючие (что можно использовать как топливо или взрывчатку),
- Металлы (из чего можно что-то построить)
- Странные (имеющие какие-то специфические свойства - назвал так по тому что не знаю как ещё...)
Ресурсы добываются на планетах.
Некоторые ресурсы сразу после добычи готовы к применению (на пример большинство металов не нужнаяются в переработке).
Ресурсы можно между собой смешивать разными способами. Плавление, Эелктролиз, "Уговаривание", синтез... Или просто перерабатывать.
Результат: новый ресурс. Если смешать 100500 разных ресурсов и получить что-то что по свойствам эквивалентно железу - мы будем считать что ничего нового мы не изобрели и то что получилось - это железо.
(это упрощённая схема без углубления в матаны/физики/химии, и весь набор веществ тоже будет вымышленный)
ТАк из любого твёрдого вещества можно склемать корабль или какойто айтем из набора существующих моделей, однако его свойства напрямую будут зависить от свойств материала.
Для починки раздолбанного девайса потребуется это же вещество.
В целом он прост как двери. лети туда, делай то. Он же будет применяться для ботов (противников и ботов Niki)
В нём есть одна фишка. Есть очерёдность команд и возможность зациклить действия. И выйти из автопилота при определённом условии или перейти на какой-то шаг.
Это позволит реализовать сложные автопилоты для ракет, рабочих кораблей, ведомых и т.д. На пример корабль, который будет отвозить ресурсы на базу с вашей шахты в другом краю вселенной.
Звучит просто. ТАк уходя в оффлайн вы можете заставить своего юнита что-то делать, пока вас не будет на проводе.
Из этого простого набора сущностей у нас получается простенький вариант X3 в пиксельарте с примесью Рейнджеоров.
И всё это было бы совсем бессмысленно, если бы ни како-то рабочий прототип.
Если вы программист - прежде чем читать дальше - уберите подальше все колюще-режущие предметы, отодвиньтесь от монитора на роасстояние более вытянутой руки, зядьте и выровняйте дыхание.
Перечислю технологии:
Frontend: JS / HTML5 / CSS3 / WebGL / WebSockets
Backend: NodeJS / Express / ReDis
ЧТО УЖЕ ЕСТЬ:
Сервер:
- Вселенная. Можно лететь куда угодно. Долго и мучительно.
- Юниты со слотами под девайсы. Инвентарь.
- Возможность садится на другой корабль. Получать доступ к его инвентарю и слотам.
- Собирать-разбирать девайсы.
- стрелять ракетами (на этой неделе постарюсь так же rail-gun сделать)
- одноуровневый AI (делаю тольк то, что делаю сейчас)
- возможность садится на планеты (и летать по ним)
- наводится на цель и выполнять ряд простых операций (атаковать, протаранить, преследовать, приземлится, взлететь, стоять и тупить)
- мёртвый корабль вытрушивает часть своих айтемов и их можно подобрать
Клиент:
- рендер юнитов, планет
- многоуровневого фона с паралаксом (пока топорного, но это не страшно)
- UI для всего что умеет сервер на данный момент
- авторизация (пока только по ID корабля, так как я ... сидите? пропустил этап построения БД и авторизации чтобы ускорить разработку основной игровой механики)
- пачка красиых спижженых пиксельартовых корабликов и PNG-шек для планет.
В ближайшее время:
- Реализация добычи ресурсов на планетах
- возможность мастерить из ресурсов девайсы
- особые event'ы для девайсов (чтобы можно было что-то сделать в момент установки девайса на корабль, в момент снятия, в тик времени... в общем сделать из девайсов самостоятельные сущности)
- возможность получать новые материалы
- возможность строить новые юниты и переключаться между ними
- наземная техника, приземление (корабль будет неподвижен если у него нет наземных прибамбасов для передвижения по поверхности)
- rail-gun
- генерация вселеной. чтобы улетев далеко-далеко юзер мог наткнутся на новую систему, звузду, планету, а на планете найти, скажем, следы тех самых мистических нападаших... или другого юзера.
В дальнейшее время:
- прыжковый двигатель
- под-пространственный двигатель для перемищения "в сумраке" (позволит кораблю перемещаться на "другой план" с теми же координатами)
- особенности среды. возможность задавать поверхости планеты или паралельной вселенной особенности типа плотности, токсичности, температуры.
...и туева хуча всяких штук которые впишутся в общую систему.
Не знаю как будет дальше... меня дико прёт писать эту штуку. И ясен пень встанет вопрос производительности серверной части так как я знаком со всеми "за" и "против" NodeJS.
Но пока до этого дойдёт - я надеюсь я рзбагатею на рефакторинг.
Вот... зачем пишу?
Понятия не имею. Выношу на суд. Как разберусь с хостингом - обязательно выложу потыкать. Вообще клиент можно выложить в виде пачки HTML файлов. Беда только в том что через пару часов клиент может быть не совместим с сервером. Посему сначала на хостинг. Вот сегодня этим и займусь.