doom2d.org

Главная база плоских морпехов
It is currently 07 Sep 2024, 16:46

All times are UTC + 3 hours




Post new topic Reply to topic  [ 22 posts ]  Go to page 1, 2  Next
Author Message
PostPosted: 10 Apr 2023, 18:28 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 422
Location: Equestrian Wasteland.
Из очередного месива Джа напомнил, что неплохо было бы завести рандомный таймер респауна предметов. Расширим эту задумку вглубь.
Сама рандомилка должна быть двух типов - глобальная (респаунится рандомно всё) и отдельные предметы (мега, инвул, патроны и тд). Оба типа должны регулироваться при помощи промежутка, то есть:

1. Если мы хотим вводить отдельную переменную:
Code:
g_item_respawn_random = 1

Следующая переменная переключает с режима одиночного числа на промежуток:
g_item_respawn_time 25 120
Где первое число - минимальные значения, а второе - максимальные

2. Либо оставляем одну переменную, но позволяем работать ей в двух режимах - то есть, если два числа, первое - наименьшее, второе - наибольшее, а если одно - считаем его за наибольшее.

Для предметов регулировку производить точно так же - либо одиночным числом, либо промежутком:
Code:
g_item_respawn <id> <first-time> <second-time>

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 10 Apr 2023, 18:37 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 7558
Location: \\HULK
Сложно.
Вот вариант проще:
g_item_respawn_time_rnd 0 - респаун итемов без рандома. Например, при g_item_respawn_time 60 это 60 секунд.
g_item_respawn_time_rnd 5 - респаун итемов с рандомом ± 5 сек. При g_item_respawn_time 60 это будет 62, 58 и тд, но не больше 65 секунд и не меньше 55 секунд.

Про конкретные итемы пока без комментариев, но было бы неплохо как минимум разделить их на аптечки, стволы, патроны, армор и пауэрапы (синяя бронь - пауэрап, берс - оружие).

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


Top
 Profile  
 
PostPosted: 10 Apr 2023, 18:39 
Offline
Приколист
User avatar

Joined: 17 Oct 2009, 19:57
Posts: 4019
Location: Киров
Не считаю рандом респауна хорошим. Это скорее неспортивно и плохо. Очень хорошо качать умение рассчитывать, а не полагаться на случайность.
Но вот для первого респауна паверапов (чтоб они вначале карты не лежали уже) было бы круто ввести рандом 15-45 секунд, например.
ADDED:
Берсерк я к паверапам тоже отношу.

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

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


Top
 Profile  
 
PostPosted: 10 Apr 2023, 18:54 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 7558
Location: \\HULK
Ар, это просто одна их настроек. И не дефолтовая.

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


Top
 Profile  
 
PostPosted: 10 Apr 2023, 18:56 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 422
Location: Equestrian Wasteland.
ar888 wrote:
а не полагаться на случайность.

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

ar888 wrote:
Но вот для первого респауна паверапов (чтоб они вначале карты не лежали уже) было бы круто ввести рандом 15-45 секунд, например.

На это можно повесить отдельную переменную, плюсую за такую задумку.

_________________
aka TerminalHash.


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

Joined: 18 Oct 2009, 04:01
Posts: 6725
Location: Владивосток
ar888» Не считаю рандом респауна хорошим. Это скорее неспортивно и плохо. Очень хорошо качать умение рассчитывать, а не полагаться на случайность.
+1

ar888» Но вот для первого респауна паверапов (чтоб они вначале карты не лежали уже) было бы круто ввести рандом 15-45 секунд, например.
+1

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


Top
 Profile  
 
PostPosted: 10 Apr 2023, 19:20 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 7558
Location: \\HULK
Вообще это элементарно тестится на играбельность, надо карту переделать какую-нибудь и протестить.

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


Top
 Profile  
 
PostPosted: 10 Apr 2023, 19:22 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 422
Location: Equestrian Wasteland.
Jabberwock wrote:
Вообще это элементарно тестится на играбельность, надо карту переделать какую-нибудь и протестить.

Можно просто сделать микро-мясную карту с лёгким доступом к павер-апам и на ней проверить. Чтобы тесты не затягивать.

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 20 Jul 2023, 00:10 
Offline
Приколист
User avatar

Joined: 24 Jan 2012, 15:18
Posts: 1425
Location: Москва
В кваке кстати паверапы/рулезы респавнятся реже обычных предметов, и при их респавне воспроизводится особый звук, который слышен всем на карте, независимо от их текущего местонахождения.

Потом в результате это частенько сопровождается битвой за рулез. :)

_________________
by Stas'M


Top
 Profile  
 
