doom2d.org

Главная база плоских морпехов
It is currently 28 Apr 2025, 18:10

All times are UTC + 3 hours




Post new topic Reply to topic  [ 18 posts ] 
Author Message
PostPosted: 27 Mar 2023, 23:24 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 462
Location: Equestrian Wasteland.
На тему давно минувших дней... А точнее отсюда:
https://doom2d.org/forum/viewtopic.php?f=41&t=2649

Прошёлся специально поиском и не нашёл в целом темы про мутаторы, хотя стоило это бы обсудить как одну из вариаций настроек игрового процесса, причём в чате не раз были обсуждения этой темы. Правда нужно тщательно подумать, что будет под ними подразумеваться для ДФ, а ещё для правильной реализации выкорчевать значения различных параметров у монстров, пушек, игроков и прочего в цвары для удобной реализации и тонкой подстройки.

Параметры их включения/подключения:
Code:
g_use_mutators 1\0 - включаем или выключаем использование мутаторов, если в списке ни один не указан - выводим сообщение что-то наподобие "У вас не указаны мутаторы! Подключите их через меню настройки или при помощи команды mutators_list!"
mutators_list "<name>" - перечисляем список подключаемых мутаторов.

[u]Необязательное:[/u]
mutators_use_recommended 1\0 - подключать или не подключать рекомендованные для определённых карт мутаторы.

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

По поводу скачки: https://doom2d.org/forum/viewtopic.php?f=56&t=3130&p=45030#p45025
По поводу дополнительного способа подключения: https://doom2d.org/forum/viewtopic.php?f=56&t=3130&p=45030#p45030
По поводу настроек внутри игры: https://www.doom2d.org/forum/viewtopic.php?f=56&t=3130&p=45021#p45031

Так же очевидно, что их нужно реализовывать каким-то отдельным файлов, .cfg, .ini, .txt или какой-либо другой - не особо имеет разницы. Структуру самого мутатора предлагаю сделать по следующей конструкции:
Code:
[MUTATOR]
name = "hui"
author = "Vasiliy"
description = "pizda"
version = "v0.1"

[MAPS]
# Настройки использования для отдельных карт для сервера. Необязательно к реализации.
# Зависит целиком от параметра mutators_use_recommended!
PrikolSoft.wad MAP01
DF_DM_MAPS.wad MAP08
DarkLab.dfz MAP01

[CVARS]
# Обычный цвар
pl_pistol_damage = 30
pl_max_hp_set = 666
pl_max_hp_mutliply= 2

# Цвар-список
pl_start_weapons = (
     pistol;
     shotgun;
     bfg9000;
)

pl_start_items = (
     backpack;
     berserk;
     megasphere;
)

pl_start_ammo = (
     bullets = 300;
     shells = 100;
)

# Цвар с мульти-вложением, значения дамага должны умножать на указанное значение
mon = (
     id = 1
     damage = (
         type_1 = 2
         type_2 = 10
     )
     hp_set = 100 # Устанавливаем количество ХП на строго заданное значение
     hp_multiply = 2 # Умножаем имеющееся ХП на это значение
)

# Глобальная настройка для монстров, значения дамага должны умножать на указанное значение
mon_damage = 2

# Пример отлова эвента (необязательно, но тоже полезная штука)
if (game_time = 30), then
    pl_max_hp_set = 5
fi

Это лишь пример реализации, как оно должно выглядеть нужно решать путём обсуждения.

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 27 Mar 2023, 23:35 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 7843
Location: \\HULK
FoxFromPripyat» Это лишь пример реализации, как оно должно выглядеть нужно решать путём обсуждения.
У тебя это почти моды.

Из моего черновика:

