Добро пожаловать в ретроспективу, где я расскажу как проходил процесс разработки мардера. Основное внимание будет уделено тому, как реализовались механики, а также любопытные детали, которые могут быть интересны.

Info

Если интересуют исходники мардера, то они доступны здесь - totor13x/shaft-cc-gmod-murder. Остальные проекты найти тут

До начала

Карта cs_office_na Карта cs_office_na, я ее изменял для своего сервера

Я один из тех, кто помнит, как выглядел Garry’s Mod в 2013 году. Забавно, что прошло уже 11 лет, а я до сих пор ощущаю нотку старины. В те времена я был просто игроком и не думал, что когда-нибудь буду разрабатывать свои серверы. Это было время относительного спокойствия в политике, социальном плане и в мире игр.

Марс Арена была основной площадкой серверов, где я обитал. Там я познакомился с многими людьми, которые оказали влияние на мою жизнь. В середине 2014 года Марс Арена начала загнивать: многие мои знакомые ушли, начались странные изменения.

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

Начало

Мой проект начался с Мардера, что произошло в районе 2014 года. Луа я знал на уровне “Hello World”, но я был уверен, что смогу освоиться. Я начал с того, что скачал какой-то готовый гейммод, который был на гитхабе. Сейчас, думаю очевидно, что это был от Mechanical Mind. Я начал разбираться в коде, пытался что-то менять, но мне было сложно.

Первые версии лиди Первые версии лиди

Самой первой ролью был ученый. Я помню, что я сделал возможность видеть время смерти у трупов, а также количество живых игроков. Я был рад, что у меня получилось что-то сделать. Потом я добавил врача, который мог возрождать игроков. Автором большинства идей был Крик. Он основатель LiDi, я же скорее второй человек в этом проекте - выполнял техническую часть, а он автор большинства идей и всего-всего.

Еще скрины с первых версий лиди Еще скрины с первых версий лиди

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

Изначально наши роли были полной копией ролей с MA, но со временем я начал добавлять свои собственные. Мы с Криком решили доработать их, чтобы сделать игру интереснее. Думаю, это стало одной из наших главных фишек. Почему мы решили копировать? На тот момент у MA было много проблем, и за сервером не следили. Нам хотелось играть, поэтому мы решили создать свой собственный сервер.

Для этого мы подготовили дизайн документ, с помощью которого отслеживались нужные и полезные фичи. Мы с Криком планировали добавить много новых ролей, механик и карт. Мы хотели сделать сервер, который будет интересен игрокам - создать что-то своё, что будет отличаться от других серверов.

Механики

Многие механики были придуманы не мной:

  • идеи на форуме,
  • некоторые игроки писали мне в личку,
  • некоторые роли придумал Таптыга.

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

Здесь я хочу рассказать о ролях, которые были на Шафте. Я разделил их на сектора, чтобы было удобнее ориентироваться. Также я добавил стандартное описание роли с сервера и свои комментарии, чтобы было понятнее о чем я думал в тот момент. Некоторые из них могут содержать интересные детали или видеозаписи с разработки.

Нюансы

Демо карты Демо карты

Демо лерп движений, изначально планировалось использовать для эффекта адреналина, но не получилось - слишком прожорливая функция Демо лерп движений, изначально планировалось использовать для эффекта адреналина, но не получилось - слишком прожорливая функция

Рофл над постоянно сгорающим в лаве Куебесом Рофл над постоянно сгорающим в лаве Куебесом

Фикс двойного выстрела с Арклей Фикс двойного выстрела с Арклей

  • Изначально трупы были вечными, но потом я добавил таймер на 60 секунд. Я это сделал, чтобы реализовать механику растворения трупов. Это была единственная причина, почему я добавил таймер. Эффект растворения №1 Эффект растворения №1 Эффект растворения №2 Эффект растворения №2

  • На мардере все это время существовали оружия с дезрана и некоторая логика, по типу rtd. Причина тому - css модели и некоторые shared текстуры, по типу нян-гана или дабстеп-гана.

  • Я планировал связать мардер, SWRP, дезран в некоторых моментах. Например, если бы у человека был собран свой световой меч на SWRP, то он мог бы его использовать на мардере. Как я упоминал, для этой логики изначально подготовлен вид от первого лица, чтобы игрок мог видеть свой меч. Помимо меча подразумевалась возможность выбрать способность силы. По своей же сути, в таком случае игроку необязательно было бы покупать дополнительный контент. Началом к такому объединению стали Чао и система крафта. Световой меч от первого лица Световой меч от первого лица

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

    Рандомный момент, где видно использование технических команд Рандомный момент, где видно использование технических команд

  • На мардере впервые появился функционал сайлент админов, хоть и дорабатывался он со временем на дезране. Многие, как мне кажется, были в курсе. Я добавил этот функционал для того, чтобы определенные доверенные лица могли следить за админами и не только. Среди функционала были: Демо сайлент админки Демо сайлент админки

    • просмотр логов
    • просмотр связей между аккаунтами с ip, hwid
    • скриншотинг
    • просмотр ролей
    • полное сокрытие сайлента с панели игроков, при входе и выходе в режим имитируется лог входа и выхода на сервер, при этом заменяется ник на рандомный и технически выключалось взаимодействие с игроком в этом режиме
    • бан, кик, мут, гаг без логов и уведомлений
    • включение микрофона (по типу скрытого слушания, из других игроков никто не слышал, да и сам игрок не знал что прослушивается)
  • Во время всего существования Murder я несколько раз переписывал код, чтобы сделать его более оптимизированным и удобным для игроков. Примерно в 2018 году я начал экспериментировать с ботами. Сложность разработки заключалась в том, что боты не могли использовать навигацию без navmesh. Сейчас уже существуют динамические navmesh, но тогда их приходилось вшивать в карту. Поэтому идея с ботами была отложена. Возможно, если бы я продолжил разработку, то внедрил бы ботов. Экспериментальное техническое демо про navmesh Экспериментальное техническое демо про navmesh

  • Роли Wajha и Карамельки принадлежат одному человеку