PostPosted: 20 Jul 2023, 00:48 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 422
Location: Equestrian Wasteland.
binarymaster wrote:
В кваке кстати паверапы/рулезы респавнятся реже обычных предметов, и при их респавне воспроизводится особый звук, который слышен всем на карте, независимо от их текущего местонахождения.

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

_________________
aka TerminalHash.


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

Joined: 19 Jun 2019, 23:28
Posts: 422
Location: Equestrian Wasteland.
ar888 wrote:
Но вот для первого респауна паверапов (чтоб они вначале карты не лежали уже) было бы круто ввести рандом 15-45 секунд, например.

Для определённого промежутка я не разобрался, каким образом это сделать, но зато впилил как смог:
https://repo.or.cz/d2df-sdl.git/commit/94590b18ecb2eeb8b0527d1eee20c7f85ada60b7
https://repo.or.cz/d2df-sdl.git/commit/c80103f4512aa43ff38aa01395944f277266e359

Регулируется следующим образом:
Code:
g_powerup_randomize_respawn - при единице включает рандомный респаун поверапов;
g_powerup_time_multiplier - любое значение, отличное от нуля, будет являться набором чисел для рандомизации (последнее значение не включено).

Так же, это можно сделать из меню "Своя игра" или "Создать сервер".
ВНИМАНИЕ: Для несвежих конфигураций выставьте значение второй команды в 60 (61), чтобы не было бесконечного респауна при включении параметра!

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 01 Sep 2023, 15:22 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 7558
Location: \\HULK
Допустим, у нас g_item_respawn_time 60. g_powerup_time_multiplier 5 даст диапазон респавна от 55 до 65 секунд?

Как по мне, удобнее было бы сделать одну переменную g_powerup_respawn_rnd_time (секунды).
При нуле оно не рандомится, при значении, отличном от нуля рандомится. При g_powerup_respawn_rnd_time 5 диапазон респавна от 55 до 65 секунд.

И еще g_powerup_firstspawn_rnd_time. Чтобы рандомило первое появление пауэрапов.

P.S. (ну и в идеале сделать такие же настройки для остальных итемов - лечилок, патронов, оружия, других итемов)

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


Top
 Profile  
 
PostPosted: 01 Sep 2023, 15:36 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 422
Location: Equestrian Wasteland.
Jabberwock wrote:
Допустим, у нас g_item_respawn_time 60. g_powerup_time_multiplier 5 даст диапазон респавна от 55 до 65 секунд?

Смотри, как оно работает.
Если у нас g_powerup_randomize_respawn равен единице, то респаун поверапов проходит по следующей формуле:
Code:
Random(gGameSettings.RulezTimeMultiplier) * 36

Разбирая формулу, получаем:
Выбирается число из выставленного в g_powerup_time_multiplier диапазона (не включая последнее) и умножается на тики.

Изначально я хотел сделать:
Code:
(Random(ItemRespawnTime) + gGameSettings.RulezTimeAdditive) * 36

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

Jabberwock wrote:
И еще g_powerup_firstspawn_rnd_time. Чтобы рандомило первое появление пауэрапов.

P.S. (ну и в идеале сделать такие же настройки для остальных итемов - лечилок, патронов, оружия, других итемов)

Это всё тоже можно сделать, но решил пока ограничиться лишь паверапами. С отдельными настройками каждого предмета (не по группам) надо думать, как бы сделать по-красивше. Видится вариант делать дополнительное меню для настройки респаунов, но это надо бы обсудить. А так я разбирался в коде g_menu.pas и меня отталкивает необходимость дважды писать менюхи.

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 01 Sep 2023, 17:57 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 422
Location: Equestrian Wasteland.
Я дурак и зря не смотрю, что там в функциях пасцаля есть, спасибо Prostovitalik за подсказку.
https://repo.or.cz/d2df-sdl.git/commit/d0c37e245a31713f3207059347ded7e97dfb5564

Что изменилось с коммитом?
Теперь мы имеем три изменяемых параметра:
Code:
g_powerup_randomize_respawn - при единице включает рандомный респаун;
g_powerup_respawn_time - время респауна для поверапов;
g_powerup_time_random - дополнительное число, которое прибавляется/вычисляется из времени респауна поверапов.

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

Формула стала следующей:
Code:
Max(1, (gGameSettings.RulezRespawnTime + RandomRange(-gGameSettings.RulezRespawnRandom, gGameSettings.RulezRespawnRandom + 1)) * 36);

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 08 Sep 2023, 01:41 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 422
Location: Equestrian Wasteland.
Чутка подзадолбался, но сделал ещё и для предметов, правда, по группам.
https://repo.or.cz/d2df-sdl.git/commit/ ... 9be803a0dd