Мутаторы
    Ghostmatch
      Всем даются инвизы за счет заведения

    Jetmatch
      Всем даются джетпаки за счет заведения

    Берсматч
      Всем даются берсерки за счет заведения

    Nightmare
      Монстры воскрешаются через 60 секунд после смерти

    Rocketmatch
      Игроки получают бесконечные ракетомёты.
      Всё оружие заменяется на ракеты, втч пистолеты и кастеты.

    No Pistol
      При старте не дается пистолет

    Rndtimingmatch
      Предметы спавнятся с рандомным таймингом, чтобы нельзя было рассчитывать. item_respawn_time ± 20 секунд.

    Instagib
      Игроки получают бесконечные SSG с уроном 1000.
      Всё оружие заменяется на SSG, втч пистолеты и кастеты.
      *note by ar888: инстагиб лучше сделать отдельным видом оружия, типа рейлгана

    Sudden Death
      У всех 1хп, лечилки и броня не спавнятся.

    Nemesis (для DM)
      Летающее, игнорящее стены Привидение (смерть из Блада?, призрак из Дейва?), которое гоняется и убивает с одного удара лидера DM. (ar888)

    Vampire
      За урон врагам прибавляется здоровье (ar888)

    Defrag
      Повышение скорострельности и отключение урона от своих ракет. Чтобы рокетджампиться повсюду. (ar888)

    Low Gravity
      Гравитация понижается, не знаю, насколько это реально в ДФ(ar888)

    Arena
      Всё оружие заменяется на один вид (ar888)

_________________
И неважно, что нет морей на Марсе, каждый морпех носит море в сердце.


Top
 Profile  
 
PostPosted: 27 Mar 2023, 23:45 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 462
Location: Equestrian Wasteland.
Ну отличия, думаю, сам понимаешь, какие. А подключаемость мутаторов в виде отдельного файла предлагаю потому, что это удобно для добавления каких-то своих мутаторов. Если же файлы с сервера не совпадают с файлами игрока - перекачивать и подключать правильный вариант, либо ставим на стандартные мутаторы read-only.
Естественно, надо только будет реализовывать скачивание файлов с сервера и ложить их в отдельную папку. Подключение мутаторов, кстати, можно подсмотреть у Cortex Command, но при этом улучшить - не реализовывать в одном списке, а в два - включённые и выключенные.

Ну а ещё очень не помешает задокументировать потом цвары, если это всё-таки будут реализовывать, чтоб по коду не приходилось рыться в поисках "А что же можно там поменять".

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 28 Mar 2023, 00:03 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 462
Location: Equestrian Wasteland.
Дополнил код ещё парой примеров.

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 28 Mar 2023, 00:25 
Offline
Приколист
User avatar

Joined: 17 Oct 2009, 19:57
Posts: 4102
Location: Киров
Как это в коде будет выглядеть я не буду лезть.
Лучше напишу как это должно быть для обычного рядового игрока, запустившего дф:
1) Стандартный набор мутаторов уже должен идти с игрой (скорее всего практически весь список Джа нужен)
2) Т.к. мутаторы – это уже настройка и фантазия игрока, а не маппера, то и подключать их надо там же, где идёт выбор карты для игры.
3) Надо перебрасывать мутаторы в список "включённых", в общем смотрите тот же UT99 (из которого я некоторые варианты и предложил Джа).
4) Сами мутаторы могут тоже редактироваться прямо в игре, чтобы не плодить сущности. Так при выборе Арены мы определяем какое оружие будет у всех. А при выборе изменения гравитации задаём её значение и т.д.

_________________
Давай, картечью демонов
Размажем по стене.
Давай, берсерком выпустим
Весь ливер сатане!

Сделайте нормальный огнемёт! :evil:


Top
 Profile  
 
PostPosted: 28 Mar 2023, 00:43 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 462
Location: Equestrian Wasteland.
ar888 wrote:
4)Сами мутаторы могут тоже редактироваться прямо в игре, чтобы не плодить сущности. Так при выборе Арены мы определяем какое оружие будет у всех. А при выборе изменения гравитации задаём её значение и т.д.

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

ar888 wrote:
2)Т.к. мутаторы – это уже настройка и фантазия игрока, а не маппера, то и подключать их надо там же, где идёт выбор карты для игры.

