HLFX.Ru Forum
Показать все 232 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Глобальное изменение масштаба (https://hlfx.ru/forum/showthread.php?threadid=4593)


Отправлено JPEG 03-05-2015 в 22:09:

Глобальное изменение масштаба

Вообщем, хочу уменьшить все объекты, чтобы можно было делать по сути большие с точки зрения масштаба карты. Нашёл тутор, но не понял, что значит в шаге 7 "Enter both Entropy's omegafied code, and a modified version of my old PM_UpdateClipBox function:
NOTE:You'll need to include com_model.h, so make sure you wipe out any struct at the top of pm_shared.c thats been duplicated from com_model.h as well.", поэтому не компилится

Сам тутор:
http://articles.thewavelength.net/232/

(есть отличная идея уменьшить всё раз в 16, и замаппить целый микрорайон, но вот тут косяк пока с кодом)

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ku2zoff 04-05-2015 в 06:34:

Цитата:
Yo Den писал:
"Enter both Entropy's omegafied code, and a modified version of my old PM_UpdateClipBox function:

Автор тутора какой-то дурачок. Вместо того, чтобы всё понятно описать, он придумал какие-то девчачьи, взрослые и рукопашные хуллы. Но особенно меня впечатлил чисто визуальный рескейлинг модели. От там прямым текстом пишет: дескать, я рекомендую скейлить модели правильно (то есть саму модель уменьшать, а не хак в коде юзать), и не вносить это изменение; если ваш мод (внимание, самый шик! ) не использует хитбоксы, а вместо этого использует BBOX, всё нормально. То есть в этом туторе мы имеем чисто визуальное уменьшение. Ну и как в это играть? Взял бы да написал, дескать, сначала уменьшите модели.
Цитата:
Yo Den писал:
поэтому не компилится

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


Отправлено JPEG 04-05-2015 в 13:03:

Цитата:
Ku2zoff писал:
Ты хоть лог компилятора приложи что ли... Чего там у тебя не компилится.

что выкладывать то, если я не понимаю ""Enter both Entropy's omegafied code, and a modified version of my old PM_UpdateClipBox function:
NOTE:You'll need to include com_model.h, so make sure you wipe out any struct at the top of pm_shared.c thats been duplicated from com_model.h as well."" и не могу правильно выполнить этот шаг

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено XaeroX 04-05-2015 в 14:00:

Yo Den
Ну ты ввёл энтропийный омегифицированный код или нет? Что именно не получатся?

__________________

xaerox on Vivino


Отправлено JPEG 04-05-2015 в 15:41:

Цитата:
XaeroX писал:

ок, решил начать заново и компилить после каждого шага. В данный момент в туторе шаг 2, начинается со слов "Open up world.cpp
Find CWorld::Spawn(), place this above it:". Вроде бы понял, сделал так:
C++ Source Code:
1
extern "C"
2
int g_model_hulls_fixed;
3
 
4
void CWorld :: Spawn( void )
5
{
6
  g_fGameOver = FALSE;
7
  Precache( );
8
  g_flWeaponCheat = CVAR_GET_FLOAT( "sv_cheats" );  // Is the impulse 101 command allowed?
9
  g_model_hulls_fixed = 0; // New map - make sure all the models get fixed again
10
}


По дефолту там
C++ Source Code:
1
void CWorld :: Spawn( void )
2
{
3
  g_fGameOver = FALSE;
4
  Precache( );
5
  g_flWeaponCheat = CVAR_GET_FLOAT( "sv_cheats" );  // Is the impulse 101 command allowed?
6
}


Возникает такая ошибка: "1>world.obj : error LNK2001: неразрешенный внешний символ "_g_model_hulls_fixed""

Добавлено 04-05-2015 в 18:41:

Ну или черт с ним, с тутором, лучше подскажите, как исправить то, что на скрине: если задать маленький хулл игроку и подойти к стене, то его взгляд будет проходить сквозь стену (на скрине взгляд проходит как раз сквозь стену и видно то, что внутри дома), как уменьшить "дальность взгляда" вектор ну или что это, как это вообще устроено, связано ли это с GetHullBounds?

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ghoul [BB] 04-05-2015 в 16:17:

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

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

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено JPEG 04-05-2015 в 17:20:

Цитата:
Ghoul [BB] писал:
перекомпилить все карты под новые хуллы

для начала эти карты нужно сделать)
Цитата:
Ghoul [BB] писал:
но карта будет голой т.к. если игровых лимитов на стандартную карту хватает, то на новую уже не будет хватать.
как же, меньше дом на карте - меньше брашей на него используется, но карта не станет от этого голой.
Цитата:
Ghoul [BB] писал:
И еще возникнет проблема с попаданиями в игрока - чем меньше хуллы и хитбоксы, тем сложнее попатсь. наткнулся на эту проблему в Тириане

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

Добавлено 04-05-2015 в 20:20:

Цитата:
Ghoul [BB] писал:

для примера набросал на коленке кривую карту. Всё в 16 раз меньше стандартных размеров хл, стандартная сетка хаммера. Высота 5этажки 63 юнита. Стандартная сетка хаммера

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ku2zoff 04-05-2015 в 17:21:

Цитата:
Yo Den писал:
""Enter both Entropy's omegafied code, and a modified version of my old PM_UpdateClipBox function:

Цитата:
XaeroX писал:
Ну ты ввёл энтропийный омегифицированный код или нет? Что именно не получатся?

Ну я ж не ошибся, что автор дурачок А ведь это код, написанный юзером Entropy, модифицированный юзером Omega, и модифицированный код старой функции PM_UpdateClipBox, написанный Omega.
Эти буржуи, чесслово, меня забавляют до смерти. Придумывают весьма и весьма годные вещи, а реализуют через жопу с кучей индусского говнокода. И ещё умудряются комментировать свои туторы как Велимир Хлебников стихи писал, что ничего не разберёшь.
Цитата:
Yo Den писал:
Возникает такая ошибка: "1>world.obj : error LNK2001: неразрешенный внешний символ "_g_model_hulls_fixed""

Фтопку русскую версию Visual Stduio. Я с трудом смог понять, что значит "неразрешенный внешний символ" Это значит "неопределённый (необозначенный) внешний символ", то есть "unresolved external symbol".
А ты вставил строчку int g_model_hulls_fixed = 0; в любое место вне функции в pm_shared.c?


Отправлено JPEG 04-05-2015 в 17:40:

при этом в игре графика лучше, чем в кс

Добавлено 04-05-2015 в 20:24:

http://s57.radikal.ru/i155/1505/bc/a18a1a47392b.jpg пример квартир. Можно их сделать целую кучу. Затем наложить детальные текстуры. http://radikal.ru/Img/ShowUploadedI...077288ca8c9ebee вид микрорайона сверху в стандартной сетке

Добавлено 04-05-2015 в 20:32:


Добавлено 04-05-2015 в 20:40:

Цитата:
Ku2zoff писал:
в любое место вне функции в pm_shared.c?

спасибо) сейчас буду смотреть дальше

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ku2zoff 04-05-2015 в 17:49:

Цитата:
Yo Den писал:
при этом в игре графика лучше, чем в кс

Потому что масштаб текстур маленький. В такой ситуации очень возможно наткнуться на лимит компиляторов из-за этого.


Отправлено JPEG 04-05-2015 в 19:10:

Цитата:
Ku2zoff писал:
Потому что масштаб текстур маленький. В такой ситуации очень возможно наткнуться на лимит компиляторов из-за этого.

Не, просто использованы детальные текстуры. У меня и со скейлом 0.04 карта нормально компилится

Добавлено 04-05-2015 в 21:23:

Цитата:
Ku2zoff писал:

вроде всё компильнулось, но появлился варнинг "pm_shared\pm_shared.c(217) : warning C4700: использована неинициализированная локальная переменная "model"" на строчке "if (pmove->physents[0].model[model].name[0] == '*')"

Добавлено 04-05-2015 в 21:27:

Написал перед этим "model = 0;" помогло, но не уверен, что это правильно. Хотя теперь варнинга нет. Весь код скомпилился

Добавлено 04-05-2015 в 22:10:

Увы, ни к чему это не привело, в игре как проглядывал сквозь стену, так и проглядывает, но при чём не везде, хз в чём дело

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ghoul [BB] 05-05-2015 в 04:53:

Работай в этом направлении! Может, у тебя реально что получится.

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

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

Добавлено 05-05-2015 в 07:52:

Да, еще надобно будет с декалями что-то делать - даже от пуль они у тебя во всю стену станут. Молчу уже про ракеты.

Добавлено 05-05-2015 в 07:53:

Ну и всё-таки потом попробуй пострелять по людям, а? Очень интересен эффект попадания. Особенно в голову...

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено JPEG 05-05-2015 в 05:03:

Цитата:
Ghoul [BB] писал:
В Тириане погляди в коде дистанцию камеры

где эта дистанция в коде то?
Цитата:
Ghoul [BB] писал:
Да, еще надобно будет с декалями что-то делать - даже от пуль они у тебя во всю стену станут. Молчу уже про ракеты.

ну я тринити использую, там всё ок.
Попробую ща посмотреть как всё это будет в виде от третьего лица

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ghoul [BB] 05-05-2015 в 05:21:

Цитата:
Yo Den писал:
где эта дистанция в коде то?


На клиенте, в коде камеры. Охх, проще, напиши ~X~ вопросец.
Он долго бился над такой же проблемой.

Добавлено 05-05-2015 в 08:21:

Цитата:
Yo Den писал:
ну я тринити использую, там всё ок.



А подробнее? Какую версию, откуда брал?

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено JPEG 05-05-2015 в 05:27:

Цитата:
Ghoul [BB] писал:
А подробнее? Какую версию, откуда брал?

1.4f http://www.moddb.com/mods/trinity-r...tion/downloads, там декали из паранойи, поэтому легко регулируют размер

Добавлено 05-05-2015 в 08:27:

В виде от 3 лица подобных косяков с камерой вроде нет, поэтому, если не будет подводных камней, запилю скоро демку

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ghoul [BB] 05-05-2015 в 05:35:

Так ить там во всех версиях последних декали ТГА делаются, разве не?

Добавлено 05-05-2015 в 08:35:

Демку буду ждать!
А ты прям на самом тринити модифицируешь или себе его опции утянул?

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено JPEG 05-05-2015 в 05:37:

хаха, мир уменьшенный в 8 раз, рост человека 9 юнитов, от 3 лица с камерой всё ок

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ku2zoff 05-05-2015 в 06:25:

Yo Den с хитбоксами всё норм? Попадания в игрока и монстров нормально происходят? Ничего не застревает?


Отправлено JPEG 05-05-2015 в 07:11:

Цитата:
Ku2zoff писал:
с хитбоксами всё норм? Попадания в игрока и монстров нормально происходят? Ничего не застревает?

да вроде всё нормально, кроме того, что не могу совсем вплотную подойти к, например, хгранту, (могу быть близко к нему максимум на два метра) хотя вплотную к стене подхожу нормально. хулл-файл: "2 2 9
2 2 8
2 2 4.5". У солдата заюзан средний хулл, и изменение "2 2 8" в большую сторону влияет на увеличение хулла гранта, в меньшую - не изменяет. Похоже на ограничение.
Со стрельбой всё ок. На крайняк можно уменьшить всё в 4, а не в 8 раз, не будет этого глюка с хуллом

Добавлено 05-05-2015 в 10:10:

Цитата:
Ghoul [BB] писал:
Так ить там во всех версиях последних декали ТГА делаются, разве не?

Во всех версиях tga, но в 3.05 и 3.08 ещё плюс dds, но там уже багов много

Добавлено 05-05-2015 в 10:11:

Цитата:
Ghoul [BB] писал:
А ты прям на самом тринити модифицируешь или себе его опции утянул

на самом тринити. Это же по сути чистый хл + фичи

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ghoul [BB] 05-05-2015 в 08:33:

В 8 раз, наверное, самое оптимальное будет. В 4 раза и я менял, городов и районов-кварталов на карте не получится уже налепить...
Почему не можешь подойти? И только ли к хгранту? Что с остальными тварями?

Уменьшал ли во столько же раз модели самих монстров?

Действуй, пробуй. Мне нравится наблюдать за твоими успехами

Добавлено 05-05-2015 в 11:33:

Цитата:
Yo Den писал:
Во всех версиях tga, но в 3.05 и 3.08 ещё плюс dds, но там уже багов много


Какого рода баги?

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено Ku2zoff 05-05-2015 в 08:46:

Цитата:
Ghoul [BB] писал:
Действуй, пробуй. Мне нравится наблюдать за твоими успехами

Ну а что? Активность на форуме должна быть. Тем более, если у Yo Den всё получится и глючить не будет, я тоже такую штуку сделаю себе в мод, уменьшу всё хотя бы в два раза. Лимиты не сильно подскочат, а размер карт прилично вырастет. Надеюсь, в мультиплеере глючить не будет. Ну и что-нибудь из тринити с ксашем можно взять для красивостей, например шейдерную воду, тени и динлайты. Самое сложное, что мне надо - это мовевитч. Его просто так не скопипастишь.


Отправлено Ghoul [BB] 05-05-2015 в 08:55:

Дело не только в активности. Радует, что у кого-то может получится то, что у меня не вышло в своё время. Дорогу молодым, как говорится.

А зачем оттуда выдёргивать, если можно просто перейти на Тринити в качестве основы? Или таки багов много?

Уменьшение мира - штука хорошая, даже слишком. Жаль только, что придётся все карты под него рисовать с нуля. Совместимость.... Или, может быть, можно так сделать, чтоб готовую карту просто в 4 раза "сжать" ?

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено Ku2zoff 05-05-2015 в 09:00:

Цитата:
Ghoul [BB] писал:
А зачем оттуда выдёргивать, если можно просто перейти на Тринити в качестве основы? Или таки багов много?

У меня уже есть наработки, опробованные на новом ХЛСДК. Пересаживаться на что-то другое не хочу, мало ли какая бяка всплывёт. Лучше скопипастить самые нужные фичи себе. Я вот сейчас спиритовский мовевитч проверил по сети. У нелокального игрока немного подлагивает физика. У локального почти не заметно. Визуально всё прекрасно выглядит. Если не строить что-то прям уж критично взаимодействующее с игроком, то сойдёт. Мне мовевитч нужен-то для поездов и дверей в общем-то. Ну может лифты ещё.


Отправлено JPEG 05-05-2015 в 09:26:

Цитата:
Ghoul [BB] писал:
Какого рода баги?

Я уже честно не помню всего, но помню, что фиг разберёшь откуда они берутся, при том, что в версии 1.4 final их нет, а разница между ними на практике минимальная (заметил только, что текстуры в 3.08 поправдивее и чуть чётче рендерятся).
Сначала мне не понравилось,что если модель игрока заменить любой другой, у которой не сходятся кости - зависает намертво, этот глюк я встретил, когда в моде hl bounce ставил модель шара вместо игрока. Также помню там фонарик абсолютно неправильно расположен, лечится копированием из 1.4.
Но окончательно добил глюк, плохо помню, но как-то связан с подгрузкой кастомных текстур в рендер (2048х2048), карта просто не грузилась с ними, хотя в 1.4 всё норм.
Хотя и в 1.4 тоже есть определённые тыпые баги, и тоже не понятно как лечить

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ghoul [BB] 05-05-2015 в 09:31:

Я в архиве не нашел 1.4f...
http://pix.academ.org/img/2015/05/0...135d7f3c46f.jpg

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено JPEG 05-05-2015 в 09:35:

Цитата:
Ghoul [BB] писал:
Почему не можешь подойти? И только ли к хгранту? Что с остальными тварями?

Уменьшал ли во столько же раз модели самих монстров?

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

Добавлено 05-05-2015 в 12:35:

Цитата:
Ghoul [BB] писал:

кустом сдк в1 вроде этот архив. Там ридми есть внутри, написано 1.4. И он кстати вообще не кустом, это оригинал автора, просто некий чувак выложил этот оригинал на моддб и добавил туда тупо описание в текстовых файлах, всё - кустом %)

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ghoul [BB] 05-05-2015 в 10:02:

Может, ты где-то не поменял размер хулла? В исходниках это не в одном месте, точно помню.

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено JPEG 05-05-2015 в 14:52:

Цитата:
Ghoul [BB] писал:
Может, ты где-то не поменял размер хулла?

в том то и дело, что в сторону увеличения хулла все нормально, а в сторону сильного уменьшения (меньше ~4 юнитов) уже нет результата, хулл остаётся где-то размером в эти 4 юнита, но не меньше

