Пока тут все обсуждают сбивание шапок, я вдохновился вопросом Chyvachok по поводу того, как же убрать исчезание кусков при сейве. И решил сделать так, чтобы темпентити писались в сейврестор и переходили между уровнями, как самые обычные серверные ентити. Сразу хочу поблагодарить Дядю Мишу за его статью, ведь в процессе создания я руководствовался именно ей.
На данный момент темпентити успешно сейвятся и ресторятся, а также переходят между уровнями. Единственное, что еще не готово, это проверка на trigger_transition'ы, по правде говоря, я просто забыл про их существование. А также я особо не отлавливал баги (а они есть) кроме самый явных. Когда все будет готово, я думаю оформить это в виде тутора, которых последнее время стало очень мало.
Кому интересно, кратко изложу суть. Необходимая информация об активных темпэнтитях пишется в mapname.HL4, а номера темпентитей (пришлось их пронумеровать), которые перешли на другой уровень, пишутся в mapname.HL5. Самое интересное, что халфа при сохранении игры сшивает абсолютно все файлы *.HL? по маске и при загрузке распаковывает их так же. То есть все данные сохраняются прямо в savefile.sav. И поэтому клиенту не нужно знать, например, имена ВСЕХ соседних уровней.
А пока, смотрите видео. За одно посмотрите на мод, про который я ничего не говорил, даже название можете заметить
__________________ Никогда не поздно сделать мод под хл1
Отправлено thambs 31-01-2018 в 22:18:
О, полезная фича была бы. А так что бы они не исчезали со временем можно?
Sigurth да это ж полноценный клиентский сейв! Можно сохранять кастомные декали (такие как фпаранойе) и позицию муз. трека в фмоде.
Добавлено 01-02-2018 в 09:36:
З.Ы. Я тут подумал. Эта штука позволит сохранять значения чего-либо на клиенте. И вспомнил, как делал стамину. Сначала она была клиентская и влияла только на инпут. А потом я сделал серверную, и начался бардак с передачей на клиент.
Отправлено qpAHToMAS 01-02-2018 в 02:38:
Цитата:
Sigurth писал: А пока, смотрите видео. За одно посмотрите на мод, про который я ничего не говорил, даже название можете заметить
Это не мод, это HL .
Отправлено Ku2zoff 01-02-2018 в 03:01:
qpAHToMAS у нас на форуме с давних времён модно называть модами то, что не имеет собственных карт и сюжета. То есть пару дллок + кастомные ресурсы. Каждый второй форумчанин так делал. Я раньше всегда делал одну-две кубичные карты для тестов своих кастомных энтить. А потом, когда перестал делать новые энтити, то и карты делать перестал.
Отправлено XaeroX 01-02-2018 в 04:09:
Не уверен, что это нужная фича.
Но про файлы HL? - интересное наблюдение.
__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!
Отправлено Ku2zoff 01-02-2018 в 04:18:
Цитата:
XaeroX писал: Не уверен, что это нужная фича.
Для темпэнтить - ненужная. Но сама возможность клиентских сейвов - штука полезная.
Отправлено Sigurth 01-02-2018 в 06:18:
Цитата:
thambs писал: Ссылка битая.
Странно, у меня переходит. Это статья про changelevel в quake и hl1.
Цитата:
thambs писал: А так что бы они не исчезали со временем можно?
Можно, это делается довольно просто. Я собираюсь потестировать эту фичу как раз на неисчезаемых, на случай, если кто-то вдруг исчезнет, когда не должен.
Цитата:
Ku2zoff писал: да это ж полноценный клиентский сейв
Да, можно сохранять что угодно)
Цитата:
qpAHToMAS писал: Это не мод, это HL
Да, я ушел в быдлокодинг в головой. Надо бы уже выходить, да карты клепать. К счастью, у меня уже есть сюжет и немного карт, правда это пока концепты.
__________________ Никогда не поздно сделать мод под хл1
Отправлено Ku2zoff 01-02-2018 в 06:58:
Цитата:
Sigurth писал: Странно, у меня переходит.
Эту проблему XaeroX пока исправить не смог. Если юзер зашёл на форум по адресу www.hlfx.ru/forum, то у него открываются ссылки c www, а без www не открываются. И наоборот, если зашёл по hlfx.ru/forum, то с www не открываются.
Цитата:
Sigurth писал: Да, можно сохранять что угодно)
В игре с помощью команд save и load, я вижу по видео, всё работает. А если загружать из меню, когда карта не загружена? И как сохранения из меню, тоже работают нормально? Если да, смело делись кодом, это будет очень оригинальный тутор.
Отправлено Дядя Миша 01-02-2018 в 07:02:
Цитата:
Sigurth писал: Пока тут все обсуждают сбивание шапок
В старости все только этим и занимаются - обсуждают кто сколько шапок сбил и палок кинул. Это вы молодые и у вас еще всё впереди.
Цитата:
Sigurth писал: Единственное, что еще не готово, это проверка на trigger_transition'ы
транзишен нужен для того, чтобы у тебя зверюшки по дну скайбокса не бегали, как в некоторых модах. А темпэнтить сдохнет через секунду после переноса.
Цитата:
Sigurth писал: Необходимая информация об активных темпэнтитях пишется в mapname.HL4, а номера темпентитей (пришлось их пронумеровать), которые перешли на другой уровень, пишутся в mapname.HL5
В HL2 сохраняй, добавь еще один лумп в набор и увеличь номер версии клиентского сейва. Какие еще нафиг номера
Ku2zoff писал: В игре с помощью команд save и load, я вижу по видео, всё работает. А если загружать из меню, когда карта не загружена? И как сохранения из меню, тоже работают нормально?
Из стим-меню как раз вызываются консольные команды "save" и "load". Так что все работает.
Цитата:
Дядя Миша писал: А, ты под чистую халфу делаешь?
Да, под чистый ХЛ.
Цитата:
Дядя Миша писал: темпэнтить сдохнет через секунду после переноса
Ну вот тутор и будет для тех, у кого они живут подольше.
__________________ Никогда не поздно сделать мод под хл1
Отправлено Ghoul [BB] 01-02-2018 в 11:13:
Цитата:
Sigurth писал: решил сделать так, чтобы темпентити писались в сейврестор
А вот сейчас придёт Мастер и собъёт кому-то шапку разъянит,что в сейвестор пихать ещё всякое не стоит - он и так перегружен всяким барахлом. Что приводит к утеканию говна в движок...
Добавлено 01-02-2018 в 14:13:
Лучше бы сделали так, что они в очередь на удаление сьановились. Это бы реально было бы интересно.
Да и зачем вам такое? У вас что, лимит на 500 темпэнтить исчез?!
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Отправлено Ku2zoff 01-02-2018 в 13:47:
Ghoul [BB] ну захотел человек переход темпэнтить между уровнями, ну что тут такого? Сохранение в сейв - побочка. В хл2, вон, всё сохраняется, там полноценный клиентский сейв. И ксашу такое не помешает. Хотя бы на уровне дллок ксашмода и паранойи, для желающих.
Цитата:
Дядя Миша писал: В HL2 сохраняй, добавь еще один лумп в набор и увеличь номер версии клиентского сейва. Какие еще нафиг номера
А если в оригинальной халфе принудительно перезаписать файл *.HL2, сейв/рестор не изломается? Просто это хороший вариант поправить сохранение декалей, и добавить туда темпэнтити, чтоб как в хл2 было. Дядя Миша у меня вопрос. Халфа пишет: "Can't save multiplayer games" (или что-то подобное), при попытке сохраниться в мультиплеере. Это на уровне движка блокировка такая же. Можно как-то это дело обойти? Неохота мутить непонятную хрень для сохранений в коопе. Как-нибудь можно же заставить сейв/рестор из дллок работать в мультиплеере, утащив необходимые функции из движка... Ну, чтобы с друзьями несколько вечеров проходить какую-нибудь кампанию в коопе. Или, например, если все сдохли, начать уровень с теми же параметрами, что и раньше. Вот в свенкоопе как-то топорно сделано, там базовый набор каждый раз даётся. А охота полноценный перенос итемов и параметров игрока.
Отправлено Дядя Миша 01-02-2018 в 13:50:
Сохранение темпэнтить сделать можно, но есть ли смысл в этом? Я всегда считал что никакого. Зачем сохранять то, что, через секунду исчезнет.
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ghoul [BB] 01-02-2018 в 14:22:
Цитата:
Ku2zoff писал: Ghoul [BB] ну захотел человек переход темпэнтить между уровнями, ну что тут такого?
Ku2zoff , я ни в коем случае не против туторов и хороших начинаний. Своим замечанием я всего лишь хотел подчеркнуть, что и с сейв-рестором обходиться надо весьма аккуратно - там не всё так гладко, как может показаться на первый взгляд. Так же присутствуют какие-то лимиты на количество сохраняемых там параметров. Мастер как-то при мне акцентировал вопрос на данной проблеме, и завтра он сам пояснит, что к чему и где не так в сейф-ресторе.
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Отправлено Дядя Миша 01-02-2018 в 14:36:
Цитата:
Ghoul [BB] писал: Так же присутствуют какие-то лимиты на количество сохраняемых там параметров
Лимитов на кол-во там нет, общий размер буффера - 512 килобайт. И вот если его превысить - будет интересно.
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 01-02-2018 в 14:56:
Цитата:
Ku2zoff писал: ну захотел человек переход темпэнтить между уровнями, ну что тут такого?
И вот он, вечный русский вопрос: "а чо такова???!"
__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!
Отправлено Ghoul [BB] 01-02-2018 в 16:24:
Цитата:
Дядя Миша писал: Лимитов на кол-во там нет, общий размер буффера - 512 килобайт. И вот если его превысить - будет интересно.
В Ксаше, конечно же, размер буффера увеличен, не так ли?
Цитата:
XaeroX писал: И вот он, вечный русский вопрос: "а чо такова???!"
Я думаю, не только русский. Просто на другом языке оно совершенно иначе звучит...
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Отправлено Дядя Миша 01-02-2018 в 17:30:
Цитата:
Ghoul [BB] писал: В Ксаше, конечно же, размер буффера увеличен, не так ли?
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Sigurth 01-02-2018 в 17:58:
Цитата:
Ghoul [BB] писал: Лучше бы сделали так, что они в очередь на удаление сьановились
Как вариант, можно спавнить их при помощи CL_TempEntAllocHigh, тогда даже при 500 активных темпентитей движок должен заспавнить новую взамен активной с низким приоритетом. Однако чтобы не было такого, что на карте 500 активных темпентитей с высоким приоритетом, то после спавна новой сразу задавать ей низкий приоритет. Лично не проверял, но должно работать.
Примерно так:
C++ Source Code:
TEMPENTITY *pTemp = gEngfuncs.CL_TempEntAllocHigh( origin, model );
pTemp->priority = TENTPRIORITY_LOW;
Добавлено 02-02-2018 в 00:57:
Цитата:
Ghoul [BB] писал: сейв-рестором обходиться надо весьма аккуратно
А вообще, учту.
Добавлено 02-02-2018 в 00:58:
Кстати, чтобы избежать перегруза сейв/рестора, и вообще какого-либо контакта с ним, можно вполне спокойно писать данные в другой файл, особенно если это чисто клиентские данные, которым переход между уровнями не нужен. Правда будет некрасиво видеть два сохранения вместо одного, но кому вообще надо смотреть в папку SAVE? Я, между прочим, сначала и не подозревал о фишке с .HL? файлами, пока не решил зачем-то открыть блокнотом .sav и отмотать в самый конец, обнаружив при этом заголовок моего .HL4. До этого я их запаковывал в другой файл и распаковывал оттуда же при загрузке уровня. Все это уже попахивало потенциальными багами, и я почти отказался от этой затеи.
__________________ Никогда не поздно сделать мод под хл1
Отправлено Дядя Миша 01-02-2018 в 18:32:
Sigurth ты ландмарк-оффсеты учитываешь? А время исправляешь при смене уровня?
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Sigurth 02-02-2018 в 05:55:
Цитата:
Дядя Миша писал: ты ландмарк-оффсеты учитываешь? А время исправляешь при смене уровня?
Да. С этим были трудности сначала. Во время рестора на сервере посылаю мессагу с pSaveData->vecLandmarkOffset. Но я еще сделаю пару тест-уровней, специально сдвигая часть уровня с ландмарком и все такое. А со временем даже на видео есть баг, и это видно. Там в консоль пишется, что энтитя умрет через 20+ секунд, хотя изначально им дается на жизнь по 10 секунд. Но я это уже исправил.
__________________ Никогда не поздно сделать мод под хл1
Отправлено Дядя Миша 02-02-2018 в 14:54:
Я по прежнему считаю это пустой тратой времени. Ну ладно звуки, иногда во время скриптовых сцен персонажи издают очень длинные сентенции и если сохранится в этот момент, ты уже никогда не услышишь окончания речи. Поэтому звуки я сохраняю. Но кому нужны эти гильзы?
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено qpAHToMAS 02-02-2018 в 15:12:
Цитата:
Дядя Миша писал: Поэтому звуки я сохраняю. Но кому нужны эти гильзы?
Не кажется ли тебе, что так и должно быть? Просто не было реализовано разработчиками игры.
Отправлено Sigurth 02-02-2018 в 15:19:
Дядя Миша Ну это как бывает, запала идея в голову, и пока я ее не воплощу, я спать нормально не смогу. А уж кому нужны, тому нужны, и тот получит, а кому не нужны, тому не нужны, и тот и брать не станет.
__________________ Никогда не поздно сделать мод под хл1
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ~ X ~ 02-02-2018 в 18:19:
Цитата:
Ku2zoff писал: у меня вопрос. Халфа пишет: "Can't save multiplayer games" (или что-то подобное)
каким-то багом иногда удается сохранить мультиплеерную игру. проблема лишь одна - число игроков. Мультиплеерные сейвы надо всегда делать под 32 слота для entindex под игроков. Тогда есть шанс. Но там было что-то еще нехорошее, из-за чего пришлось отказаться от сейва в кооперативе. Увы, не помню.
Лол. Мне тоже эта затея кажется малоцелесообразной - тогда надо пилить p2p-синхронизацию сейвдаты между клиентами, чтоб был мультиплеер и кооп. А так - запилить сериализацию в файл довольно несложно. Кстати, Sigurth, попрыгай по картам типа c2a1 - там тестить транзишены - самое то.
Цитата:
Дядя Миша писал: общий размер буффера - 512 килобайт. И вот если его превысить - будет интересно.
Ага. Только в моей жизни вылеты вызывают мало интереса
Тестировать переполнение этого буфера можно на картах HC2 - с дрезиной. Там до лимитов - рукой подать. Пришлось много усилий приложить чтоб в них влезть.
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Chyvachok 02-02-2018 в 19:06:
Цитата:
Дядя Миша писал: Сохранение темпэнтить сделать можно, но есть ли смысл в этом? Я всегда считал что никакого. Зачем сохранять то, что, через секунду исчезнет.
Во всех играх тупо что куски исчезают, после боя не остается кусков мяса, мебели и остается чистая комната, только декали и целые трупы, после того как я поиграл в Брутал Дум меня впечатлило что там ничего не исчезает со временем, в новой версии добавили настраиваемый лимит, сколько в мире их лежать может, и это реально игру преображает, после боя видно на месте все лежащие куски, гильзы и магазины, а не чистую комнату, меня интересовало именно как заменить удаление по времени на лимит по кол-ву, а сейв, тогда при загрузке сохранения в глаза бросается как комната "чиститься" с неисчезающими кусками при загрузке-сохранении.
Цитата:
Дядя Миша писал: Ну я в ксаше накручиваю лимиты по факту прецедентов. Но не всегда вверх. Вот недавно к примеру уменьшил лимит на модели до 1024 штук.
Кстати, а зачем вообще эти лимиты? Чего их нельзя вообще убрать? И чего двиг обязательно крашиться при их превышении? Опять же, в тех же портах дума есть карты с 100000 монстров к примеру и оно не вылетает, пусть и лагает.
Отправлено ~ X ~ 02-02-2018 в 19:29:
Цитата:
Дядя Миша писал: Вот недавно к примеру уменьшил лимит на модели до 1024 штук.
Тебя Гоуль счас побьет...
Chyvachok да я бы тоже непрочь, но синхронизация! Нельзя же всё делать для одного себя. Но представь, сколько будет грузиться baseline после дезуматча не 32 игрока? Мегабайт 20... Вот так подконнектишься, а матч уже закончился
Chyvachok писал: Кстати, а зачем вообще эти лимиты? Чего их нельзя вообще убрать?
Лимиты в первую очередь завязаны на вполне реальное железо и его возможности.
Цитата:
Chyvachok писал: Опять же, в тех же портах дума есть карты с 100000 монстров к примеру и оно не вылетает, пусть и лагает.
Потому что в дууме монстры спрайтовые. Так-то и халфа может спокойно рендерить по 20-30 тыщ партиклей. Замени текстуру партикля на монстра - будет тебе брутал дуум.
Добавлено 02-02-2018 в 22:33:
Цитата:
~ X ~ писал: Но представь, сколько будет грузиться baseline после дезуматча не 32 игрока? Мегабайт 20...
Самый большой инициализационный пакет который я видел, для сепульчера - 128 килобайт. 4 тысячи энтить.
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ghoul [BB] 02-02-2018 в 20:20:
Chyvachok
Товарищ дело говорит. Было бы неплохо такое реализовать, с исчезанием не по времени, а по количеству. По крайней мере, Ксаш бы прожевал пару тыщь темпэнтитей на карте...
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Отправлено Chyvachok 02-02-2018 в 22:53:
Цитата:
~ X ~ писал: Нельзя же всё делать для одного себя.
Ну в мультиплеере коопе по любому надо все исчезающим оставлять как есть, там важное ФПС, а в сингле на тех же уровнях халвы монстров не так уж много, чтобы там кусков навалило столько что лагать жутко будет, ну и я имел ввиду оставлять самое заметное, типо мяса, а гильзы не знаю даже, патронов у игрока очень много, дофига энтить получиться.
Добавлено 03-02-2018 в 00:53:
Дядя Миша насчет дума я имел ввиду что там если дофига всего на карте и железо не тянет то ФПС печальный будет, а халва к примеру при переполнении эдиктов или еще какого-то лимита вылетает.
Отправлено ~ X ~ 03-02-2018 в 08:16:
Chyvachok в коопе число монстров и патронов ровно такое же. Разве что, кусков от игроков добавится
Да, с эдиктаи вальве тупанули по-страшному. И с сэйвбуфером. На ЭТИХ вещах экономить нельзя. Я уд молчу о том, что не сделали динамическое выделение памяти...
~ X ~ писал: уд молчу о том, что не сделали динамическое выделение памяти...
__________________
В Ксаше сделают, наверное...
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Отправлено Дядя Миша 03-02-2018 в 12:46:
4 мегабайт хватило даже сепульчеру. Больше не нужно.