В принципе можно сделать две вариации - для "Своя игра" используем именно этот вариант, для мультиплеера общий лист, так как через текущую реализацию маплиста подключаемость по картам реализовать не выйдет. Либо можно дополнить реализацию маплистов костылём:

Code:
# Список карт
alias cmap01 "event onmapstart nextmap df_logo.dfz MAP01;       event onmapend call cmap02"
alias cmap02 "event onmapstart nextmap Darklab.dfz MAP01;       event onmapend call cmap03"
alias cmap03 "event onmapstart nextmap PrikolSoft.wad MAP01;     event onmapend call cmap04"
alias cmap04 "event onmapstart nextmap KakaoDM.dfz MAP01;          event onmapend call cmap01"

# Подключаемые мутаторы
PrikolSoft.wad MAP01 = (
     mutators = "hui, horse"
)

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 28 Mar 2023, 05:21 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 7215
Location: Владивосток
Не вижу смысла это реализовывать до полноценного внедрения Lua в код. А там уже и видно будет, что из этого действительно нужно.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 28 Mar 2023, 08:21 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 462
Location: Equestrian Wasteland.
Луа тоже нужен, но мутаторы можно и без скриптов реализовать - они в деле изменения игровых параметров вообще не нужны (см. Халфу, декорат в портах Дума).
Или они нужны тогда, когда по ходу сюжета на карте нужно что-то поменять.

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 28 Mar 2023, 11:29 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 7215
Location: Владивосток
Я к тому, что нужно сначала завезти самое сложное, а затем уже упрощать его в виде отдельных ипостасей, если потребуется.
Иначе можно запросто наступить на те же грабли, что и GZDoom, в котором уже пяток интерпретаторов одновременно крутится ради обратной совместимости.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 28 Mar 2023, 11:58 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 462
Location: Equestrian Wasteland.
Не оспоришь %)

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 28 Mar 2023, 13:03 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 7215
Location: Владивосток
FoxFromPripyat» Не оспоришь %)
А я и не собирался, на то оно и в "Предложениях" же.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 28 Mar 2023, 13:41 
Offline
Приколист

Joined: 04 Feb 2010, 14:42
Posts: 992
Черный Думер wrote:
Lua
не нравится идея внедрять lua. оно по сути язык общего назначения, без явных границ тика. запросто можно сделать while true do end (бесконечный цикл) и намертво всё повесить. в условном декорате бесконечный цикл можно сделать только переключением стейта и передачей управления дальше. это надо как минимум для дуракоустойчивости. а переписывать весь движок на луа мы не будем.
ar888 wrote:
UT99
посмотрел первое что нагуглил, там обычные скрипты (на UnrealScript) + файлик с метаданными (название мутатора и ссылка на файл скрипта).


Top
 Profile  
 
PostPosted: 28 Mar 2023, 14:15 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 7215
Location: Владивосток
DeaDDooMER» запросто можно сделать while true do end (бесконечный цикл) и намертво всё повесить.
По идее можно пришибать если шаг исполнения не укладывается в общий игровой тик.

DeaDDooMER» это надо как минимум для дуракоустойчивости.
У DECORATE порог вхождения ниже, а значит и дуракоустойчивость заведомо меньше.

DeaDDooMER» а переписывать весь движок на луа мы не будем.
Исключать даже теоретическую возможность этого я бы всё же не хотел.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 28 Mar 2023, 17:57 
Offline
Приколист

Joined: 04 Feb 2010, 14:42
Posts: 992
Черный Думер wrote:
По идее можно пришибать если шаг исполнения не укладывается в общий игровой тик.
плохая идея. тормознет в системе какой-нибудь фоновый сервис, а скрипты отваливаются в игре? идеальные условия для получения плавающих багов.
Черный Думер wrote:
У DECORATE порог вхождения ниже, а значит и дуракоустойчивость заведомо меньше.
это не связанные вещи. в гоззе плохая дуракоустойчивасть потому что нет нормальных проверок, ошибки просто втихую проглатываются. компилятор декората в вавуме тебе расскажет что ты делаешь не так. ну и не надо 1:1 слизывать декорат.