Добавлено 05-05-2015 в 15:57:

Склоняюсь к тому, что размер хулла нельзя сделать равным 2-4 юнитам, типа предел

Добавлено 05-05-2015 в 15:58:

Модели же сталкиваются друг с другом только по средствам хулла?

Добавлено 05-05-2015 в 17:52:

Решил уменьшить всё в 4 раза. Правда сейчас глюк: npc, если хотят, то проходят сквозь стены http://www.youtube.com/watch?v=CAWg...eature=youtu.be Видюшка

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ku2zoff 20-08-2016 в 05:08:

Я решил уменьшить масштаб в своём моде, чтобы один уровень входил на одну карту. Кооп всё-таки. Сейчас думаю, во сколько раз.
Размеры карты в хл1 позволяют делать довольно большие пространства, на которых много чего можно уместить. Но стоит только попытаться сделать открытую местность, становится видно, что карта маленькая. Или сделать полностью большое здание на открытой местности тоже проблематично.

Склоняюсь к масштабу 1/2 от оригинала, по-моему этого будет достаточно, и браши, толщиной в 1 юнит не будут слишком толстыми. Но, думаю, на будущее всё-таки лучше 1/4. Компиляторы вполне нормально прожёвывают браши толщиной в полъюнита.
Yo Den как там у тебя? Нормально всё работает с твоим уменьшением?


Отправлено JPEG 20-08-2016 в 05:24:

Цитата:
Ku2zoff писал:
как там у тебя? Нормально всё работает с твоим уменьшением?

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

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ku2zoff 20-08-2016 в 05:24:

Сейчас проверил, компиляторы, что в комплекте с джеком, уже не справляются с брашами, толщиной 0.25 юнита. Энтити оказываются outside world. Ну ладно, это не страшно. Кое-где можно пожертвовать размерами, и сделать энтить толще, а кое-где можно заменить моделями. Главное, что уменьшение в 4 раза вообще нормально компилится.


Отправлено JPEG 20-08-2016 в 10:14:

Цитата:
Ku2zoff писал:
Сейчас проверил, компиляторы, что в комплекте с джеком, уже не справляются с брашами, толщиной 0.25 юнита. Энтити оказываются outside world. Ну ладно, это не страшно. Кое-где можно пожертвовать размерами, и сделать энтить толще, а кое-где можно заменить моделями. Главное, что уменьшение в 4 раза вообще нормально компилится.

со стороной в 0.25 даже китайские компиляторы не робят, 0.5 - предел. На 0.25 юнитов можно только сдвигать браш

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено XaeroX 20-08-2016 в 10:38:

Yo Den
А в джеке, по-твоему, какие компиляторы, японские, что ли?

__________________

xaerox on Vivino


Отправлено JPEG 20-08-2016 в 11:02:

Цитата:
XaeroX писал:
А в джеке, по-твоему, какие компиляторы, японские, что ли?

да я не смотрел какие там, вдруг, ты там свои включил

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено XaeroX 20-08-2016 в 11:42:

Yo Den
У меня нет своих.

__________________

xaerox on Vivino


Отправлено Ku2zoff 20-08-2016 в 15:09:

А это вообще безопасно, изменять масштаб? Что-то глобальное не изломается? Ясно-понятно, что точность размещения декалей и всяких спрайтовых эффектов на брашах ухудшится, и стандартные эффекты с фиксированным масштабом (квейковские партикли) будут выглядеть чересчур большими. Это можно исправить, рисуя всё нужное на триапи, вплоть до декалей. Ещё деакли можно рисовать через движковую функцию спрайтами, как в инвазионе сделано. Только такие декали не сохраняются в сингле. Я конечно ещё не решил, будет ли сингл, наверное я его не осилю.
Я вот о чём: навигация монстров не испортится? Перемещение всяких точечных энтить в пространстве? Пушабли? Ещё надо будет кучу констант всяких поменять, где есть проверки на расстояние или значения скорости. Работы море. Поэтому не хочу делать это сначала на обычной халфе, а потом ещё переделывать в новом XDM заново, когда тот выйдет.

Добавлено 20-08-2016 в 22:07:

Ну и самое-самое. Наверное упрусь в лимиты компиляторов. Если не по энтитям, то по брашам/фейсам/патчам. Лимит на патчи обойти можно, я думаю, заюзав текстуры низкого разрешения. А поверх нарисовать или детальные нормального разрешения, или спрайты через триАпи.

Добавлено 20-08-2016 в 22:09:

Цитата:
Yo Den писал:
со стороной в 0.25 даже китайские компиляторы не робят, 0.5 - предел. На 0.25 юнитов можно только сдвигать браш

ZHLT 2.5.3 от Зонера тоже прекрасно работают с 0.5 юнита. Помнится, Дядя Миша делал карту-демку с зеркалом для своего спирита. Там таблички на кабинках толщиной 0.5 юнита. Хаммер при экспорте их херил по-жесткому, получалось outside world. Джек экспортит лучше.
0.5 юнита нормально будет. У меня толщиной в юнит сейчас только функ_детайлы, имитирующие провода, да выключатели на стенах. Если они станут в два раза толще, это не сильно будет заметно. В конце концов провода можно нарисовать декалями или сделать моделями.
Тут проблема другого рода: ни джек, ни хаммер не работают с сеткой меньше 1 юнита. А это лишнее время на масштабировние и подгонку мелких элементов.


Отправлено Ku2zoff 21-08-2016 в 17:14:

Применил тутор с wavelength. Странности какие-то. По миру игрок ходит нормально, а в энтити проваливается по пояс. И сами энтити (пушабли) проваливаются наполовину в мир. Камера немного ныряет в стены. ЧЯДНТ? Точь-в-точь всё по тутору.


Отправлено JPEG 21-08-2016 в 17:20:

Цитата:
Ku2zoff писал:
Применил тутор с wavelength. Странности какие-то. По миру игрок ходит нормально, а в энтити проваливается по пояс. И сами энтити (пушабли) проваливаются наполовину в мир. ЧЯДНТ? Точь-в-точь всё по тутору.

кто-то писал, что там код не очень, мол только у автора работает. Лучше своими силами, опираясь на него, реализовать это.

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ku2zoff 21-08-2016 в 17:33:

Yo Den а у тебя такого не наблюдалось?

Добавлено 22-08-2016 в 00:33:

По идее, не нужны никакие PM_UpdateClipBox и PM_FixModelHulls. Оно должно нормально работать с изменением констант. У меня результат одинаковый что с этими функциями, что без них.


Отправлено JPEG 21-08-2016 в 18:15:

Цитата:
Ku2zoff писал:
а у тебя такого не наблюдалось?

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

Добавлено 21-08-2016 в 21:10:

Цитата:
Ku2zoff писал:
Ну и самое-самое. Наверное упрусь в лимиты компиляторов. Если не по энтитям, то по брашам/фейсам/патчам.

почему, ты так считаешь? Ведь, по сути, в хаммере нужно будет делать обычную карту

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

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

Добавлено 21-08-2016 в 21:15:

Насколько я помню, вот тут я скейлил всё в два раза, Counter-Strike: Flat (Flat-Strike) В принципе, всё работало адекватно

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Дядя Миша 21-08-2016 в 21:30:

Вам бы не размеры менять, а камеру в пол опустить.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 22-08-2016 в 02:43:

Дядя Миша а что от этого изменится? Игрок не станет меньше ростом.

Цитата:
Yo Den писал:
то и разрешение текстур тоже нужно будет уменьшить в два раза

А количество патчей от этого вырастет в четыре раза.


Отправлено Ku2zoff 22-08-2016 в 07:11:

Есть прогресс: игрок теперь не ныряет в энтити. Всё дело было в корявом хуллфайле: размеры в новом формате указываются так:

C++ Source Code:
16 16 72 // 1/2 x, 1/2 y, 1/1 z
64 64 64 // 1/1 x, 1/1 y, 1/1 z
16 16 36 // 1/2 x, 1/2 y, 1/1 z

Надеюсь обозначения понятны, что для хуллов игрока по горизонтали размеры указываются в половину от реальной стороны хулла, а в высоту полностью. Для "монстрового" хулла указываются полные размеры. В туторе почему-то размеры уменьшены как попало:
C++ Source Code:
Как в туторе:
8 8 16
16 16 16
8 8 9

C++ Source Code:
Как надо:
8 8 36
16 16 16
8 8 18

Когда делаю как надо, игрок перестаёт проваливаться в брашевые энтити. Но остаётся проблема с нырянием камеры в стены. Когда я использовал старый формат хуллфайла:
C++ Source Code:
( 0 0 0 ) ( 0 0 0 )
( -8  -8 -18 ) ( 8 8 18 )
( -16 -16 -16 ) ( 16 16 16 )
( -8 -8 -9 ) ( 8 8 9 )

Камера перестала тонуть в стенах. Чюдеса да и только. Теперь осталось решить проблему с проваливанием пушаблей в пол наполовину.


Отправлено Garux 22-08-2016 в 07:32:

Для такого дела можно прикрутить scale pass в компилятор и мапать, как обычно. Правда вы гей-модели интенсивно используете, не представляю насколько удобно получится.
Ну или мапать в радианте xD Он ,125 легко держит, можно и меньше делать брашики.


Отправлено XaeroX 22-08-2016 в 10:18:

Цитата:
Garux писал:
Ну или мапать в радианте xD Он ,125 легко держит, можно и меньше делать брашики.

Всё, что тоньше одного юнита, надо делать моделями, и выбросить дурь из головы.

__________________

xaerox on Vivino


Отправлено thambs 22-08-2016 в 10:20:

>надо делать моделями
Стёкла, решётки, таблички? будет over 9000 моделей.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено Ku2zoff 22-08-2016 в 10:26:

Цитата:
Garux писал:
Ну или мапать в радианте xD Он ,125 легко держит, можно и меньше делать брашики.

Радиант годится в маппинге под халфу только для того, чтобы его установить, посмотреть и удалить.
Я вообще планирую сделать так: уменьшить масштаб в два раза. В четыре не получится с точным сохранением пропорций хуллов, т.к. размеры сидячего хулла станут 8х8х9, то есть -4 -4 -4.5 и 4 4 4.5, и я подозреваю, что с нецелыми числами компилятор и ддлки работать будут неточно. И размер карты планирую увеличить в два раза (по тутору БУзера). Джек позволяет нормально мапать на подобных картах. Посмотрим, что из этого выйдет.

Добавлено 22-08-2016 в 17:26:

Цитата:
XaeroX писал:
Всё, что тоньше одного юнита, надо делать моделями, и выбросить дурь из головы.

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


Отправлено nemyax 22-08-2016 в 10:29:

Цитата:
thambs писал:
будет over 9000 моделей

А что, ксаш не осилит?


Отправлено Ku2zoff 22-08-2016 в 10:35:

Цитата:
nemyax писал:
А что, ксаш не осилит?

Ксаш-то осилит. А я вот хочу стим-хл.


Отправлено Дядя Миша 22-08-2016 в 12:59:

Цитата:
Ku2zoff писал:
И размер карты планирую увеличить в два раза (по тутору БУзера).

Можешь распрощаться с темп-энтитями, у тебя же WRITE_COORD не сможет передать увеличенные координаты. Либо надо сделать кастомные темп-энтити.

Добавлено 22-08-2016 в 15:59:

Цитата:
Garux писал:
Правда вы гей-модели интенсивно используете

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 22-08-2016 в 13:17:

Цитата:
thambs писал:
будет over 9000 моделей.

Так их зачастую повторно использовать можно. Заодно и перестанете требовать поддержку префабов.
Если ты про едикты - их надо клиентскими энтитями делать. Ксаш, емнип, умеет, да и в халфе есть pfnMakeStatic.
Цитата:
Ku2zoff писал:
Маппинг под халфу, он олдскульный

Однако халфовский двиг модельную детализацию вполне держит. См. уровни КС-КЗ(ДС).

Добавлено 22-08-2016 в 20:17:

Цитата:
thambs писал:
Стёкла, решётки, таблички?

Для графония уровня хл1 толщина в 1 юнит - не особо заметная вещь.
В крайнем случае можно воспользоваться хаком с брашами"нулевой толщины" (совмещение двух брашей, все стороны которых покрашены нуллом, а один, направленный друг навстречу другу - нужной текстурой стекла или решётки). Тогда можно сделать решётки, как в первом дууме.

__________________

xaerox on Vivino


Отправлено Ku2zoff 22-08-2016 в 14:52:

Цитата:
Дядя Миша писал:
Можешь распрощаться с темп-энтитями

Цитата:
XaeroX писал:
Если ты про едикты - их надо клиентскими энтитями делать. Ксаш, емнип, умеет, да и в халфе есть pfnMakeStatic.

А рендер систем для чего тов. Иксвайдер написал? И то, и то можно через неё сделать.
Меня сейчас больше волнует, почему пушабли проваливаются до половины в пол.

Добавлено 22-08-2016 в 21:52:

Цитата:
XaeroX писал:
Однако халфовский двиг модельную детализацию вполне держит. См. уровни КС-КЗ(ДС).

Это ещё надо модели делать. Долго придётся учиться. Хотя пропы моделить не слишком тяжело, я думаю.


Отправлено Дядя Миша 22-08-2016 в 15:05:

Цитата:
Ku2zoff писал:
Меня сейчас больше волнует, почему пушабли проваливаются до половины в пол.

*рж0т*

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

Добавлено 22-08-2016 в 18:05:

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 22-08-2016 в 15:10:

Цитата:
Ku2zoff писал:
Это ещё надо модели делать.

Кто-то в 2016 году ещё не умеет делать проп-модели в кедах?

__________________

xaerox on Vivino


Отправлено thambs 22-08-2016 в 15:47:

>не умеет делать проп-модели
вопрос в количестве, и в наложении UVW-карты, которая всегда -- геморрой.

__________________
http://www.moddb.com/mods/monorail-quest


Отправлено Ku2zoff 22-08-2016 в 16:29:

Цитата:
Дядя Миша писал:
Делай теперь маленькие ящички, чтоб они не проваливались в пол.

Ну так-то я уменьшаю эти ящички и стульчики. А они всё равно наполовину в полу.


Отправлено nemyax 22-08-2016 в 16:49:

Цитата:
thambs писал:
в наложении UVW-карты, которая всегда -- геморрой.

Откуда в блендере (которым ты вроде как пользуешься) геморрой с ювями?


Отправлено Ku2zoff 22-08-2016 в 16:55:

Вот ещё что добавлю. Проваливаются они чисто визуально. Хулл остаётся на месте.


Отправлено Дядя Миша 22-08-2016 в 17:00:

Цитата:
Ku2zoff писал:
Проваливаются они чисто визуально. Хулл остаётся на месте.

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

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 22-08-2016 в 17:12:

Цитата:
thambs писал:
в наложении UVW-карты, которая всегда -- геморрой.

От тех, кто освоил 3дмакс, я регулярно слышу, что он жутко удобен, в том числе в сравнении с хаммером/джеком. ЧОДНТ?

__________________

xaerox on Vivino


Отправлено Ku2zoff 22-08-2016 в 17:13:

Какая гадость эта ваша олдскульная халфа Ладно, глянем сорцы ксаша для интересу. Теперь понятно, почему в туторе использованы функции PM_UpdateClipBox и PM_FixModelHulls. Надо это дело починить, тогда проваливаться не должно. Когда я копипастил код, то заметил, что с применением этих функций физически мир и энтити становятся выше, чем надо. Хотя визуально остаются там же. Надо как-то это дело применить только для визуальной части. А точнее, только для пушаблей.


Отправлено JPEG 22-08-2016 в 19:36:

Цитата:
Ku2zoff писал:
А количество патчей от этого вырастет в четыре раза.

почему? может, чего не понимаю, но скейл текстур же, соответственно, будет тоже увеличен в два раза, типа дефолтный скейл 2.0 вместо 1.0, как в оригинале

Добавлено 22-08-2016 в 22:31:

Цитата:
Garux писал:
прикрутить scale pass в компилятор

в vhlt же есть это уже

Добавлено 22-08-2016 в 22:34:

Цитата:
XaeroX писал:
Всё, что тоньше одного юнита, надо делать моделями, и выбросить дурь из головы.

тогда декалей не будет на них. Хуже только, лишить игрока ходить и стрелять, чтобы вообще интерактивности не было

Добавлено 22-08-2016 в 22:36:

Цитата:
Ku2zoff писал:
т.к. размеры сидячего хулла станут 8х8х9, то есть -4 -4 -4.5 и 4 4 4.5, и я подозреваю, что с нецелыми числами компилятор и ддлки работать будут неточно

но ведь, когда те же браши толщиной в пол юнита, или сдвинуты на четверть, всё нормально работает, мне кажется, тут тоже самое будет. Хотя смысла особого делать в 4 раза разницу наверное нет, в два попроще будет

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено XaeroX 22-08-2016 в 20:14:

Цитата:
Yo Den писал:
тогда декалей не будет на них

Сделай - и будут. Всё необходимое в клиентке для этого есть.

__________________

xaerox on Vivino


Отправлено Ku2zoff 23-08-2016 в 05:02:

Цитата:
Yo Den писал:
почему? может, чего не понимаю, но скейл текстур же, соответственно, будет тоже увеличен в два раза, типа дефолтный скейл 2.0 вместо 1.0, как в оригинале

С точностью до наоборот. Скейл текстур будет уменьшен в два раза, потому что объекты и мир уменьшатся в два раза.

1.0:
http://pix.academ.info/img/2016/08/23/f2163c783b66324c4441e139b665bf12.jpg

2.0:
http://pix.academ.info/img/2016/08/23/4414e360775832e151691a3f0e537815.jpg

Значит, вместо каждого 1 текстурного патча будет 4.


Отправлено JPEG 23-08-2016 в 05:33:

Цитата:
Ku2zoff писал:
С точностью до наоборот. Скейл текстур будет уменьшен в два раза, потому что объекты и мир уменьшатся в два раза.

да не, я к тому, что если уменьшаешь мир в два раза, то и разрешение текстур само собой надо в два раза уменьшить (про скейл я не то написал, он везде тут будет 1.0), с этого же и начили, и получается количество патчей будет тоже

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ku2zoff 23-08-2016 в 06:45:

Короче, всё ясно. Нужно каким-то образом оверрайдить движковую SV_HullForBsp. Там умные вальвовцы записали размеры константами. Пример из сорцев ксаша:

C++ Source Code:
1
if( size[0] <= 8.0f || ( model->flags & MODEL_LIQUID && ent->v.solid != SOLID_TRIGGER ))
2
{
3
  hull = &model->hulls[0];
4
  VectorCopy( hull->clip_mins, offset );
5
}
6
else
7
{
8
  if( size[0] <= 36.0f )
9
  {
10
    if( size[2] <= 36.0f )
11
      hull = &model->hulls[3];
12
    else hull = &model->hulls[1];
13
  }
14
  else hull = &model->hulls[2];
15
 
16
  VectorSubtract( hull->clip_mins, mins, offset );
17
}


Добавлено 23-08-2016 в 13:41:

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

Добавлено 23-08-2016 в 13:45:

Можно конечно попытаться хаком менять mins и maxs энтить из pm_shared, что, собственно, и делал автор тутора, только у него как-то коряво работает.


Отправлено Дядя Миша 23-08-2016 в 06:48:

Да выдерни ты эту трассу себе в дллку.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 23-08-2016 в 07:49:

Дядя Миша как? Вот смотри: SV_HullForBSP напрямую вызывается только внутри движка. Из дллки вызывается посредством PM_HullForBSP в одном месте. Как мне подсунуть движку функцию из дллки, если движок её не импортирует нигде?


Отправлено XaeroX 23-08-2016 в 07:59:

Ku2zoff
Он предлагает тебе перенести ВЕСЬ код трассы в дллку. Абсолютно весь.

__________________

xaerox on Vivino


Отправлено Ku2zoff 23-08-2016 в 08:03:

XaeroX ааа, понял. RTXSC Ну будем посмотреть, если это реально возможно.


Отправлено XaeroX 23-08-2016 в 08:21:

Цитата:
Ku2zoff писал:
RTXSC

RTFXSC!

__________________

xaerox on Vivino


Отправлено Ku2zoff 23-08-2016 в 08:44:

Я так понял, что из физики дллок наружу торчат только PM_Move и PM_Init. Ну и ещё можно кое-что нарулить, используя CmdStart и CmdEnd и экспортные тчинки игрока. Жуть какая


Отправлено XaeroX 23-08-2016 в 08:45:

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

__________________

xaerox on Vivino


Отправлено Ku2zoff 23-08-2016 в 08:59:

XaeroX мне бы хоть свой мод сделать, не то, что движок. Да и движков у нас навалом. А вот хороших модов сейчас мало делается.


Отправлено XaeroX 23-08-2016 в 09:02:

Ku2zoff
Это понятно, но скилл лишним не будет.

__________________

xaerox on Vivino


Отправлено Ku2zoff 23-08-2016 в 09:06:

А рельно вынести весь этот код в дллку? Знаю, что реально. Но будет ли работать? Вдруг, после вызова дллки движок выполнит свою собственную функцию, и по-новой пересчитает все размеры?


Отправлено XaeroX 23-08-2016 в 09:07:

Ku2zoff
Отбрось сомнения! RTFXSC, и узнаешь, что и когда движок вызывает.

__________________

xaerox on Vivino


Отправлено Дядя Миша 23-08-2016 в 12:20:

Цитата:
Ku2zoff писал:
Там умные вальвовцы записали размеры константами.

Не вальвовцы, а Кармак. Вот единственный момент за который ему хочется дать по ушам.

Цитата:
Ku2zoff писал:
А вот хороших модов сейчас мало делается.

ксаш-мод же.

Добавлено 23-08-2016 в 15:20:

Цитата:
Ku2zoff писал:
Но будет ли работать?

не забудь построить новый двусвязный список для энтить. От старого ты корень получить не сможешь.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 25-08-2016 в 09:37:

Цитата:
Дядя Миша писал:
не забудь построить новый двусвязный список для энтить. От старого ты корень получить не сможешь.

Это который com_models[MAX_MODELS]?

Добавлено 25-08-2016 в 16:37:

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

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

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

Я ещё толком не разобрался, очень много кода, особенно касательно самих моделей и их загрузки/выгрузки.


Отправлено Дядя Миша 25-08-2016 в 13:42:

Цитата:
Ku2zoff писал:
Это который com_models[MAX_MODELS]?

это который link_t area; в эдикте. Не, ну можно и тупым перебором конечно.

Цитата:
Ku2zoff писал:
При загрузке карты строится список брашевых моделей. Корень списка - мир, остальные пункты - его субмодели, то есть брашевые энтити.

Не, список моделей строит компилятор. А при загрузке им просто даются однотипные имена звездочка с номером. К слову мир в этом списке дублируется, т.к. доступен и в виде загруженной карты и в виде сбумодели за нумером *1.
Цитата:
Ku2zoff писал:
SV_HullForBsp по этому списку ищет нужную модель

SV_HullForBsp ничего не ищет, ему на вход подается указатель на энтить, которая содержит нужную модель.

Цитата:
Ku2zoff писал:
в каком месте в серверной дллке задать корень нового списка.

Сделай для начала без списка, тупым перебором.
И вообще иди перечитай мою статью про колоизацию в кваке, сейчас самое подходящее время.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 25-08-2016 в 14:56:

Цитата:
Дядя Миша писал:
Не, список моделей строит компилятор. А при загрузке им просто даются однотипные имена звездочка с номером.

C++ Source Code:
for( i = 1; i < sv.worldmodel->numsubmodels; i++ )
{
  Q_sprintf( sv.model_precache[i+1], "*%i", i );
  Mod_RegisterModel( sv.model_precache[i+1], i+1 );
}
Оно же?
Цитата:
Дядя Миша писал:
SV_HullForBsp ничего не ищет, ему на вход подается указатель на энтить, которая содержит нужную модель.

Я неправильно выразился. Конечно ничего не ищет, а только указывает хулл.
Цитата:
Дядя Миша писал:
И вообще иди перечитай мою статью про колоизацию в кваке, сейчас самое подходящее время.

Я раньше читал, но забыл уже, много букаф. Надо перечитать.
C++ Source Code:
#ifdef RANDOM_HULL_NULLIZATION
// author: The FiEctro
hull = &model->hulls[Com_RandomLong( 0, 0 )];
#endif

Поржал

Добавлено 25-08-2016 в 21:56:

Я вот сейчас дочитал до середины статью про физику, и задумался. Для энтить, кроме брашевых (монстров и всяких других) не надо будет ничего такого проделывать? Ну их трассировку тащить из движка. Там вроде бы уже отдельная функция.


Отправлено XaeroX 25-08-2016 в 15:07:

Цитата:
Ku2zoff писал:
Поржал

Вот и второй товарищ, который нашёл ту-самую-коллоизацию с рандомной нулизацией хулла.

__________________

xaerox on Vivino


Отправлено Дядя Миша 25-08-2016 в 17:21:

Цитата:
Ku2zoff писал:
Оно же?

Та это движок притворяет субмодели настоящими моделями для удобства юзера.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 25-08-2016 в 21:45:

Рандомную нуллизацию Скрама придумал, я только колоизацию

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 26-08-2016 в 01:19:

FiEctro
Ой ни нада. И англирование, по-твоему, тоже Скрама придумал?

__________________

xaerox on Vivino


Отправлено FiEctro 26-08-2016 в 11:45:

XaeroX
Англирование это Под-Стас, ну чтоже Вы? Историю своего же форума не знаете ?
http://hlfx.ru/forum/showthread.php...33986#post33986

К слову у Скрамы была еще частичная нуллизация:
http://hlfx.ru/forum/showthread.php...34056#post34056

Один говноед на лурочке про меня гадости написал, а Вы повелись.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Дядя Миша 26-08-2016 в 18:22:

Цитата:
FiEctro писал:
Один говноед на лурочке про меня гадости написал, а Вы повелись.

А кто в википедии статью про ксаш редактировал? Тоже не ты?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Cybermax 26-08-2016 в 23:04:


Отправлено XaeroX 27-08-2016 в 02:04:

Во-во. ИСЧХ - так и не вернул назад.

__________________

xaerox on Vivino


Отправлено FiEctro 27-08-2016 в 09:03:

Дядя Миша XaeroX
Ну гадости же я не писал, я Волатилу пиарил. И не называл Вас малолетними д в отличие от. Но этот вопрос мы с Ксероксом уже решили.

P.S. Убрал Волатилу.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Ku2zoff 27-08-2016 в 09:29:

Цитата:
FiEctro писал:
P.S. Убрал Волатилу.

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


Отправлено XaeroX 27-08-2016 в 14:54:

Цитата:
Ku2zoff писал:
Именно поэтому я склонен больше доверять лурке, нежели педивикии.

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

__________________

xaerox on Vivino


Отправлено Дядя Миша 27-08-2016 в 15:00:

Цитата:
XaeroX писал:
Полностью честный и непредвзятый взгляд на вещи - на официальных сайтах проектов, которые обновляются исключительно авторами.

Ну на пример автор XDM уверен што унего лутший в мири мод, а ведь это нетак.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 28-08-2016 в 09:59:

Сейчас протестирвал монстров - тоже проваливаются.


Отправлено XaeroX 28-08-2016 в 10:00:

Цитата:
Дядя Миша писал:
Ну на пример автор XDM уверен што унего лутший в мири мод, а ведь это нетак.

Это как раз на лурке и написано.

__________________

xaerox on Vivino


Отправлено Ku2zoff 19-01-2017 в 15:43:

Поднимаю тему, простите за некропостинг. Вот что нашёл. Ну нашёл ещё в прошлом году, когда изучал код ксаш-движка, а потом забил на рескейл. Сейчас решил вернуться к этому делу, вдруг получится.
Если проследить цепочку от SV_HullForBsp до движковых функций, экспортируемых наружу, то последняя "инстанция" - это SV_LinkEdict, который много откуда вызывается. Многое из физики нужно тащить в дллку. Это и pfnWalkMove, и pfnMoveToOrigin, и pfnTraceTexture, и pfnSetSize, и pfnDropToFloor, и pfnSetOrigin. Короче очень много.
Ну не страшно, всё это можно вытащить в дллку. У меня вопрос к Дяде Мише. А нет ли внутри движка каких-либо вызовов функций, которые вызывают движковый SV_HullForBsp, а в итоге наружу ничего не торчит? А то, допустим, я сделаю трассу в дллке, подменю движковые функции на свои, где хуллы исправлены, а внутри движка в одном месте будет вызов с неизменёнными хуллами. И всё нафиг изломается.
Хотя, вроде бы всё торчит наружу, в g_engfuncs. Если это действительно так, то можно начинать переносить код.

Добавлено 19-01-2017 в 22:13:

По моим прикидкам, придётся перенести в дллку почти 10 движковых функций.

pfnWalkMove
pfnMoveToOrigin
pfnTraceTexture
pfnSetSize
pfnDropToFloor
pfnSetOrigin

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

Добавлено 19-01-2017 в 22:43:

pfnTraceLine
pfnTraceHull
pfnTraceMonsterHull
pfnGetAimVector
pfnEntIsOnFloor
pfnTraceToss
pfnSetModel
pfnRunPlayerMove

Вот ещё добавка. Ну и естественно, SV_LinkEdict вызывается из SV_RunCmd. Всё торчит наружу, заменить можно. Есть пара мест, которые не получится засунуть на сервер:
SV_ExecuteClientMessage и ReapplyDecal. Да и не нужно наверное, вроде бы декали у меня не глючили. А про мессаджи я не знаю. Там уже сеть, туда вообще не стоит лезть.


Отправлено Дядя Миша 19-01-2017 в 17:57:

Цитата:
Ku2zoff писал:
Многое из физики нужно тащить в дллку. Это и pfnWalkMove, и pfnMoveToOrigin, и pfnTraceTexture, и pfnSetSize, и pfnDropToFloor, и pfnSetOrigin. Короче очень много.

Так в ксаш-моде давным-давно уже вытащено )
Только я не догоняю каким местом это связано с изменением скейла.

Я тебя научу как визуально увеличить скейл за 3 минуты бесплатно и без смс - опусти камеру к полу. Сразу покажется что всё вокруг огромное.

Цитата:
Ku2zoff писал:
А нет ли внутри движка каких-либо вызовов функций, которые вызывают движковый SV_HullForBsp, а в итоге наружу ничего не торчит?

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

Цитата:
Ku2zoff писал:
Ну и естественно, SV_LinkEdict вызывается из SV_RunCmd. Всё торчит наружу, заменить можно.

LinkEdict не надо тащить в дллку. Имеет смысл только те вызовы, где touch_triggers установлен в true, т.к. получается два независимых листа триггеров, из-за этого бага в ксаш-моде правильно работают двусторонние порталы (хотя на самом деле работать не должны). Вы небось полагаете, ох какой хороший баг, если из-за него что-то работает? Да хрен бы там. Из-за него же рекурсивный вылет на картах тхамбса, где он мини-игру с мониторами делал. Но в новых версиях я это исправлю.

Цитата:
Ku2zoff писал:
pfnGetAimVector
pfnEntIsOnFloor

это не юзается.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 19-01-2017 в 18:52:

Цитата:
Дядя Миша писал:
опусти камеру к полу

Ну допустим. А размеры объектов как поменять? Хуллы-то всё равно останутся прежними.
Цитата:
Дядя Миша писал:
Имеет смысл только те вызовы, где touch_triggers установлен в true

То есть, это ограничивает список функцией SV_Move и содержимым sv_phys.c? А как же pfnSetOrigin хотя бы? Выносить в дллку кажется надо всё, что отвечает за движение и расположение моделей.


Отправлено Дядя Миша 19-01-2017 в 19:01:

Цитата:
Ku2zoff писал:
А размеры объектов как поменять? Хуллы-то всё равно останутся прежними.

Если совсем без заморочек - проще рескейлить саму карту.

Цитата:
Ku2zoff писал:
То есть, это ограничивает список функцией SV_Move и содержимым sv_phys.c? А как же pfnSetOrigin хотя бы? Выносить в дллку кажется надо всё, что отвечает за движение и расположение моделей.

Я в ксашевском физикс-интерфейсе вынес практически всё необходимое.
Остался только HullForBSP.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 19-01-2017 в 20:06:

Цитата:
Дядя Миша писал:
Если совсем без заморочек - проще рескейлить саму карту.

Таким макаром проще применить тутор БУзера по увеличению размера карты. Дело в том, что лучше уменьшить объекты, а мир оставить прежних размеров, чтобы всё, зависимое от координат работало. Если уж не будет хватать места для поездов и огромных башен, тогда можно увеличить карту.
Цитата:
Дядя Миша писал:
Я в ксашевском физикс-интерфейсе вынес практически всё необходимое.