Ивенты

Ивенты - это особые режимы, которые запускаются во время игры. Все ивенты были сделаны мной.

Раньше на шафте/лиди были Power Rounds. Это прям интересный плагин был, только со временем мои собственные разработки стали более интересными и они стали постепенно заменять Power Rounds. Вот некоторые из них:

  • Слоу-моу - замедление времени, все движется медленнее
  • TDM - командный режим, где игроки делятся на 2 команды и убивают друг друга. Половина убийц, половина невиновных с оружием.
  • OP Murderer - у невиновных со спавна револьвер, у убийцы повышено HP и со спавна RPG
  • RPG Madness - 1vs1, где у каждого есть RPG с бесконечным боезапасом. После удаления Power Rounds еще жили долгое время и были удалены относительно недавно
  • Tag - Когда убийца наносит кому-то удар ножом, он становится новым убийцей. Каждые 30 секунд текущий убийца умирает, и убийцей становится новый человек

Инфо-блоки

Оригинальные инфо-блоки

Порядок спавна ролейДополнительная информация по ролям
  • 6 игроков:
    • Ученый, Врач
  • 8 игроков:
    • Помощник убийцы
  • 10 игроков
    • Шериф, Хедкраб, Ядовитый хедкраб (16%), Дрессировщик
  • 15 игроков
    • karamel`ka, Санта, Вор/Шут (50%), Курица, @psychonautar (20%), Минер (25%), Алкоголик, Мошенник/продавец (50%)
  • 19 игроков
    • Убийца, Помощник убийцы

Убивать всех могут: вор, шут, минер, помощник убийцы, хедкраб, ядовитый хедкраб, карамелька, @psychnautor

Убийства без наложения РДМ: минер, карамелька (если перешла на темную сторону), убийца, шут, вор, помощник убийцы, хедкраб, ядовитый хедкраб,

УПР: Дрессировщик, врач, шериф, санта, карамелька(если не переходила на тёмную сторону).

Убийство помощника убийцы самим убийцей считается как РДМ

Порядок работы ролей с оружиемВзаимодействие с убийцей

Не могут подбирать оружия:

  • Шут, Хедкраб, Ядовитый хедкраб, Мошенник, Продавец, Курица, @psychnautor

Специальные:

  • Не могут подобрать револьвер - Убийца, помощник убийцы
  • Могут подобрать нож - Вор, убийца

С игроков дропается:

  • Магнум, Шокер, Дефибриллятор, Адреналин

Убийце не обязательно убивать следующие роли для завершения раунда:

  • Убийца, Помощник убийцы, Карамелька, Санта, Вор, @psychnautor, Курица, Мошенник, Продавец, Минер

Роли, которые могут сотрудничать с убийцей и помощником:

  • Карамелька, Вор, Хедкраб, Мошенник, Продавец

Послесловие

Слендер был последним изменением, которое я внедрил на сервер. В моих планах была единая код-система с подсистемами в виде различных игровых режимов. Я хотел сделать синему центральным элементом этой системы, где можно было бы запускать мини-игры или переходить на внешние серверы для игр, таких как Murder или Deathrun.

Об этом я написал здесь.

Сама синема планировалась не как обычная синема, а как хаб для различных мини-игр и других активностей. В итоге я решил закрыть серверы, так как Garry’s Mod уже не соответствовал времени, я сам устал заниматься серверами в одиночку более 10 лет и политическая обстановка деградировала общественность - люди стали более злыми. Думаю, что закрытие серверов было правильным решением.