Top
 Profile  
 
PostPosted: 28 Mar 2023, 18:07 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 7215
Location: Владивосток
DeaDDooMER» плохая идея. тормознет в системе какой-нибудь фоновый сервис, а скрипты отваливаются в игре? идеальные условия для получения плавающих багов.
Ну так надо же считать затраченное время (user CPU time), а не физическое (real time), разве нет?
И пришибать следует намертво, вылетая с визгом "критическая ошибка, ваш код кривой", а не только на один тик.

DeaDDooMER» компилятор декората в вавуме тебе расскажет что ты делаешь не так. ну и не надо 1:1 слизывать декорат.
Если DECORATE позволит нам переехать на вменяемую машину состояний с предсказуемым их переключением и поведением анимаций (а не как сейчас), то принципиальных возражений у меня нет, если что.
Пользы от этого по сравнению с текущей ситуацией в любом случае будет кратно больше, чем вреда.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 28 Mar 2023, 19:32 
Offline
Приколист

Joined: 04 Feb 2010, 14:42
Posts: 992
Черный Думер wrote:
Ну так надо же считать затраченное время (user CPU time), а не физическое (real time), разве нет?
Платформоспецифично. Не на всех ос/процессорах можно получить такую инфу. К тому же на тапках код выполняется с одной скоростью, а на модном гей мерском пк - с другой. А еще время может плавать в зависимости от версии движка или флагов с которыми он собран.
Черный Думер wrote:
И пришибать следует намертво, вылетая с визгом "критическая ошибка, ваш код кривой", а не только на один тик.
Ну вот играешь-играешь в игру с модом - и фигак, выбрасывает в меню. Смотришь в лог -- "критическая ошибка, ваш код кривой" и даже со стектрейсом. Репортишь автору мода. А он говорит "ну хз, у меня не воспроизводится, стектрейс показывает на рандомное место, твой комп тормозит.".
Короч такое себе решение Halting problem.


Top
 Profile  
 
PostPosted: 28 Mar 2023, 19:46 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 7215
Location: Владивосток
DeaDDooMER» Платформоспецифично. Не на всех ос/процессорах можно получить такую инфу.
Справедливое замечание, да. Хотя будь мне Lua принципиален, я бы въелся и пошёл доказывать / опровергать это утверждение явно. %-)

DeaDDooMER» К тому же на тапках код выполняется с одной скоростью, а на модном гей мерском пк - с другой.
А вот это как раз значения не имеет. Если процессорного времени прошло X, то значит реального времени прошло как минимум X.
Поэтому если тапок не тянет скрипты за тик (что и так взято с запасом, ибо надо ещё успеть много чего другого сделать), то значит он в принципе не тянет игру с ними как таковую.

DeaDDooMER» Ну вот играешь-играешь в игру с модом - и фигак, выбрасывает в меню. Смотришь в лог -- "критическая ошибка, ваш код кривой" и даже со стектрейсом.
См. выше. Это означает, что у чувака тапок не тянет игру как таковую, а не только конкретный (и правильно написанный) скрипт.
В общем случае интерпретатор ведь не абстрактные вычисления в вакууме выполняет, он код самой игры клацает.

DeaDDooMER» Короч такое себе решение Halting problem.
Стёб засчитан, но ведь я-то над тобой не издеваюсь, а просто обсуждаю, причём достаточно осторожно.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 28 Mar 2023, 20:01 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 462
Location: Equestrian Wasteland.
Могу вставить лишь то, что я за декорат и не как оно сделано в Гоззе, а адекватно и с проверками, чтоб говна никто не писал и по рукам за это получал от игры же.

_________________
aka TerminalHash.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 18 posts ] 

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
doom2d.org, since 2007