Ну будем посмотреть.

А загвоздка действительно в SV_HullForBsp. Под ксашем с кваром sv_quakehulls 2 всё прекрасно.


Отправлено Ku2zoff 21-01-2017 в 17:16:

Буду задавать вопросы. Перечитал ещё раз статью по физике в кваке. В общих чертах всё понял. Теперь очередь конкретно за кодом ксаша.
Что за массивы такие:

C++ Source Code:
static model_t	*com_models[MAX_MODELS];
static model_t	cm_models[MAX_MODELS];

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

Добавлено 22-01-2017 в 00:16:

На вход SV_HullForBsp нужно всунуть модель. Можно ли как-то получить её на сервере из эдикта или энтварсов? В энтварсах есть имя модели и её индекс. А вот саму модель можно получить только на клиенте из entity_state_t.


Отправлено Дядя Миша 21-01-2017 в 18:32:

Цитата:
Ku2zoff писал:
Каким образом они заполняются? Почитал код, не могу понять.

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

Цитата:
Ku2zoff писал:
Ясно, что они содержат в себе все модели, которые обрабатывает физический движок (может и спрайты тоже, но вроде бы нет).

Почему только физический движок? Почему спрайты нет? Как ты читал код?

Цитата:
Ku2zoff писал:
На вход SV_HullForBsp нужно всунуть модель. Можно ли как-то получить её на сервере из эдикта или энтварсов?