Переменные следующие:
Code:
ВНИМАНИЕ: ДОЛЖНА БЫТЬ АКТИВНА ТОЛЬКО ОДНА КОНСОЛЬНАЯ ПЕРЕМЕННАЯ!!! (или несколько, если это сочетание help/weapon/ или help/ammo или weapon/ammo)
g_items_all_respawn_random - включает/выключает рандомную респу для всех предметов;
g_items_help_respawn_random - включает/выключает рандомную респу для вспомогательных предметов;
g_items_ammo_respawn_random - включает/выключает рандомную респу для боеприпасов;
g_items_weapon_respawn_random - включает/выключает рандомную респу для оружия (если выключена опция "Оружие остаётся").

g_item_time_random - прибавляемое/убавляемое число для формулы.

Формула аналогична рулезам, только переменные другие, вот и всё. Настраивается в отдельном меню в "Своя игра" и в подменю "Создать игру" из меню мультиплеера.
Есть всего пять значений у опции:
Code:
Все предметы - применяется ко всем предметам, очевидно;
Только вспомогательное - применяется к аптечкам, броне, кислородному баллону, рюкзаку и к склянке со шлемом;
Только боеприпасы - применяется только к боеприпасам:
Только оружие - применяется только к оружию (при условии, если выключена переменная "Оружие остаётся");
Вспомогательное и боеприпасы - применяется только к вспомогательным предметам и боеприпасам;
Вспомогательное и оружие - применяется только к вспомогательным предметам и оружию;
Оружие и боеприпасы - применяется только к оружию и боеприпасам;
Ничего - рандом выключен.

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

UPD от 8.09.23 13:30:
Добавил ещё дополнительные варианты кастомизации рандомного респауна предметов:
https://repo.or.cz/d2df-sdl.git/commit/4bbb1dced3434adcd1fdd0168c9de9ce64e42ce4

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 08 Sep 2023, 01:48 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 422
Location: Equestrian Wasteland.
А и да, вопрос на повестке дня, всё никак не могу озвучить.
Чем считать синюю броню - пауэрапом или обычным предметом? Я делал так, как было в коде воспроизведения звука и синяя броня ею не является по нему.
ЧД, сообщение не объединяй, это отдельный вопрос!

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 08 Sep 2023, 02:45 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 7558
Location: \\HULK
Я думаю, пауэрап - он или имеет сверхъестественное происхождение (типа меги), или дает что-то особенное (типа способности летать).
А тут просто броня. Ну, класс защиты повыше.

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


Top
 Profile  
 
PostPosted: 08 Sep 2023, 16:01 
Offline
Приколист
User avatar

Joined: 17 Oct 2009, 19:57
Posts: 4019
Location: Киров
У меня на картах часто идёт противопоставление синего шарика и синей брони. Так что вполне считаю их паверапами и схожими по ценности.

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

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


Top
 Profile  
 
PostPosted: 08 Sep 2023, 16:09 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 6725
Location: Владивосток
FoxFromPripyat» Переменные следующие
Мне очень сильно не нравится, что их так много.
Должна быть одна переменная g_items_respawn_random с разными значениями через запятую: "off" - выключено, "all" - для всех предметов, "guns,ammo" - только боезапасы и оружие, и так далее.

FoxFromPripyat» Чем считать синюю броню - пауэрапом или обычным предметом? Я делал так, как было в коде воспроизведения звука и синяя броня ею не является по нему.
ar888» У меня на картах часто идёт противопоставление синего шарика и синей брони. Так что вполне считаю их паверапами и схожими по ценности.
Я согласен с обоими тезисами и поэтому предлагаю вариант попроще: если случайный респаун поверапов включён, то считать её поверапом, в противном же случае считать предметом.

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


Top
 Profile  
 
PostPosted: 08 Sep 2023, 16:27 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 422
Location: Equestrian Wasteland.
Чёрный Думер wrote:
Мне очень сильно не нравится, что их так много.

Что про ConRegVar писал, что про это могу написать - какие-то такие улучшения уже сами пишите.
Если делать ConRegVar - я не сообразил, каким образом можно сделать нормальную обработку из соответствующего меню (а это ещё и в код обработки формул надо лезть-думать, чтобы оно работало как требуется), но зато это резко убирает кучу опций, что наоборот полезнее.

Если делать одну переменную - ну напиши обвязку для WriteFlag каким-то адекватным образом, чтобы записывать все четыре гейм-опции нормально. Я делал по примеру g_friendly_* и g_bot_* переменных. Но это оставляет все опции на месте, что как бы такое себе решение (в частности из того, что мне ответил Кетмар - при заполнении лимита битов: "менять версию протокола, начинать сначала в новом инте"). Именно поэтому всякие индивидуальные настройки для каждого предмета лучше реализовывать через мутаторы, либо каждый раз трахаться с ConRegVar, что не комильфо.

_________________
aka TerminalHash.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 22 posts ]  Go to page 1, 2  Next

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