А это по твоему что?
C++ Source Code:
1
hull_t *SV_HullForBsp( edict_t *ent, const vec3_t mins, const vec3_t maxs, float *offset )
2
{
3
  hull_t		*hull;
4
  model_t		*model;
5
  vec3_t		size;
6
 
7
  // decide which clipping hull to use, based on the size
8
  model = Mod_Handle( ent->v.modelindex );

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 21-01-2017 в 18:48:

Цитата:
Дядя Миша писал:
А это по твоему что?

Ну я вижу, что тут Mod_Handle по модельиндексу находит модель. Из массива. Как заполнить массивы на сервере? Грузить все модели повторно?


Отправлено Дядя Миша 21-01-2017 в 20:17:

Цитата:
Ku2zoff писал:
Как заполнить массивы на сервере?

выдернуть Mod_Handle на сервер. Собственно это уже сделано в ксаше.

Цитата:
Ku2zoff писал:
по модельиндексу находит модель. Из массива.

Он не находит. Поиск это - перебор чего-либо. Хэш или бинарная сортировка просто уменьшают сложность перебора, но не избавляют от него совсем. А здесь доступ по индексу
C++ Source Code:
1
model_t *Mod_Handle( int handle )
2
{
3
  if( handle < 0 || handle >= MAX_MODELS )
4
  {
5
    MsgDev( D_NOTE, "Mod_Handle: bad handle #%i\n", handle );
6
    return NULL;
7
  }
8
  return com_models[handle];
9
}

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

Добавлено 21-01-2017 в 23:17:

ЗЫ. Насчёт спрайтов. Я так понимаю тебя ввела в заблуждение загрузка спрайтов в отдельный массив на стороне клиента, CL_LoadHudSprite.
Но эти спрайты не имеют ничего общего со спрайтами, которые ставятся на сервере через энтити. Эти спрайты скорее следует рассматривать как HUD-текстуры, а поскольку спрайты бывают анимированные - то как анимированные текстуры. С их помощью худ рисуется и всякие пост-эффекты, типа прицелов. Но к спрайтам-моделям они отношения не имеют и дублируются в памяти. На то есть свои причины.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 22-01-2017 в 03:26:

Цитата:
Дядя Миша писал:
выдернуть Mod_Handle на сервер. Собственно это уже сделано в ксаше.

Посредством физического интерфейса, да. pfnGetModel. И оно получает доступ по индексу к уже загруженной движком модели.

Понемногу в голове начинает проясняться. В халфе как эти модели получить? Перебрать энтити при загрузке уровня, и загрузить модели для собственного массива с помощью Mod_RegisterModel?
А почему в халфе невозможен прекэш налету, уже после спауна энтить? Именно из-за вот этих вот дел с моделями и их индексами?


Отправлено Дядя Миша 22-01-2017 в 11:40:

Цитата:
Ku2zoff писал:
В халфе как эти модели получить?

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

Цитата:
Ku2zoff писал:
А почему в халфе невозможен прекэш налету, уже после спауна энтить? Именно из-за вот этих вот дел с моделями и их индексами?

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 22-01-2017 в 12:59:

Цитата:
Дядя Миша писал:
ДА НЕ КАК! Стал бы я городить свои интерфейсы, если бы в халфе было можно.

Выходит, придётся грузить повторно, дублируя то, что уже загрузил движок. Вот засада. Ну и пофиг. Лишь бы работало.
Цитата:
Дядя Миша писал:
Народ извращался следующим способом в тринити - получал хэндл клиентки, и дергал Mod_Handle из клиентского интерфейса. Это разумеется работало только для листен-сервера. Дедикатед-сервер уже упадёт. Да и вообще способ откровенно стрёмный, хотя и рабочий.

Не, это вообще правда стрёмно. Дедикатед-сервер должен работать в любом случае.


Отправлено Дядя Миша 22-01-2017 в 13:47:

Цитата:
Ku2zoff писал:
Выходит, придётся грузить повторно, дублируя то, что уже загрузил движок.

это еще хужы. К тому же что значит загрузил? Ты умеешь их правильно грузить?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 22-01-2017 в 15:27:

Цитата:
Дядя Миша писал:
Ты умеешь их правильно грузить?

На данный момент нет.
Цитата:
Дядя Миша писал:
К тому же что значит загрузил?

В общих чертах - загрузил в память (mdl, bsp, spr). А в данном случае нужно получить model_t каждой энтити, которая имеет модель (mdl, bsp, spr). Пока не знаю, как это сделать, т.к. ещё не разобрался, как это делает движок. После кода дллок (на С с классами) код движка на чистом C выглядит крайне непонятно. Учитывая, что множество переменных и массивов разбросаны по разным файлам, сориентироваться очень трудно.


Отправлено Дядя Миша 22-01-2017 в 15:53:

Я подозреваю, что для решения задчи тебе надо гораздо меньше чем ты сам думаешь.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 22-01-2017 в 16:11:

Дядя Миша ну а каким образом я это пойму, не изучив как досконально сорцы ксаша? (Я это делать не планирую потому, что форкать его не собираюсь). Ну и польза от этого будет довольно сомнительная, учитывая конечную цель.


Отправлено Ku2zoff 25-01-2017 в 07:18:

А каким образом ещё можно пересчитать хуллы?


Отправлено Ku2zoff 01-02-2017 в 16:48:

Кое-что есть.

C++ Source Code:
1
// этот код непосредственно где-то на сервере:
2
extern "C" model_t *PM_Model(int index);
3
 
4
model_t *model = PM_Model(pEntity->entindex());
5
 
6
// а этот в PM_Shared:
7
model_t *PM_Model(int index)
8
{
9
  for (int i = 0; i < pmove->numphysent; i++)
10
  {
11
    if (pmove->physents[i].info == index)
12
      return pmove->physents[i].model;
13
  }
14
 
15
  return NULL;
16
}

C++ Source Code:
ALERT(at_console, "Model: %s\n", STRING(pEntity->pev->model));
ALERT(at_console, "PM_Model: %s\n", model->name);


Оба алерта выдают одинаковое имя. Осталось проверить, действительно ли модель доступна на сервере. И вообще, будет ли это работать.

Хм. Для поездов, брейкаблей, функ_валлов, функ_баттонов возвращает модель, для пушаблей нет (наверное потому, что они не SOLID_BSP). Для монстров соответственно тоже, т.к. надо возвращать не physents[i].model, а physents[i].studiomodel. Будем копать.


Отправлено Ghoul [BB] 01-02-2017 в 17:48:

А вот что я скажу.
Будут проблемы там, где вы их не ждёте.
А именно: В Tyrian изменение масштаба в 2 раза привело к тому, что прожектайлы стали пролетать сквозь игрока не разрываясь, (не все, а часть и периодически), сбить их тоже стало проблематичным из-за малого размера.

такие дела.


Отправлено Дядя Миша 01-02-2017 в 19:23:

Цитата:
Ku2zoff писал:
И вообще, будет ли это работать.

В радиусе квадрата 256 юнитов вокруг игрока. В списке только эти объекты.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 02-02-2017 в 01:21:

Дядя Миша а если вместо pmove->physents использовать pmove->visents? Судя по комментарию, объекты будут не только доступные для коллизии, но вообще все отрендеренные в данный момент. Но всё равно мало, максимум 600 объектов.

Добавлено 02-02-2017 в 08:21:

Цитата:
Ghoul [BB] писал:
В Tyrian изменение масштаба в 2 раза привело к тому, что прожектайлы стали пролетать сквозь игрока не разрываясь, (не все, а часть и периодически), сбить их тоже стало проблематичным из-за малого размера.

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


Отправлено Ghoul [BB] 02-02-2017 в 11:16:

Цитата:
Ku2zoff писал:
Ну а проджектайлы? Они же и так точечные. Их зачем уменьшать?


Нет, не точечные. У ракет и прочего есть хитбоксы.

Цитата:
Ku2zoff писал:
Подозреваю, что ты размеры хулла не менял.


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

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено Ku2zoff 02-02-2017 в 14:10:

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


Отправлено Дядя Миша 02-02-2017 в 15:16:

Ku2zoff физэнты от визентов отличаются только тем, что в физэнты не попадают несолидные. А радиус тот же.

Цитата:
Ku2zoff писал:
Судя по комментарию, объекты будут не только доступные для коллизии, но вообще все отрендеренные в данный момент.

Никогда не читай вальвовские комментарии и не верь им.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Crystallize 02-02-2017 в 15:58:

Цитата:
Дядя Миша писал:
Никогда не читай вальвовские комментарии и не верь им.

Оппа, что-то новенькое.


Отправлено Дядя Миша 02-02-2017 в 16:27:

Цитата:
Crystallize писал:
Оппа, что-то новенькое.

Никогда не читай сообщения Crystallize и не верь им.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 02-02-2017 в 17:21:

Цитата:
Ku2zoff писал:
никаким образом модели на сервере не получить, не загружая их заново внутри дллки.

Брашевые никак, а студиомодельки ещё как! Точно, есть же pfnGetModelPtr. При попытке изменения масштаба, я сразу заметил проблемы с монстрами и пушаблями. А вот с функ-валлами и прочими брашевыми кнопками и дверями вроде порядок. Надо проверить поезда и платформы, как они себя ведут. Если мои догадки подтвердятся, то можно будет сделать свои пушабли и починить монстров, имея доступ к студиомоделям.

Добавлено 03-02-2017 в 00:21:

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


Отправлено Дядя Миша 02-02-2017 в 21:08:

Цитата:
Ku2zoff писал:
Ну и задал Кармак задачку, не вынеся никуда на сервер интерфейс для указания своих размеров...

Кармак?

Добавлено 03-02-2017 в 00:08:

Вообще говоря, есть волшебная функция в client.cpp называется GetHullBounds. Но она напрочь неверная. Там вотакое:
C++ Source Code:
1
case 0:				// Normal player
2
  mins = VEC_HULL_MIN;
3
maxs = VEC_HULL_MAX;
4
iret = 1;
5
break;

Дураку же понятно, что такое работать не может никогда. Поэтому все кто пытался одержали закономерную неудачу. А надо (как вы уже все догадались), вотак:
C++ Source Code:
1
case 0:				// Normal player
2
  VEC_HULL_MIN.CopyToArray( mins );
3
VEC_HULL_MAX.CopyToArray( maxs );
4
iret = 1;
5
break;

И всё будет работать. Но правда только для игрока.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 03-02-2017 в 05:52:

Цитата:
Дядя Миша писал:
Кармак?

Ну ты же сам писал:
Цитата:
Дядя Миша писал:
Не вальвовцы, а Кармак. Вот единственный момент за который ему хочется дать по ушам.


Цитата:
Дядя Миша писал:
Но правда только для игрока.

Ну так вот в этом и проблема. Что толку с одного игрока? Это только в мультиплеерном моде типа кс будет работать, где монстров и пушаблей нет.

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

Добавлено 03-02-2017 в 12:52:

А ведь можно как в тринити, посредством клиентки грузить карту! Как временное решение, пока буду переносить код трассы, сойдёт.


Отправлено Ku2zoff 07-02-2017 в 14:33:

Утащил в дллку функцию pfnWalkMove и всё, что она тянет за собой. В принципе, всё вполне переносимо из движка с минимумом изменений. Для загрузки моделей заюзал IEngineStudio.GetModelByIndex, как в тринити. Для синглового мода вполне достаточно.

Для мультиплеерного придётся в последствии составлять список моделей на сервере: грузить заново карту, и индексировать каждую model_t на манер того, как сделано в движке. Студиомодели и спрайты заново грузить не придётся. Во-первых, спрайты почти никогда не имеют физической оболочки, зависящей от их размера: все проджектайли имеют нулевой размер, по сути, тут можно оставить всё как есть. А во-вторых, у нас есть волшебная функция pfnGetModelPtr, которая может вытянуть из движка экстрадату студиомодели по модельиндексу. Собственно, если я ничего не напутал, этого будет достаточно, чтобы построить хулл для студиомодельки.

На данный момент код вроде даже работает. Правда крашится на функции SV_TouchLinks. Наверное, зацикливается намертво вот здесь:

C++ Source Code:
// touch linked edicts
for (l = node->trigger_edicts.next; l != &node->trigger_edicts; l = next)
{


Я всё делал на скорую руку, почти голая копипаста. По-хорошему, надо это всё запихать в класс CBaseEntity, как сделано в ксашмоде. Буду копать дальше.


Отправлено Дядя Миша 07-02-2017 в 15:29:

Цитата:
Ku2zoff писал:
Во-первых, спрайты почти никогда не имеют физической оболочки, зависящей от их размера

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

Цитата:
Ku2zoff писал:
На данный момент код вроде даже работает. Правда крашится на функции SV_TouchLinks.

ты sv_areanode засетапил?
Это такая бинарная сетка для облегчения поиска энтить в заданном квадрате. Нет, можешь конечно перебирать в списке, но это долго.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 07-02-2017 в 16:38:

Цитата:
Дядя Миша писал:
ты sv_areanode засетапил?

Да вроде бы. Если из правильного места это сделал:
C++ Source Code:
1
void SV_ClearWorld(void)
2
{
3
  SV_InitBoxHull(); // for box testing
4
 
5
  memset(sv_areanodes, 0, sizeof(sv_areanodes));
6
  iTouchLinkSemaphore = 0;
7
  sv_numareanodes = 0;
8
 
9
  SV_CreateAreaNode(0, sv_worldmodel->mins, sv_worldmodel->maxs);
10
}

А SV_ClearWorld вызвал из void ParmsNewLevel( void ) в client.cpp. Оно как раз вызывается после движкового SV_ClearWorld. Судя по коду ксаша, конечно.
Цитата:
Дядя Миша писал:
Воообще-то имеют, просто никому обычно не приходит в голову сделать их солидными.

Ну на то они и спрайты, что несолидные. Хотя, монстры из дуума, само собой разумеется, должны быть солидными.

Добавлено 07-02-2017 в 23:38:

Очень трудно отдебажить, т.к. крашится (вылетает), и дебаггер ничего не кажет. Ну это я дебажить не умею


Отправлено ILZM 07-02-2017 в 18:13:

C++ Source Code:
iTouchLinkSemaphore = 0;


Это вообще законно использовать переменную простого типа для семафоров Хотя код движка в одном процессе работает


Отправлено Дядя Миша 07-02-2017 в 18:18:

Цитата:
Ku2zoff писал:
А SV_ClearWorld вызвал из void ParmsNewLevel( void ) в client.cpp. Оно как раз вызывается после движкового SV_ClearWorld. Судя по коду ксаша, конечно.

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

Цитата:
ILZM писал:
Это вообще законно использовать переменную простого типа для семафоров

Ну ведь для тебя даже мамка не закон

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 07-02-2017 в 18:32:

Цитата:
Дядя Миша писал:
Корочи он и в халфе не вызывается и в некоторых модах его вызов приводит к вылету.

Ага, вон оно что. Тады ой, и буду из другого места вызывать SV_ClearWorld.


Отправлено Дядя Миша 07-02-2017 в 18:56:

Ku2zoff самое смешное, что я убрал его вызов буквально в последнем билде, после тестирования мода battlegrounds.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 07-02-2017 в 18:57:

Не хватило ума сразу запихать в него алерт и проверить. Значит, это всё и есть возможная причина крэша.


Отправлено Дядя Миша 07-02-2017 в 18:58:

А нету никакого другого места. Это единственное возможное место было, откуда его следовало бы вызвать. А дальше спаун энтить, линкэдикт, вот это всё. Так что ой.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 07-02-2017 в 19:42:

Попробовал вызвать из ServerActivate - вылет. Или мир в этот момент ещё не загружен, или IEngineStudio не инициализирован, и не может загрузить модельку. А без модельки мира SV_CreateAreaNode не пашет.

Добавлено 08-02-2017 в 02:42:

Цитата:
Дядя Миша писал:
А дальше спаун энтить

Вот перед самым бы спауном может и получилось бы. Правда, в спауне вызывается pfnSetOrigin. А значит, ареноды должны быть уже готовы к этому моменту.


Отправлено Ku2zoff 08-02-2017 в 07:30:

В общем, подумал я, и вот что придумал. Если я не ошибаюсь, все нужные в данном случае движковые экспорты физики всё равно вызываются из дллки. Значит, можно попытаться каким-то образом задержать спаун энтить до момента, пока не будет загружена модель мира, и не будут засетаплены ареаноды. Можно даже не задерживать спаун, а зациклить вызовы тех же pfnSetOrigin, pfnWalkMove и прочих (возвращая NULL грубо говоря), до тех пор, пока не будет возможно их выполнить с нужным результатом.

Ну или можно ещё поступить вот так:
1. Проверяем, загружена ли модель мира, готовы ли ареаноды. Если нет, то просто вызываем движковые экспорты.
2. Всё загружено и готово, вызываем функции из дллок.
3. Если нужно например поправить ориджин после спауна, или изменить хулл, то в классе CBaseEntity заводим особую функцию, которая будет гарантированно срабатывать уже после нужных нам операций. И будет вызывать pfnSetSize, pfnSetOrigin.

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

Добавлено 08-02-2017 в 14:30:

Тем временем, есть прогресс. Модели монстров перестали проваливаться в пол. Хотя физически они вообще чёрти где (как будто несолидные), и окружены жёлтыми партиклями.


Отправлено Дядя Миша 08-02-2017 в 08:39:

Ну вызови SV_CreateAreaNode из SetCollisionBox, но с защёлкой. Типа инициализация при первом обращении
Токо при DeactivateServer не забудь эту защёлку обнулить.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 08-02-2017 в 14:09:

Цитата:
Дядя Миша писал:
но с защёлкой.

Ну это ясно понятно. Чтобы это дело только один раз вызывалось.
Цитата:
Дядя Миша писал:
SetCollisionBox

Как вариант пойдёт, т.к. вызывается из SV_LinkEdict до первого обращения к areanode_t. Тут другая проблема. На момент вызова SV_LinkEdict из pfnSetOrigin, например, ещё недоступна функция IEngineStudio.GetModelByIndex. Ну или я просто не из того места вызывал её. Клиентка вообще грузится сразу при запуске халфы (стимовской). А вот интерфейс студиорендерера наверное грузится уже при загрузке уровня. ХЗ, надо проверить.


Отправлено KiQ 08-02-2017 в 16:44:

Цитата:
Ku2zoff писал:
Можно даже не задерживать спаун, а зациклить вызовы тех же pfnSetOrigin, pfnWalkMove и прочих (возвращая NULL грубо говоря), до тех пор, пока не будет возможно их выполнить с нужным результатом.

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

__________________
-Brain is dead-


Отправлено Ku2zoff 08-02-2017 в 17:38:

Цитата:
Ku2zoff писал:
А вот интерфейс студиорендерера наверное грузится уже при загрузке уровня. ХЗ, надо проверить.

Действительно, модель мира никак недоступна при первых вызовах SV_LinkEdict. Надо либо грузить её прямо в дллке, либо вызывать функции повторно, после её загрузки.

Добавлено 09-02-2017 в 00:15:

Придётся тащить в дллку Mod_LoadBrushModel, а потом выкидывать всё, что не нужно на сервере.
C++ Source Code:
1
Mod_LoadVertexes( &header->lumps[LUMP_VERTEXES] );
2
Mod_LoadEdges( &header->lumps[LUMP_EDGES] );
3
Mod_LoadSurfEdges( &header->lumps[LUMP_SURFEDGES] );
4
Mod_LoadTextures( &header->lumps[LUMP_TEXTURES] );
5
Mod_LoadLighting( &header->lumps[LUMP_LIGHTING] );
6
Mod_LoadVisibility( &header->lumps[LUMP_VISIBILITY] );
7
Mod_LoadTexInfo( &header->lumps[LUMP_TEXINFO] );
8
Mod_LoadSurfaces( &header->lumps[LUMP_FACES] );
9
Mod_LoadMarkSurfaces( &header->lumps[LUMP_MARKSURFACES] );
10
Mod_LoadLeafs( &header->lumps[LUMP_LEAFS] );
11
Mod_LoadNodes( &header->lumps[LUMP_NODES] );


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

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

Добавлено 09-02-2017 в 00:38:

Надеюсь, если запихнуть загрузку карты (и своего собственного массива моделей) в ServerActivate, то всё будет успевать загрузиться раньше спауна и вызовов SET_MODEL и SET_ORIGIN. Хотя наверное нет, и тогда придётся хитрить со спауном, как для игрока в DMC: сначала спауним без SET_MODEL и SET_ORIGIN, а потом уже спауним повторно из ServerActivate с полным набором функций. И да, через SET_MODEL в этом случае можно будет загнать модели не только в движковый, но и в собственный список.


Отправлено Дядя Миша 08-02-2017 в 17:45:

Цитата:
Ku2zoff писал:
На момент вызова SV_LinkEdict из pfnSetOrigin, например, ещё недоступна функция IEngineStudio.GetModelByIndex

Я тебя наверное опять расстрою, но в серверном интерфейсе нет такой функции.
Там вот такое:
C++ Source Code:
1
// Allocate number*size bytes and zero it
2
void			*( *Mem_Calloc )				( int number, size_t size );
3
// Check to see if pointer is in the cache
4
void			*( *Cache_Check )				( struct cache_user_s *c );
5
// Load file into cache ( can be swapped out on demand )
6
void			( *LoadCacheFile )				( char *path, struct cache_user_s *cu );
7
// Retrieve pointer to studio model data block from a model
8
void			*( *Mod_Extradata )				( struct model_s *mod );

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 09-02-2017 в 01:05:

Цитата:
Дядя Миша писал:
Я тебя наверное опять расстрою

IEngineStudio.GetModelByIndex у меня дёрнута с клиентки, как в тринити. Временно. Буду делать свою загрузку моделей из дллки.


Отправлено Ku2zoff 16-02-2017 в 16:46:

Есть небольшой прогресс. Сделал проверки на загруженность модели мира и ареанодов. Грузить при использовании клиентской IEngineStudio.GetModelByIndex можно смело только из StartFrame, т.к. на момент вызова ServerActivate экспорты клиентки ещё недоступны.
Короче говоря, нужна защёлка, по которой сначала грузим модель мира, сразу за ней ареаноды, а потом заново вызываем SET_MODEL, SET_ORIGIN и SET_SIZE для тех энтить, которым это нужно, чтобы установить правильные размеры. Можно конечно и не вызывать первый раз, а только во второй. Но не знаю, поломается от этого что-то или нет. Вообще, два раза имеет смысл вызывать только SET_MODEL. Первый раз для регистрации модели в движке, а второй раз уже для установки размеров в дллке.
Сейчас уже нет сил на эксперименты. Надеюсь, что за пару недель у меня что-нибудь получится.


Отправлено Дядя Миша 16-02-2017 в 19:39:

Цитата:
Ku2zoff писал:
т.к. на момент вызова ServerActivate экспорты клиентки ещё недоступны.

Не экспорты клиентки недоступны, а конкретно эта функция возвращает NULL, потому что на клиент еще не пришло обновление. А так, экспорты клиентки доступны еще до того, как серверная дллка вообще будет загружена.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 17-02-2017 в 03:30:

Цитата:
Дядя Миша писал:
А так, экспорты клиентки доступны еще до того, как серверная дллка вообще будет загружена.

А, точно. Я что попало понаписал. Клиентка же грузится движком раньше сервера.


Отправлено Ku2zoff 02-03-2017 в 05:35:

Итак, я зашёл в тупик. Помимо подмены движковых экспортов, нужно ещё написать собственную функцию SV_Physics_Entity, из которой вызывается обработка физики для энтить (которая естественно никуда не экспортируется). Это всё конечно не проблема, но придётся заводить новые movetype, о которых движок не знает, чтобы он не обрабатывал энтити, а "отдавал" их на обработку дллке.


Отправлено Дядя Миша 02-03-2017 в 15:40:

Цитата:
Ku2zoff писал:
но придётся заводить новые movetype, о которых движок не знает, чтобы он не обрабатывал энтити, а "отдавал" их на обработку дллке.


Ты не сможешь завести новые моветипы никоим образом, потому что SV_Physics настроен на вполне конкретное условие: если моветип незнакомый, то вызывается Sys_Error, штоб неповадно было. Ты наверное ксаш смотрел, где нет такого повидения. А надо было заглянуть в ReHLDS или в OSHLDS. Так что новые моветипы ты не заведёшь. И всё же способ перенести физику на сервер есть и он довольно простой. Но я не буду тебе его сообщать, мне хочется чтобы ты сам догадался. Я даже больше скажу - этот метод был вполне успешно опробован в HLFX 0.7, т.е. он стопроцентно рабочий.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 02-03-2017 в 16:49:

Цитата:
Дядя Миша писал:
Но я не буду тебе его сообщать, мне хочется чтобы ты сам догадался.

Ох, ну на это может уйти много времени Если способ довольно простой, то я тем более не догадаюсь. Разве что он частично есть в ксашмоде.
Цитата:
Дядя Миша писал:
Но я не буду тебе его сообщать

Да это всё для того, чтобы заставить на ксаш перейти. А вот нет. По крайней мере пока. Посмотрим, что будет после релизв 26 апреля. Если моды начнут заводиться искаропки 1в1 как под халфой (то есть cfg, scr и liblist.gam будут правильно парситься) и будет поддержка новой клиентки с SDL, тады да. А если будет винегрет как сейчас, тогда я лучше пожертвую размерами уровней и наличием некоторых фич.


Отправлено Дядя Миша 02-03-2017 в 17:21:

Цитата:
Ku2zoff писал:
Если способ довольно простой, то я тем более не догадаюсь

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 02-03-2017 в 17:27:

Цитата:
Дядя Миша писал:
Движок обманывается ровно тремя строчками кода.

Единственное, что мне пришло в голову, это pev->movetype = MOVETYPE_NONE. Для энтить с этим мувтипом физика не выполняется. Выполняется только тчинк. Но это только одна строчка.


Отправлено Дядя Миша 02-03-2017 в 17:27:

Цитата:
Ku2zoff писал:
Да это всё для того, чтобы заставить на ксаш перейти. А вот нет. По крайней мере пока.

Ты всеръез думаешь, что я на ксаш кого-то заманываю? Или ты думаешь, что ты какой-то важный разработчик, которого я задался целью на ксаш заманить? Охренеть у людей фантазии.

Цитата:
Ku2zoff писал:
(то есть cfg, scr и liblist.gam будут правильно парситься) и будет поддержка новой клиентки с SDL, тады да.

cfg, scr и liblist.gam - да. Собственно я это давно мог сделать, но не въезжал в этот механизм, да меня он на тот момент не сильно волновал, т.к. я не придавал мультиплееру большого значения - предиктинг всё равно не работал как следовает. А теперь конечно сделаю.
А вот клиентку с SDL я делать пока не планирую. По одной простой причине - через SDL невозможно включить расширенный отладочный GL-контекст, ну по крайней мере с той версией, которую юзает халфа. А он мне нужен. Вероятно есть и какие-то другие ограничения, так что SDL отправляется фтопку. К тому же, как я понял он не даст мне сделать окошко системной консоли выделенного сервера. Если какие-то придурки собирают мод с SDL, то это исключительно их проблемы. Я это говно к себе тянуть не буду. Вон в форке пусть альбатросы тянут на здоровье.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 02-03-2017 в 17:40:

Цитата:
Дядя Миша писал:
Ты всеръез думаешь, что я на ксаш кого-то заманываю?

Ну а разве нет? Раньше ты очень много его пиарил. И у тебя получилось привлечь полезными фичами Тхамбса, и хохлов с Креазотами. Ну и Элбера.
Цитата:
Дядя Миша писал:
Или ты думаешь, что ты какой-то важный разработчик

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


Отправлено Дядя Миша 02-03-2017 в 18:02:

Я с 15-го года никого не заманываю. Движок давно уже прошёл тот этап, когда на него надо было кого-то заманывать. А вы этого даже не заметили.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ghoul [BB] 03-03-2017 в 06:00:

Цитата:
Ku2zoff писал:
Да это всё для того, чтобы заставить на ксаш перейти. А вот нет. По крайней мере пока. Посмотрим, что будет после релизв 26 апреля.


Да. Релиз покажет истину:будет ли работать новая версия XDM под Ксашем или нет.
и тогда будет понятно окончательно, на чём релизить мой мод.

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено Ku2zoff 06-03-2017 в 05:46:

Цитата:
Дядя Миша писал:
Движок обманывается ровно тремя строчками кода.

pev->solid = SOLID_NOT;
pev->movetype = MOVETYPE_NONE;

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


Отправлено ~ X ~ 06-03-2017 в 05:55:

Цитата:
Ku2zoff писал:
хранить в каких-нибудь других энтварсах

Обязательно в них? Кстати, можно и в одном, разделив биты ибо вариантов там совсем мало.

Изменение масштабов пригодилось бы Гуулю в его Тириане... эх.

Ku2zoff а монстров ты совсем забросил?

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Ku2zoff 06-03-2017 в 06:34:

Цитата:
~ X ~ писал:
а монстров ты совсем забросил?

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


Отправлено ~ X ~ 06-03-2017 в 07:06:

Цитата:
Ku2zoff писал:
забабахаю карту с поездом

AS-HiSpeed - не иначе

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Ku2zoff 06-03-2017 в 07:38:

~ X ~ ну собсно, я ей и вдохновлялся. Размеры уровней в халфе не позволяют уместить на одной карте больше 4х-5ти вагонов, чтобы выглядело красиво. А вот если уменьшить объекты в два раза, да плюс к этому увеличить карту в два раза, тогда да. Ну и 3д скай для пущей красоты.


Отправлено Дядя Миша 06-03-2017 в 09:10:

Цитата:
Ku2zoff писал:
pev->solid = SOLID_NOT;
pev->movetype = MOVETYPE_NONE;

C++ Source Code:
1
pev->iuser1 = pev->movetype;
2
pev->movetype = MOVETYPE_NONE;
3
SV_physics();
4
pev->movetype = pev->iuser1;

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 06-03-2017 в 10:44:

Цитата:
Дядя Миша писал:
SV_physics();
pev->movetype = pev->iuser1;

А конфликта с движком не будет? Ведь мувтип мы возвращаем обратно, и движок всё же обработает энтитю: если вызывать это дело из StartFrame, то физика в движке выполняется после StartFrame. Да и неоткуда больше вызывать.


Отправлено Дядя Миша 06-03-2017 в 11:03:

Наоборот кагбы. В начале кастомной физики возвращать всё на место, а в конце - прикидываться статиком.

Добавлено 06-03-2017 в 14:03:

void StartFrame( void )
{
for( int i = 0; i < gpGlobals->maxEdicts; i++ )
{
edict_t *e = INDEXENT( i );
e->v.movetype = e->v.iuser1;
SV_PhysicsEntity( e );
e->v.iuser1 = e->v.movetype;
e->v.movetype = MOVETYPE_NONE;
}
}

Типа такого.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 06-03-2017 в 13:00:

Цитата:
Дядя Миша писал:
Наоборот кагбы.

Ну вот, теперь всё понятно. Будем попробовать этот хак и анальщину, выражаясь словами Мастера .

Добавлено 06-03-2017 в 20:00:

Только не gpGlobals->maxEdicts, а gpGlobals->maxEntities.


Отправлено Дядя Миша 06-03-2017 в 13:26:

псевдокод не обязан компилироваться, он для примера.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 16-03-2017 в 06:15:

Добрался до загрузки моделей. Я так понимаю, что все проверки на валидность и хеш-суммы движок уже делает сам (движковый прекэш вываливает Sys_error, если что не так), и в дллке этого делать не надо. Достаточно проверить, сработал ли прекэш:

C++ Source Code:
1
if (g_engfuncs.pfnPrecacheModel(s))
2
{
3
  for (int i = 0; i < MAX_MODELS; i++)
4
  {
5
    if (!model_precache[i])
6
    {
7
      model_precache[i] = s;
8
      models[i] = Mod_ForName(s);
9
 
10
      return i;
11
    }
12
 
13
    if (!strcmp(model_precache[i], s))
14
      return i;
15
  }
16
}

То есть можно выкинуть весь ненужный код, и убавить кол-во аргументов у функции Mod_ForName с трёх до одного.


Отправлено Ku2zoff 17-03-2017 в 15:52:

Дядя Миша подскажи пожалуйста мне кое-что по организации кэша моделей. В ксаше и в курдвы устроено по-разному. Во втором случае кэш вообще в какой-то внешней структуре сохраняется, а в первом, в ксаше то есть, ты получается заюзал неиспользованную переменную в структуре model_s, чтобы движок знал, что данная модель уже загружена, и не дублировал её в памяти. Мне, неграмотному, неясно, какой способ удобнее и надёжнее. Ну и по поводу организации самой памяти под загруженные модели: как она выделяется, чистится, как из неё выбирается нужная модель (особенно интересует работа с дубликатами). Расписывать подробно не нужно, просто ткни носом, где копать. Ну и по поводу содержимого zone.c/zone.cpp: а нужно ли всё это тащить в дллку, или можно каким-то более доступным способом управлять кэшем?


Отправлено Дядя Миша 17-03-2017 в 17:04:

Цитата:
Ku2zoff писал:
Во втором случае кэш вообще в какой-то внешней структуре сохраняется

Это например в какой?

Цитата:
Ku2zoff писал:
ты получается заюзал неиспользованную переменную в структуре model_s, чтобы движок знал, что данная модель уже загружена, и не дублировал её в памяти

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

Цитата:
Ku2zoff писал:
Мне, неграмотному, неясно, какой способ удобнее и надёжнее

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

Цитата:
Ku2zoff писал:
Ну и по поводу организации самой памяти под загруженные модели: как она выделяется, чистится, как из неё выбирается нужная модель (особенно интересует работа с дубликатами).

Ты не знаешь какой функцией выделяется память? А дубликатов в списке моделей нет.

Цитата:
Ku2zoff писал:
Ну и по поводу содержимого zone.c/zone.cpp: а нужно ли всё это тащить в дллку

мемпулы - это вопрос удобства. Умеешь работать с памятью - делай всё вручную. Не умеешь - юзай менеджеры памяти.
Цитата:
Ku2zoff писал:
или можно каким-то более доступным способом управлять кэшем?

А что ты понимаешь под доступностью?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 18-03-2017 в 03:57:

Цитата:
Дядя Миша писал:
Ты не знаешь какой функцией выделяется память? А дубликатов в списке моделей нет.

Ну почему же? Немного по этой теме я знаю. Даже читал твою статью по работе с памятью. Я пока не разобрался, как это устроено в ксаше/rehlds. Эти мемпулы и ханки меня запутали, я ведь ни разу не работал с памятью так плотно, как нужно для кэширования моделей, например.
Я знаю, что дубликатов нет. Я спрашивал про то, как они отсеиваются, чтобы не грузиться повторно. Кажется, я сам уже понял:
При первой загрузке модели выделяется память для неё. При попытке загрузить дубликат (в ксаше), движок проверяет указатель на мемпул. Если память уже выделена, значит, модель загружена, ещё раз грузить не нужно, иначе будет дубликат. В rehlds нет указателя на мемпул, который храниться в самой структуре model_s, поэтому там проверяется кэш.
Цитата:
Дядя Миша писал:
А что ты понимаешь под доступностью?

Ну, например, может есть какие-то экспортные функции движка для этих целей. Хотя нет, это опасно. Можно ведь весь движок уронить одной кривой строчкой. Его и так конечно можно легко уронить.
Цитата:
Дядя Миша писал:
Для приложений под современные OS вся эта порнография не нужна уже.

Но в халфе оно конечно осталось по наследству от кваки, хоть уже и не нужно


Отправлено Дядя Миша 18-03-2017 в 08:48:

Цитата:
Ku2zoff писал:
Эти мемпулы и ханки меня запутали

ханки они поименованые. Видишь там имя модели даётся ханку.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 18-03-2017 в 10:29:

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

Цитата:
Дядя Миша писал:
ханки они поименованые. Видишь там имя модели даётся ханку.

Я справился с вариантом из ксаша. А вариант из rehlds больно запутанный, там ещё интерфейс для хуков сбивает с толку при чтении кода. Ну и вообще, там код более хаотичный местами.

Добавлено 18-03-2017 в 17:29:

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

Текстуры для студиомоделек не нужно же грузить на сервере? Они ж не рендерятся там. А текстуры для брашей? Надо поглядеть серверную трассу и код физики, нужна ли там часть из того, что грузит Mod_LoadBrushModel. А спрайты я вообще планирую не грузить. Если это не повлияет на физику проджектайлов.


Отправлено Дядя Миша 18-03-2017 в 14:01:

Цитата:
Ku2zoff писал:
А вариант из rehlds больно запутанный

Там линейная модель памяти. Ну представь себе стакан, который ты наполняешь водой. И вот у тебя вода-память всё необходимое заняла, настало время грузить модели. Ты делаешь на стакане условную дырку на уровне ватерлинии (вызываешь Hunk_LowMark и запоминаешь значение) и тут же затыкаешь её затычкой, чёб не вытикло. Потом грузишь все модели, играешь на уровне, выходишь с него и вызываешь Hunk_ClearToLowMark, типо вытаскиваешь затычку и вся вода сливается до уровня дырки. И тебе не надо париться с указателями и утечками. Ты точно знаешь что вся память высвобождена. Из плюсов подобного подхода - практически нулевой уровень дефрагментации, а из минусов - неудобство работы. Мемпул работает немного не так. Он выделяет пул, на котором сохраняются указатели для всей памяти, выделенной на этом пуле. А дальше ты можешь с ней либо работать как с самой обычной памятью - выделять, освобождать, но если надо - можешь разом высвободить весь пул. В этом и удобство. Не надо помечать никакие верхние-нижние точки.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 19-03-2017 в 14:10:

Добрался до загрузки текстур брашевых моделей. Там туева хуча вещей связанных с загрузкой вадов тащится за функцией Mod_LoadTextures. А что если просто выделить память для loadmodel->textures[i] и определить её имя (и размеры, если надо), а мипы не грузить? Кажется, для правильной работы Mod_LoadTexInfo и последующей правильной работы Mod_LoadSurfaces одних имён будет достаточно. Ну то есть чтобы трасса работала. Все другие проверки заранее сделает сам движок. Если вада нет, то карта не загрузится.

Кажется, visdata вообще не нужна в моём случае, её грузить точно не буду. lightdata тоже не нужна, если не захочется оверрайдить функцию GET_ENTITY_ILLUM. Если она действительно не работает в халфе, то может быть сделаю загрузку освещения.

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

C++ Source Code:
1
1	Mod_LoadEntities( &header->lumps[LUMP_ENTITIES] );
2
2	Mod_LoadPlanes( &header->lumps[LUMP_PLANES] );
3
3	Mod_LoadSubmodels( &header->lumps[LUMP_MODELS] );
4
4	Mod_LoadVertexes( &header->lumps[LUMP_VERTEXES] );
5
5	Mod_LoadEdges( &header->lumps[LUMP_EDGES] );
6
6	Mod_LoadSurfEdges( &header->lumps[LUMP_SURFEDGES] );
7
7	Mod_LoadTextures( &header->lumps[LUMP_TEXTURES] );
8
8	Mod_LoadLighting( &header->lumps[LUMP_LIGHTING], extrahdr );
9
9	Mod_LoadVisibility( &header->lumps[LUMP_VISIBILITY] );
10
10	Mod_LoadTexInfo( &header->lumps[LUMP_TEXINFO], extrahdr );
11
11	Mod_LoadSurfaces( &header->lumps[LUMP_FACES] );
12
12	Mod_LoadMarkSurfaces( &header->lumps[LUMP_MARKSURFACES] );
13
13	Mod_LoadLeafs( &header->lumps[LUMP_LEAFS] );
14
14	Mod_LoadNodes( &header->lumps[LUMP_NODES] );
15
15    Mod_LoadClipnodes( &header->lumps[LUMP_CLIPNODES] );

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

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

Третья грузит субмодели, её выкидывать нельзя.

Четвёртая, пятая, шестая не могут быть выкинуты из-за зависимости от них функции Mod_LoadSurfaces.

Седьмая грузит текстуры. Тут всё понятно, на именах текстур куча всего держится.

Восьмая - освещение, девятая - видимость. Я выше писал свои умозаключения по их нужности.

Десятая - зависит от седьмой, а от неё самой зависит Mod_LoadSurfaces.

Одиннадцатая, двенадцатая - на них строятся свойства поверхностей, да и самих моделей. Думаю, для трассы это необходимо.

Тринадцатая, четырнадцатая и пятнадцатая - то, без чего невозможна физика.

Это мои соображения, может быть где-то я не прав.

Короче, получается, можно выкинуть Mod_LoadEntities, Mod_LoadLighting, и Mod_LoadVisibility ничего не изломав. Надеюсь, нигде сильно не ошибся.


Отправлено Дядя Миша 19-03-2017 в 14:52:

Цитата:
Ku2zoff писал:
А что если просто выделить память для loadmodel->textures и определить её имя (и размеры, если надо), а мипы не грузить?

Не грузи.

Цитата:
Ku2zoff писал:
Если она действительно не работает в халфе, то может быть сделаю загрузку освещения.

Ну тараканы же на свет реагируют. забыл?

Цитата:
Ku2zoff писал:
Вторая грузит плоскости, которые нужны хуллам, её нельзя выкидывать.

Там шареные плоскости, для всего.

Цитата:
Ku2zoff писал:
Четвёртая, пятая, шестая не могут быть выкинуты из-за зависимости от них функции Mod_LoadSurfaces.

Нахрен не нужны.

Цитата:
Ku2zoff писал:
Десятая - зависит от седьмой

десятая нужна если соберёшься трейсить текстуры. Собсно, как одиннадцатая.

Цитата:
Ku2zoff писал:
Одиннадцатая, двенадцатая - на них строятся свойства поверхностей, да и самих моделей

Хрена се подробнсти

Цитата:
Ku2zoff писал:
Тринадцатая, четырнадцатая и пятнадцатая - то, без чего невозможна физика.

13-я и 14-я нужны только для точечной трассы.

Цитата:
Ku2zoff писал:
Надеюсь, нигде сильно не ошибся.



Добавлено 19-03-2017 в 17:52:

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 19-03-2017 в 16:17:

Цитата:
Дядя Миша писал:
Ну тараканы же на свет реагируют. забыл?

А, ну точно. Хотя когда-то давно, ещё на хлру кто-то жаловался, что GET_ENTITY_ILLUM возвращает некорректное значение.
Цитата:
Дядя Миша писал:
Нахрен не нужны.

Цитата:
Дядя Миша писал:
для точечной трассы хотя и не нужны вертексы, но на этапе загрузки фейсов необходимо рассчитать faceextents и texturemins.

Значит нужны. Пусть вертексы будут в памяти. Мне лениво вычислять что-то налету. Даже не столько лениво, сколько опыта не хватает, чтобы грамотно написать код.
Цитата:
Дядя Миша писал:
Хрена се подробнсти

Может быть я неправильно выразился. Речь про флаги сурфейсов и моделей.
Цитата:
Дядя Миша писал:
десятая нужна если соберёшься трейсить текстуры. Собсно, как одиннадцатая.

Цитата:
Дядя Миша писал:
13-я и 14-я нужны только для точечной трассы.

Ага, ну вот, узнал кое-что полезное. Точечная трасса вроде правильно работает при изменённых хуллах. Ну попадания от выстрелов точно получаются правильные, и текстуры трейсятся правильно. Гранаты и оружия правильно падают на пол. А вот item_suit проваливается в пол. Интересно, в чём разница? Наверное в размерах. У итемов бокс со стороной в 16 юнитов, а у оружий нулевой. Вот тут-то и показывает себя во всей красе HullForBsp, из-за которого я изучил так много кода в ксаше и rehlds.

Добавлено 19-03-2017 в 22:51:

Mod_LoadSurfaces тоже можно выкинуть, если не использовать TraceSurface? Поискал по дллкам - что-то нигде не юзается. А если выкинуть её, то не получится трейсить текстуры c помощью TraceTexture. Ну то есть получится, но средствами движка. Я выше писал, что оно корректно работает. Значит, можно выбросить функции 4,5,6,7,8,9,10,11,12,13,14. Про все теперь понятно, кроме Mod_LoadNodes, которая №14. worldmodel->nodes нужны в функции SV_LinkEdict при вызове SV_FindTouchedLeafs. Для чего это? Там есть комментарий "// link to PVS leafs", но я не понял, что значит эта линковка к листьям, которые в PVS.

Добавлено 19-03-2017 в 23:00:

И ещё одно, чуть не забыл спросить про энтити с MOVETYPE_PUSH, ну то есть двери, кнопки, поезда и проч. У них только точечная трасса? Их физику можно оставить движку?

Добавлено 19-03-2017 в 23:06:

По моим прикидкам, в кастомной физике при уменьшении хуллов нуждаются только энтити с такими мувтипами:
MOVETYPE_STEP
MOVETYPE_PUSHSTEP
MOVETYPE_FLY
MOVETYPE_TOSS
MOVETYPE_BOUNCE
И то, если они имеют ненулевой размер.

Добавлено 19-03-2017 в 23:17:

Цитата:
Ku2zoff писал:
И то, если они имеют ненулевой размер.

Сейчас ради эксперимента задал учёному нулевой размер - модель не проваливается в пол, но коллизии колоизации с ним нет.


Отправлено Дядя Миша 19-03-2017 в 16:36:

Цитата:
Ku2zoff писал:
Мне лениво вычислять что-то налету.

рж0т. А как ты собрался, в файлег их чтоли записывать? Блин янемогу

Цитата:
Ku2zoff писал:
Речь про флаги сурфейсов и моделей.

клипноды никак не связаны с сурфейсами

Цитата:
Ku2zoff писал:
А если выкинуть её, то не получится трейсить текстуры c помощью TraceTexture. Ну то есть получится, но средствами движка.

Так точечный хулл при любом масштабе остаётся точечным. TRACE_TEXTURE и GET_ENTITY_ILLUM в любом случае будут правильно работать.
Так что тебе только клипноды нужны и планесы.
Цитата:
Ku2zoff писал:
worldmodel->nodes нужны в функции SV_LinkEdict при вызове SV_FindTouchedLeafs

Цитата:
Ku2zoff писал:
Для чего это? Там есть комментарий "// link to PVS leafs", но я не понял, что значит эта линковка к листьям, которые в PVS.

Это для быстрой проверки PVS на сервере. Я же писал об этом в своём туторе. Там хранятся номера лифов, которые можно по бырому проверить на видимость в FatPVS. Если виден хотя бы один лиф - видна вся энтить целиком.

Цитата:
Ku2zoff писал:
И ещё одно, чуть не забыл спросить про энтити с MOVETYPE_PUSH, ну то есть двери, кнопки, поезда и проч. У них только точечная трасса? Их физику можно оставить движку?

Иди читай все мои туторы с самого начала.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 19-03-2017 в 16:52:

Цитата:
Дядя Миша писал:
Это для быстрой проверки PVS на сервере.

Так, это понятно. PVS проверять будет движок, значит листья не нужны.
Цитата:
Дядя Миша писал:
Иди читай все мои туторы с самого начала.

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

Добавлено 19-03-2017 в 23:52:

Цитата:
Дядя Миша писал:
Так что тебе только клипноды нужны и планесы.

Это сильно уменьшает объём кода. Здорово. Хотя я уже успел скопипастить и адаптировать всё, кроме видимости, освещения и текстур, я начал сомневаться в нужности некоторых вычислений. И небезосновательно.


Отправлено Дядя Миша 19-03-2017 в 19:20:

Цитата:
Ku2zoff писал:
PVS проверять будет движок, значит листья не нужны.

Ну если ты будешь вызывать движковый LinkEdict, то да. А так нет.

Цитата:
Ku2zoff писал:
"Основная его особенность заключается в том, что он не только позволяет осуществить полноценную колоизацию" можно сделать вывод, что трасса точечная.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 30-03-2017 в 15:02:

Я доделал загрузку всех видов моделей, разобрался с эдиктами (svgame.edicts. В дллке этот список не нужен, можно обойтись каллбэками INDEXENT и ENTINDEX). Скопипастил функции физики SV_Physics и SV_Physics_Toss + всё сопустсвующее (для проверки работоспособности на гранатах). Не движутся. Точно не знаю, в чём проблема. Возможно в gpGlobals->frametime. Нужна подсказка: при вызове StartFrame gpGlobals->frametime случайно не равно нулю? У меня такое впечатление, что во всех местах, где эта переменная используется, идёт умножение на ноль, вместо значения frametime. То есть, ни гравитация, ни скорость на энтити не действуют. А может быть энтитя не тчинкает когда надо, а тчинкает позже.


Отправлено Дядя Миша 30-03-2017 в 15:48:

Цитата:
Ku2zoff писал:
Нужна подсказка: при вызове StartFrame gpGlobals->frametime случайно не равно нулю?

а пихнуть алерт, да посмотреть? Не, слишком сложно %)

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 30-03-2017 в 16:18:

Дядя Миша пока я вот что выяснил:
Точно вызывается SV_ClipMoveToEntity(INDEXENT(0)... из SV_Move. Последующие вызовы SV_ClipMoveToEntity, которые идут из SV_ClipToLinks, не вызываются. Я конечно ещё понатыкаю алертов, попробую выяснить, в чём причина.


Отправлено Дядя Миша 30-03-2017 в 17:23:

Я полагаю проблема банально в том, что ты не понимаешь что делаешь, в надежде, что если всё скопировать точно как в движке, то оно и заработает точно как в движке.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 30-03-2017 в 18:07:

Дядя Миша я не очень понимаю, что делаю. Вроде бы оно должно работать. Но тут же, я чувствую, что движок - это не дллки, и кое-где нужны исправления. Ну вот хотя бы с модельиндексами. model_precache нужно обнулять при смене карты (когда грузится именно другой bsp-файл, чтобы модельиндексы моделей, загруженных в движке совпадали с модельиндексами моделей, заргуженных в дллке).
Натыкаю алертов и посмотрю, что не так. Надеюсь, что-то получится в итоге.


Отправлено Ku2zoff 31-03-2017 в 16:54:

Так, кое-в чём разобрался. MOVETYPE_NOCLIP прекрасно работает. Значит, дело либо в функции SV_Move, либо в хуллах студиомодели.

Добавлено 31-03-2017 в 23:21:

Есть подозрение, что проблема в векторах. Идёт конфликт с классом Vector, описанным в vector.h и движковым vec3_t. Из-за этого трейсы работают неправильно. Раздефайнил vec3_t, задефайнил снова, но уже как в движке: граната теперь не застревает в воздухе, как в солиде (раньше издавала звуки ударов об мир), а просто висит, не получая ускорения и воздействия гравитации. Буду копать дальше.
Самое главное, что кастомная физика вполне себе работает. Что видно на примере MOVETYPE_NOCLIP. А значит вся эта возня не зря, нужно только победить оставшиеся проблемы.

Добавлено 01-04-2017 в 00:02:

Готово! Гранаты залетали как надо. Это я дурак, нефиг комментить куски кода, не разобравшись, зачем они нужны Сейчас очередь за монстрами.

Добавлено 01-04-2017 в 00:54:

Ну и сдаётся мне, что придётся ещё тащить куски pmove в дллку, чтобы игрок взаимодействовал с энтитями. А то они стали весьма несолидными для него. Гранаты, например, толкают пушабли, а игрок нет. Но используя кнопку use, игрок может тягать и толкать пушабли. Лишь бы всё это дело работало по сети и с предиктингом, т.к. весьма неохота ещё что-то ковырять в клиенте. И есть ещё проблема: брашевые энтити с movetype_push. Им ещё в добавок придётся выставлять SOLID_NOT, чтобы движок не ругался на SOLID_BSP without MOVETYPE_PUSH.
Короче, скоро будет какой-нибудь результат. Я надеюсь на это. Демку с исходником карты, где всё уменьшено в два раза, точно приложу.


Отправлено Дядя Миша 31-03-2017 в 20:01:

Цитата:
Ku2zoff писал:
Идёт конфликт с классом Vector, описанным в vector.h и движковым vec3_t.

Не обманывай, нет там не какого конфликта. Это ты просто не те хидеры добавил.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 01-04-2017 в 09:18:

Цитата:
Дядя Миша писал:
Это ты просто не те хидеры добавил.

Да, верно. Ну с этим разберёмся. Кстати, научил энтити коллайдить с игроком: запихнул вызов SV_AddLinksToPmove перед вызовом PM_Move. Игрок конечно может застревать в энтитях, да и сами энтити друг в дружке тоже. Но! Наконец-то код работает, есть результат. Уч0ные и пушабли двигаются и не проваливаются в пол. Обнаружил новую проблему, которая кроется вот в этом:
C++ Source Code:
// это оригинальный код:
mins = VEC_HULL_MIN;
maxs = VEC_HULL_MAX;

C++ Source Code:
// а это правильный код:
VEC_HULL_MIN.CopyToArray( mins );
VEC_HULL_MAX.CopyToArray( maxs );

При использовании оригинального кода игрок правильно взаимодействует с миром, но не может подойти вплотную к энтитям, т.к. размер сторон его хуллов всё равно остаётся 8х8x36 и 8x8x18. При использовании правильного кода, игрок нормально подходит к энтитям, но проваливается в мир наполовину. То есть у нас здесь теперь обратная ситуация. Теперь игрок проваливается.


Отправлено Ku2zoff 01-04-2017 в 16:02:

Похоже, придётся ещё лезть в клиент из-за брашевых энтить, которые не могут быть без MOVETYPE_PUSH или MOVETYPE_PUSHSTEP. Чтобы конкретно обмануть движок, этим энтитям надо выставить SOLID_NOT. Если на сервере всё более-менее решаемо, и везде, где надо можно подсунуть iuser1 вместо movetype, а iuser2 вместо solid, то на клиенте кажется с этим посложнее. Но, в принципе, можно сделать обманку в функции HUD_Frame по аналогии с StartFrame на сервере. Ну это станет видно, когда прочие энтити заработают нормально, и я проверю их взаимодействие с энитями, у которых SOLID_BSP, которые пока обрабатывает движок.
Интересно, как в HLFX 0.7 решена эта проблема? Ведь почти все брашевые энтити имеют SOLID_BSP. Кроме триггеров и пушаблей.


Отправлено Ku2zoff 05-04-2017 в 09:29:

Маленький отчёт о проделанной работе, эдакое резюме по 10 страницам темы, после того как я активно заинтересовался масштабированием:

Сделана загрузка моделей серверной дллкой и построение своей собственной index replacement table. v.modelindex какого-либо эдикта указывает на одинаковые модели из движковой и из собственной таблицы. Ну то есть не совсем одинаковые. В дллке я выбросил загрузку некоторых компонентов моделей, таких как текстуры или инфа об освещении и видимости, т.к. для кода физики и движения это не нужно.

Произведена грубая копипаста кода физики для некоторых мувтипов. Как из ксаша, так и из rehlds. На первый взгляд разницы нет (но в ксаше код грамотнее и читаемее), нужно тестировать и править недочёты. На данный момент получилось заставить нормально работать пушабли, гранаты и учёных.

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

Добавлено 05-04-2017 в 16:29:

З.Ы. Всё для обычной халфы, конечно. Юзая ксаш, можно изменить размеры хуллов в гейминфо и поставить квар sv_quakehulls 2. И не делать всего этого.

З.З.Ы. Для чего это нужно в халфе (в ксаше не нужно, т.к. карты там можно делать гораздо больше 8192х8192х8192): не увеличивая размер карты, увеличить её размер относительно игрока и энтить, для создания больших пространств или карт с поездами (типа AS-HiSpeed), например.


Отправлено Дядя Миша 05-04-2017 в 15:24:

Строго говоря, если бы требовалось только поменять размер хуллов, я бы просто на клиенте получил все модели перебором и позаменял бы там корочи hull_mins и hull_maxs, как я это проделывал в римейке кваки.
А то что в SV_HullForBsp код немного не такой - это по большому счёту, плевать. Оно было критично для халфы, а не для кваки. Иными словами, если юзать этот код из кваки для халфы, там да - сидящие доктора и пушабли будут застревать. Для кваки же халфовский вариант прекрасно подходит.
Так что по суте всё бы ограничилось одной простенькой функцией подмены значений в хуллах. Но мыж лёгих путей неищем. Нам надо полгода копипастить из движка в дллку ради какой-то ерунды.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 05-04-2017 в 16:21:

Цитата:
Дядя Миша писал:
Но мыж лёгих путей неищем.

Откуда же знать, какой путь лёгкий? Опыт приобретается во время практики. Лишним всё равно не будет. Я конечно погляжу римейк кваки на досуге, чего там такого особенного.

Добавлено 05-04-2017 в 23:14:

Цитата:
Дядя Миша писал:
сидящие доктора и пушабли будут застревать.

Вот пушабли-то очень нужны на самом деле. Халфовский геймплей наполовину состоит из махинаций с пушаблями.

Добавлено 05-04-2017 в 23:21:

Цитата:
Дядя Миша писал:
ради какой-то ерунды.

А есть другой вариант увеличить размер карты в халфе? Без использования ксаша? Тутор БУзера не подходит, т.к. там тэмпэнтити ломаются.


Отправлено Дядя Миша 05-04-2017 в 17:14:

Цитата:
Ku2zoff писал:
Тутор БУзера не подходит, т.к. там тэмпэнтити ломаются.

Напишешь кастомную миссагу для темп-энтеть, делоф-то.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 06-04-2017 в 06:48:

Цитата:
Дядя Миша писал:
я бы просто на клиенте получил все модели перебором и позаменял бы там корочи hull_mins и hull_maxs, как я это проделывал в римейке кваки.

Взял код из римейка кваки. Игрок перестал нырять в стены и проваливаться в пол, при использовании правильного кода в GetHullBounds. Монстры ходят нормально и тоже не проваливаются в пол. Только пушабли действительно застревают. Нужно починить им кастомную физику (которую я уже скопипастил).

Тут в первом посте темы есть ссылка на тутор с wavelength. И там есть функция, описанная дебильным словосочетанием "Entropy's omegafied code", PM_FixModelHulls. Так вот, она то ли не работает, то ли работает неправильно. Функция из римейка кваки, CL_MergeHulls, делает то же самое что и эта, но работает.

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

Добавлено 06-04-2017 в 13:48:

В длину на карте теперь умещается 18 вагонов. Если в упор к скайбоксу - 17. По диагонали 25. По сравнению с 5-ю вагонами в длину при обычных размерах, это очень даже хорошо. Размеры вагона (ШхВхД) 78х104х400. Относительно размеров игрока или монстров выглядят такие вагоны как ИРЛ. Но вот внутри кажутся тесноватыми, как собственно все помещения, намапленные с точным соблюдением пропорций и размеров.


Отправлено ~ X ~ 06-04-2017 в 07:39:

Цитата:
Ku2zoff писал:
Тутор БУзера не подходит, т.к. там тэмпэнтити ломаются.

забей уже на тэмпэнтити, запили себе RS и радуйся. Даже отсечение по VIS будет. Даже в софтваре.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Ku2zoff 06-04-2017 в 07:45:

~ X ~ ну, собственно, это и придётся сделать. Это даже плюсом будет - переделать все эффекты на RS.
Что-то Гуль пропал из этой темы. Ему стоит попробовать сделать патч для Тириана с изменением размеров хуллов по типу римейка кваки. Может быть все проджектайли починятся.


Отправлено ~ X ~ 06-04-2017 в 08:34:

Ku2zoff он уехавший. Кроме того, он перешёл на тему зомбятника. А вообще - да, мы хотели запилить масштабы. Но так может дойти и до переписывания движка в ДЛЛках.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 06-04-2017 в 08:58:

Цитата:
~ X ~ писал:
Кроме того, он перешёл на тему зомбятника.

Разве не слонарника?

__________________

xaerox on Vivino


Отправлено Ku2zoff 06-04-2017 в 09:29:

Цитата:
~ X ~ писал:
А вообще - да, мы хотели запилить масштабы.

А чего там пилить? Перекомпилить карты, сменить значения в дллках, да вставить функции CL_MergeHulls из римейка кваки и PM_UpdateClipBox из тутора с wavelength. Для игроков и проджектайлов всё должно заработать. Я попробовал, у меня всё нормально работает.


Отправлено ~ X ~ 06-04-2017 в 09:47:

Цитата:
Ku2zoff писал:
Перекомпилить карты,

кто ему карты рисовать будет?

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Дядя Миша 06-04-2017 в 15:19:

Цитата:
Ku2zoff писал:
Взял код из римейка кваки. Игрок перестал нырять в стены и проваливаться в пол, при использовании правильного кода в GetHullBounds. Монстры ходят нормально и тоже не проваливаются в пол.

Полгода занимался непонятной ерундой, а потом "просто взял код из римейка кваки", ага.
Цитата:
Ku2zoff писал:
Только пушабли действительно застревают

Т.е. ты до последнего сомневался?

Цитата:
Ku2zoff писал:
Так вот, она то ли не работает, то ли работает неправильно. Функция из римейка кваки, CL_MergeHulls, делает то же самое что и эта, но работает

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

Цитата:
~ X ~ писал:
Ku2zoff он уехавший.

Может поехавший? Или понаехавший?

Добавлено 06-04-2017 в 18:19:

Цитата:
~ X ~ писал:
забей уже на тэмпэнтити, запили себе RS и радуйся. Даже отсечение по VIS будет. Даже в софтваре.



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

C++ Source Code:
1
type = MSG_ReadByte( &buf );
2
 
3
switch( type )
4
{
5
case TE_BEAMPOINTS:
6
  case TE_BEAMENTPOINT:
7
    case TE_LIGHTNING:
8
      case TE_BEAMENTS:
9
        case TE_BEAM:
10
          case TE_BEAMSPRITE:
11
            case TE_BEAMTORUS:
12
              case TE_BEAMDISK:
13
                case TE_BEAMCYLINDER:
14
                  case TE_BEAMFOLLOW:
15
                    case TE_BEAMRING:
16
                      case TE_BEAMHOSE:
17
                        case TE_KILLBEAM:
18
                            CL_ParseViewBeam( &buf, type );
19
                          break;
20
                        case TE_GUNSHOT:
21
                            pos[0] = MSG_ReadCoord( &buf );
22
                          pos[1] = MSG_ReadCoord( &buf );
23
                          pos[2] = MSG_ReadCoord( &buf );
24
                          R_RicochetSound( pos );
25
                          R_RunParticleEffect( pos, vec3_origin, 0, 20 );
26
                          break;
27
                        case TE_EXPLOSION:
28
                            pos[0] = MSG_ReadCoord( &buf );
29
                          pos[1] = MSG_ReadCoord( &buf );
30
                          pos[2] = MSG_ReadCoord( &buf );
31
                          modelIndex = MSG_ReadShort( &buf );
32
                          scale = (float)(MSG_ReadByte( &buf ) * 0.1f);
33
                          frameRate = MSG_ReadByte( &buf );
34
                          flags = MSG_ReadByte( &buf );
35
                          R_Explosion( pos, modelIndex, scale, frameRate, flags );
36
                          break;

Дальше регаем на сервере новую мессагу, назовём её для удобства gmsgTempEntity. Заменяем все вызовы SVC_TEMPENTITY на gmsgTempEntity (больше делать ничего не надо). Ну может кроме TextMessage, которую движок тоже активно юзает. На клиенте регаем нашу мессагу и вставляем целиком ту функцию, отрывок из которой я привёл, попутно адаптируя к клиентке. Ну то есть понятно MSG_ReadCoord( &buf ); заменяем на READ_COORD(); итакдалее. R_Explosion меняем на gEngfuncs->pEfxAPI->R_Explosion. В этом API выведены практически все стандартные кейсы. А если что-то и не выведено - оно без проблем пишется как отдельная функция, которую можно надёргать из того же ксаша и это будет прекрасно работать. Ну что ищё? На сервере создаём новый WriteCoord на основе WriteShort, помноженного на джва. На клиенте, понятно делим на 2 или умножаем на 0.5, это уж как повизёт. Вся работает отнимает полчаса-час.
А если ты начнёшь копировать к себе RS, сперва выяснится что она тянет пол-XDM, потом окажется, что она всё равно не работает как надо, а потом в ходе совместных консультаций и попыток разобраться, Мастер внезапно заорёт "ааа, так вот почему она у меня глючила уже пять лет, а я отдебажить не мог", причём это будет только начало в длинной череде багов, которое сподвигнет Мастера удалить старый XDM и начать писать совершенно новый, более лучший =)
а ты останешься со старой и глючной RS.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 06-04-2017 в 17:00:

Цитата:
Дядя Миша писал:
Полгода занимался непонятной ерундой

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

Добавлено 07-04-2017 в 00:00:

Цитата:
Дядя Миша писал:
значит они либо делают не одно и тоже, либо не в том месте.

Значит не в том месте.
Цитата:
Дядя Миша писал:
А чо, вейвленгтч разве работает

До сих пор можно статьи на нём читать. Удивительно, что до сих пор не сдох.


Отправлено Дядя Миша 06-04-2017 в 19:20:

Цитата:
Ku2zoff писал:
Эта непонятная ерунда поможет заставить работать пушабли с уменьшенными хуллами

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ~ X ~ 06-04-2017 в 19:52:

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

А в RS ещё отсутствуют лимиты на количество объектов, есть загрузка из текстовиков, синхронизация по серверу, есть цепляние ко всему что движется, модульность, возможность дописать всё что только вздумается. Ну и оно просто кастомизируется как угодно. Те, кто портировал к себе, не жаловались. Хотя больше смысла перенести какой-то код в XDM, чем из XDM.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 06-04-2017 в 20:02:

Цитата:
~ X ~ писал:
Иначе у половины игроков какой-нибудь спрайт или фонтан будет на карте, а у другой половины - не будет. Никогда.

Не "никогда", а в данном снапшоте, где этот спрайт или фонтан отсёкся по PVS.
Если в следующем он попадает в PVS игрока - то не отсечётся, придёт на клиент, и тот его благополучно увидит.
Цитата:
~ X ~ писал:
синхронизация по серверу

Это как?

__________________

xaerox on Vivino


Отправлено Дядя Миша 06-04-2017 в 22:11:

Цитата:
~ X ~ писал:
И опять несёшь каую-то хрень.

Ты эта. Если чего не знаешь - не стесняйся, спрашивай

Цитата:
~ X ~ писал:
Отсечение по VIS происходит на клиенте. Иначе у половины игроков какой-нибудь спрайт или фонтан будет на карте, а у другой половины - не будет. Никогда.

Ну дураку же понятно, что для каждого игрока на сервере строится индивидуальный виз. И по нему отсекаются энтити, которые надо передать на клиент. Видел в client.cpp вызов ENGINE_SET_PVS ? Вот это оно.
В противном случае (в случае неотвиженной карты), на клиент передаются ВСЕ энтити на карте и трафик выростает до космических размеров. Не веришь - поставь неотвиженную карту на сервер и вспаиграй.

А на клиенте энтити не отсекаются по визу, смысл, если их сервер уже и так отсёк? Вот темпэнтити локальные, они клиентским визом отсекаются.

Добавлено 07-04-2017 в 01:11:

Чтобы было понятнее, вот проверка на виз на клиенте:
C++ Source Code:
if( ent->curstate.messagenum != r_currentMessageNum )
  return false;	// already culled by server

где r_currentMessageNum - это номер мессаги локального игрока. Подобная проверка может быть полезна, если вы просто перебираете весь массив энтить на клиенте, на предмет их видимости. Если мессага не совпадает - значит обновление для этой энтити не пришло в текущем пакете, а почему не пришло? А потому что энтить отсеклась визом на сервере и в дельту не попала. Что за удивительная привычка человеку, который не написал ни одного движка спорить с человеком, который написал.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ~ X ~ 07-04-2017 в 05:41:

Дядя Миша ты будешь мне рассказывать как я RS написал или что?
Я сделал так, что, когда создается долговременный эффект (спрайт, дождь, куски говна), он посылается всем. Когда кто-то присоединяется, эффект создается и у него. Если происходит включение/выключение, оно шлётся всем. Иначе будет полный рассинхрон.
Зачем ты мне про виз рассказываешь? Я и так в курсе что там и как работает. Ещё лекцию про MSG_PVS напиши
Что за удивительная привычка человеку, который не написал RS, спорить с человеком, который написал.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Ku2zoff 07-04-2017 в 06:22:

Цитата:
Дядя Миша писал:
я бы просто их поменьшы сделал, чёб не застревали.

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

Неважно, какого размера пушабля. Важно её правильно расположить, чтобы она не успела упасть на пол после спавна, пока не изменятся размеры хуллов. Я поднял все пушабли на тестовой карте на 24 юнита над полом, и они не застревают в полу и прекрасно катаются. Единственное, пушабли с размерами больше 16 по осям х и у, ныряют в стены в направлениях 0 и 90 градусов, когда их толкаешь. Но не застревают. Я такое поведение встречал и в обычной халфе, в нескольких модах ящики со сторонами больше 64 тоже ныряли в стены.

Маленькие ящечки и бочки со стульями ведут себя хорошо, и этого достаточно.


Отправлено XaeroX 07-04-2017 в 06:36:

Цитата:
~ X ~ писал:
Когда кто-то присоединяется, эффект создается и у него.

Для таких целей Аллах изобрёл MSG_INIT.
Цитата:
~ X ~ писал:
Если происходит включение/выключение, оно шлётся всем.

Если что-то нужно включать-выключать на сервере, то это уже не темпэнтитя, а самая обычная энтитя.

__________________

xaerox on Vivino


Отправлено Дядя Миша 07-04-2017 в 15:07:

Цитата:
~ X ~ писал:
ты будешь мне рассказывать как я RS написал или что?

Ну если ты настаиваешь:
1. нашёл тутор на thewavelength про particle engine в четырёх частях
2. скопировал в XDM
3. переименовал в Render System
4. выдал за своё

Цитата:
~ X ~ писал:
Я сделал так, что, когда создается долговременный эффект (спрайт, дождь, куски говна), он посылается всем.

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

Цитата:
~ X ~ писал:
Я и так в курсе что там и как работает

Я вижу

Цитата:
~ X ~ писал:
Что за удивительная привычка человеку, который не написал RS, спорить с человеком, который написал.

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

Цитата:
Ku2zoff писал:
Ты как всегда не договариваешь

Радость самостоятельных открытий никто не отменял же.

Цитата:
Ku2zoff писал:
чтобы она не успела упасть на пол после спавна,

Можно отложить DROP_TO_FLOOR на 0.1-0.2 секунды к примеру.
Это же касается и монстров.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 08-04-2017 в 04:45:

Цитата:
Дядя Миша писал:
Радость самостоятельных открытий никто не отменял же.

Это верно. Чем больше изучаешь и додумываешь сам - тем меньше копипасты.
Цитата:
Дядя Миша писал:
Можно отложить DROP_TO_FLOOR на 0.1-0.2 секунды к примеру.

Как вариант, если пушабля или монстр расположены в вентиляции или другом месте с низким потолком. Монстров кстати как бы выталкивает из пола, если их располагать точно на полу. А пушабли застревают. На текущий момент это не критично. Гораздо сложнее проблема с motion extraction - монстры бегают с той же скоростью, что и при обычном размере моделей. Ну может быть чуть медленнее. Но учёные легко догоняют игрока. Можно переделать анимации или попробовать сменить интервал при вызове StudioFrameAdvance, попробую прокатит ли.


Отправлено Дядя Миша 08-04-2017 в 13:46:

pseqdesc->fps * 0.5

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 08-04-2017 в 14:37:

Я сделал так:

C++ Source Code:
1
DispatchAnimEvents( flInterval );
2
#ifdef _HALFSCALE
3
flInterval *= 0.55;
4
#endif
5
if ( !MovementIsComplete() )
6
{
7
  Move( flInterval );
8
}

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


Отправлено Ku2zoff 09-04-2017 в 09:59:

Видимо, в мультиплеере до вызова CL_CreateMove проходит слишком много времени, и пушабли успевают застрять. Пришлось изобрести хак: в CPushable::Spawn ставим MOVETYPE_NONE, чтобы пушабля не упала на пол. И делаем один единственный тчинк, в котором меняем мувтип через n секунд после спавна. Можно спокойно располагать пушабли прям на полу. С монстрами тоже придётся что-то подобное проделать, т.к. в мультиплеере они тоже успевают провалиться. Но если монстр начнёт двигаться, он "вылезет" из пола.


Отправлено Ku2zoff 09-04-2017 в 15:36:

Естественно, CL_MergeHulls и PM_FixModelHulls работают только для сингла или листенсервера. Пока на выделенном сервере нет ни одного игрока, хуллы не перестроятся, и энтити застрянут, упав на пол. Это даже немного упрощает задачу: нужно всего лишь дождаться коннекта первого игрока, и во время его подключения поменять мувтип, чтобы всё упало на пол при уже перестроенных хуллах. Вроде починил.

Добавлено 09-04-2017 в 22:36:

Используя PM_FixModelHulls, т.к. она срабатывает как для локального, так и нелокального игрока. В принципе, можно уже писать тутор. Без всяких, конечно мелочей, вроде скоростей игрока и высоты прыжков, и настройки размеров отдельных энтить. Уже совсем скоро я вам выложу это чудо, отнявшее у меня столько времени.


Отправлено ~ X ~ 10-04-2017 в 07:32:

Цитата:
XaeroX писал:
Если в следующем он попадает в PVS игрока - то не отсечётся, придёт на клиент, и тот его благополучно увидит.

А кто его туда посылать будет?

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

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Ghoul [BB] 10-04-2017 в 07:50:

Цитата:
Ku2zoff писал:
Уже совсем скоро я вам выложу это чудо, отнявшее у меня столько времени.


А когда ждать второго чуда, со стреляющими на бегу монстрами, которое отняло у тебя не меньше времени?!

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено XaeroX 10-04-2017 в 08:09:

Цитата:
~ X ~ писал:
А кто его туда посылать будет?

Сервер, разумеется.
Цитата:
~ X ~ писал:
Я таки греюсь лучами твоей гордостью за твоё высшее достижение

Не ёрничай. Мы все греемся, чего уж там. Увы, вряд ли у нас на форуме кто-то сможет похвалиться большими достижениями. Хотя уже двенадцать лет фуфлыжно сидим. Двенадцать лет, Карл!

__________________

xaerox on Vivino


Отправлено Дядя Миша 10-04-2017 в 08:22:

Цитата:
~ X ~ писал:
Я таки греюсь лучами твоей гордостью за твоё высшее достижение

Вы что, правда это говно делаете 17 лет или это какой-то прикол?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Crystallize 10-04-2017 в 08:53:

Дядя Миша ты про хдм?


Отправлено Ku2zoff 10-04-2017 в 09:02:

Цитата:
Ghoul [BB] писал:
А когда ждать второго чуда, со стреляющими на бегу монстрами, которое отняло у тебя не меньше времени?!

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


Отправлено Ghoul [BB] 10-04-2017 в 09:39:

Цитата:
Ku2zoff писал:
На примере зомби у меня получилось кое-что, ведь это довольно простой монстр. Если бы кто-нибудь декомпильнул свенкооп, можно было бы подглядывать в его код.


Давай зомби. В римейке Хангера можно будет попробовать задействовать. Будет весело.

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено Дядя Миша 10-04-2017 в 16:51:

Ku2zoff ты не путай гейт с блендингом, разные абсолютно вещи. Блендинг, это когда несколько анимаций (в голдсорсе две, в сорсе можно и больше) смешиваются в определенных пропорциях. А гейт, это такой забавный хак, типа нижнюю часть скелета анимировать вот так, а верхнюю - эдак. В ту же кассу и поворот туловища через 4 бонекотроллера. Игрок в халфе это полное убожество, не надо эту глупость копировать.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ghoul [BB] 12-04-2017 в 15:32:

А декомпилировать свенкооп Митторн может. надо только его как-то мотивировать.

Кстати, а в ворованых сорцах второй беты нет этого кода для монстров? Или в хл2? Там же монстры на бегу стреляют...

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено Дядя Миша 12-04-2017 в 15:49:

Чего вы над такой-то ерундой уже несколько лет страдаете. В чём проблема сделать бегущих монстров, даже не имея на то достаточных анимаций?
Вон боты бегают и стреляют. Нет никакой проблемы, вы сами себе её выдумали.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 12-04-2017 в 15:59:

Дядя Миша
Ну так у ботов как раз гейтсеквенции.

__________________

xaerox on Vivino


Отправлено Дядя Миша 12-04-2017 в 16:44:

гейтсеквенция это если лениво делать анимации

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Crystallize 12-04-2017 в 16:57:

Цитата:
Ghoul [BB] писал:
Кстати, а в ворованых сорцах второй беты нет этого кода для монстров? Или в хл2? Там же монстры на бегу стреляют...


ИРЛ никто на бегу не стреляет, я думаю.


Отправлено Ku2zoff 12-04-2017 в 17:59:

Цитата:
Дядя Миша писал:
В чём проблема сделать бегущих монстров, даже не имея на то достаточных анимаций?

Ну например в том, что придётся переписывать множество скедъюлей, ответственных за атаку. Потому что почти каждый из них начинается с TASK_STOP_MOVING. Ну это не проблема. Проблема в сочетании верхней и нижней анимации. Чтобы монстр вовремя переставал атаковать, или наоборот, вовремя переставал двигать руками и начинать стрелять или бить. Тут нужно придумать универсальные условия, работающие для всех монстров, и сделать грамотную переключалку на манер CBaseMonster::SetActivity.
Цитата:
Дядя Миша писал:
Вон боты бегают и стреляют.

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

Добавлено 13-04-2017 в 00:59:

Цитата:
Дядя Миша писал:
гейтсеквенция это если лениво делать анимации

Если даже на сорсе активно используется смешивание анимаций, и даже валвэ поленились заанимировать 100500 разных сочетаний в отдельные анимации, значит это бесполезная трата времени. Тем более для модмейкеров.


Отправлено Дядя Миша 12-04-2017 в 21:34:

Цитата:
Ku2zoff писал:
Ну например в том, что придётся переписывать множество скедъюлей, ответственных за атаку

Ну введи новый шедал TASK_RUN_SHOOT или что-то в этом роде.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Chyvachok 12-04-2017 в 22:17:

Насчет бегающих грантов, в Shaft их запилили: http://www.moddb.com/mods/shft-no-m...os/sneak-peak-3


Отправлено XaeroX 13-04-2017 в 02:01:

Цитата:
Crystallize писал:
ИРЛ никто на бегу не стреляет, я думаю.

Позволь нескромный вопрос. Ты в армии служил?

Добавлено 13-04-2017 в 09:01:

Цитата:
Chyvachok писал:
Насчет бегающих грантов, в Shaft их запилили

Ну прям классика: народу показали бегающих и стрейфящихся грантов, а все хвалят сраные VHS-эффекты.

__________________

xaerox on Vivino


Отправлено Crystallize 13-04-2017 в 03:28:

Цитата:
XaeroX писал:
Позволь нескромный вопрос. Ты в армии служил?

Нет. Ты служил?


Отправлено XaeroX 13-04-2017 в 04:06:

А я тут причём? Я глупости про стрельбу на форуме не пишу.

__________________

xaerox on Vivino


Отправлено Crystallize 13-04-2017 в 04:33:

XaeroX На каком основании ты считаешь это глупостями?


Отправлено Ghoul [BB] 13-04-2017 в 05:14:

Цитата:
Crystallize писал:
XaeroX На каком основании ты считаешь это глупостями?


На том, что ты начинаешь тут фуфлудить не по делу.
Здесь дискуссия не о том, стреляет кто-то ИРЛ на бегу или нет. Не о том, служил Ксер или ты в армии или нет. И даже не о том, сколько ты раз отжимаешься и подтягиваешься ли на первое солнышко. Мы тут обсуждаем не это.

Затем, что просто зайди в интернет, набери в браузере youtube.com и там вбей в поиск какие-нибудь ключевые фразы типа "тренировки солдат" и ты всё сам увидишь.

Потому что тебе должно быть стыдно после этого за свои вопросы.

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Временная зона GMT. Текущее время 17:16.
Показать все 232 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024