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

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Наши проекты (https://hlfx.ru/forum/forumdisplay.php?forumid=1)
-- Steam патч для Invasion (https://hlfx.ru/forum/showthread.php?threadid=5890)


Отправлено Ku2zoff 20-08-2022 в 17:01:

Half-Life Steam патч для Invasion

Те, кто внимательно читают форум, знают, что Invasion является одним из моих любимых модов. В своё время (2005 или чуть позже) я был очень восхищён этим модом: в него и качественную музыку завезли, и красивые декали, и ленсфлаеры, и прострелы стен, и даже отстреливание частей тел монстров. И субтитры ещё.
Когда его сорцы стали доступны, я сразу же поглядел всё, что меня давно интересовало. Ориентируясь на французский код, точнее, используя его примерно на 80%, я написал спрайтовые декали, что сохраняются и ходят через уровни. К этому времени у меня накопилось несколько своих наработок, которые народ видел только на видео в ютубе. И тогда я подумал, что неплохо бы их встроить в какой-нибудь известный мод для обкатки, чтобы норот оценил, как оно в игре.

Наконец-то руки дошли. Я начал ворошить сорцы стим-патча для Инвазион. Ну, мягко говоря, не айс. Одна из самых бросающихся в глаза фич - декали и партикли, закомменчена с пометкой "пофикшу позже". Что автор собрался фиксить, мне не совсем понятно, ведь оно работает ровно так, как позволяет голдсорс. Естественно, в патче прикручены клиентские эвенты для пушек, опять же непонятно зачем, ведь в моде нет мультиплеера. Ещё одна пакость в том, что автор выкинул фмод, заботливо прикрученный французами, и перевесил музыку на встроенный в движок плеер. Который невозбранно глушит треки после чейнджлевела или загрузки сейва. Вишенкой на торте является то, что иногда скрипты могут слегка ломаться: с оригинальными дллками учёный при нападении грантов на лабораторию на карте l1m1_a2 умирает сразу возле окна, а с "пофикшенными" может бегать по комнате и не умереть. Поначалу я думал, что это мой косяк, потому что применил фикс DispatchAnimEvents, чтобы его протестировать в реальной игре. Но нет, с готовыми дллками из патча то же самое.

Итак, что уже готово:

1. MP3-плеер на основе fmod для windows и linux. Умеет менять громкость, ставиться на паузу, сохранять имя трека и позицию воспроизведения в сейв, восстанавливать это при загрузке сейва, поддерживает текстовые плейлисты из Инвазиона.

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

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

4. Типа фикс DispatchAnimEvents. Дошёл до карты l2m3, заметил только один сломанный скрипт с учёным, упомянутый выше, и то не из-за этого, а вообще из-за нового сдк 2.4.

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

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


Отправлено Дядя Миша 20-08-2022 в 19:04:

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

__________________
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-08-2022 в 04:35:

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


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

Вырежи защиту от читёров эту дурацкую.

__________________
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-08-2022 в 08:45:

Дядя Миша а, ну это само собой. В документации нигде не написано ни про консольную команду test, ни про ключ командной строки -testmode. В юности это меня очень калило, некоторые места было трудно пройти, а при вводе читов мод вылетал. Вообще не понимаю, зачем это было нужно придумывать. В WON-халфе и так по-умолчанию консоль вообще не открывается, и ещё нужна команда sv_cheats и перезапуск карты. Защита в коде - это мелочи. Авторы TheGate пошли ещё дальше. Они разместили на каждой карте маленькую комнатку с триггером, который затемняет экран и пишет, что игрок читер. То есть, ходить между картами можно только через чейнджлевелы. Загрузить какую-то одну и протестить невозможно. Наверное это чтобы поиздеваться над игроками, потому что TheGate местами аццки сложный, сложнее Инвазиона. Но кинематографичный.


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

Цитата:
Ku2zoff писал:
То есть, ходить между картами можно только через чейнджлевелы

А команду changelevel точно так же можно вбить в консоль. Главное знать имя ландмарка.

__________________
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-08-2022 в 11:40:

Цитата:
Дядя Миша писал:
Главное знать имя ландмарка.

Откуда игрок его узнает?


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

В ксаше-можно сдампить entpatch и подглядеть

__________________
My Projects: download page

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

Цитата:

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


Отправлено XaeroX 21-08-2022 в 18:13:

Цитата:
Ku2zoff писал:
Вообще не понимаю, зачем это было нужно придумывать.

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

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

Добавлено 21-08-2022 в 14:13:

Цитата:
Дядя Миша писал:
В ксаше-можно сдампить entpatch и подглядеть

Или можно просто открыть bsp-файл в блокноте...

__________________

xaerox on Vivino


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

Цитата:
XaeroX писал:
Или можно просто открыть bsp-файл в блокноте...

Там же каша будет

__________________
My Projects: download page

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

Цитата:

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


Отправлено XaeroX 21-08-2022 в 19:42:

Дядя Миша
Почему? Лумп энтитей текстовый. Просто ищешь там поиском trigger_changelevel и смотришь поля map и landmark.

__________________

xaerox on Vivino


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

Потому что форматирование поедет. Неудобно в той каше ориентироваться.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Chyvachok 24-08-2022 в 20:19:

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


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


Отправлено Ku2zoff 29-08-2022 в 12:29:

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

Так вот. Документации нифига нету, а та что есть - она для сорса, есть отличия. Пришлось ковыряться самому. Как устроена локализация меню в стим-халфе? VGUI2 и GameUI парсят res файлы, а так же kb_act.lst, settings.scr, user.scr. Если лейбелы в res'ах, и строчки в lst и scr начинаются с #, то движок пытается искать их локализованные версии в файлах valve/resource/gameui_english.txt, valve/resource/valve_english.txt, invasion/resource/gameui_english.txt, invasion/resource/valve_english.txt, invasion/resource/invasion_english.txt. Такой вот зоопарк получается.
Причём, invasion/resource/invasion_english.txt не обязательно содержать все строчки, которые требует меню, достаточно только те, которых нет valve/resource/valve_english.txt. А вот если нет каких-то строчек в invasion/resource/gameui_english.txt, то их и не будет, поскольку грузится только один файл, в отличие от предыдущего случая, где грузятся оба. Неважно, в каком из файлов gameui_english.txt или имямода_english.txt находятся локализованные строчки, меню в любом случае их подхватит. Разве что я ещё не проверял названия глав, что пишутся в кач-ве комментария в сейв. Думаю, что разницы нет.

Короче говоря, сделать волшебные файлики локализации меню для каждого из официальных языков мода, а так же для русского и положить их в папку invasion/resource - не проблема. Проблема - переключать язык уже внутри игры, чтобы менялись тексты титров и vgui-менюшек. Можно завести под каждый из языков свою папку типа invasion_french, invasion_russian, invasion_german, и положить туда соответствующие titles.txt и texts.txt. Но мне это категорически не нравится. Гораздо удобнее сделать автоматическое переключение языка, ведь все нужные текстовики имеются. В случае с текстами ничего мудрить не надо, файлы грузятся самой клиенткой. С титрами - другое дело, надо либо использовать парсер-локализатор (вчера написал), либо загружать титры прямо на клиентке в обход движка (можно невозбранно позаимствовать из ксаша). Так или иначе, нужен способ узнать, какой язык установлен для халфы в стиме.

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


Отправлено FiEctro 29-08-2022 в 13:28:

Цитата:
Ku2zoff писал:
с оригинальными дллками учёный при нападении грантов на лабораторию на карте l1m1_a2 умирает сразу возле окна, а с "пофикшенными" может бегать по комнате и не умереть. Поначалу я думал, что это мой косяк, потому что применил фикс DispatchAnimEvents, чтобы его протестировать в реальной игре. Но нет, с готовыми дллками из патча то же самое.


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

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


Отправлено Ku2zoff 29-08-2022 в 15:25:

Цитата:
FiEctro писал:
Вот из-за подобных ошибок я в своё время и забросил этот мод.

Поломка этого скрипта не влияет на следующие за ним скрипты. Там, короче, такое дело: учёный говорит, что сейчас продемонстрирует работу телепорта, начинает играть музыка, учёный кричит
Цитата:
Attendez... Mais, qu'est ce que c'est ? Non ! Ce n'est pas possible...

После этого следует серия взрывов, в зал с телепортом спускаются несколько monster_grunt_repel. В зависимости от того, где стоит игрок, гранты ведут себя по-разному. Если игрок стоит в дальнем левом от входа углу, и они его гарантированно не видят, они расстреливают учёного, и он скриптово умирает. После, через разбитое окно в комнату управления залетает граната и взрывает дверь, игрок убегает. Если же гранты таки увидят игрока, они будут стрелять или кидать нескриптовые гранаты, если игрок спрячется. Вот тут-то и проблема. Меня несколько раз убивало именно нескриптовыми гранатами. Учёный может умереть по скрипту, может умереть от скриптовой гранаты, может не умереть. Но скриптовая граната должна залететь в комнату. И у меня ни разу не было такого, чтобы она не залетала и не выбивала дверь. Что 15 лет назад под WON халфой, что под всеми версиями стим-халфы.

Добавлено 29-08-2022 в 22:25:

Цитата:
FiEctro писал:
в купе с их божественным "античитом"

Вот это и у меня вызывало знатный баттхёрт. По крайней мере с оригинальными дллками в WON-версии ввод команд god и noclip вызывал вылет. А вот с пересобранными в актуальной стим-версии - нет. god и noclip прекрасно работают. impulse 101 не работает, пока не введёшь в консоли testmode. Несмотря на всю сложность, я-таки мод прошёл ещё очень давно. А вот TheGate без читов не смог пройти. Ну это вообще отдельная история.


Отправлено Ku2zoff 31-08-2022 в 20:30:

Цитата:
Ku2zoff писал:
Подскажите, есть ли какой-то экспорт, торчащий из стима, позволяющий узнать язык запущенной игры?

Разобрался сам. Нужно подгрузить в клиентку steam_api.dll, инициализировать интерфейс ISteamApps, а у этого интерфейса есть функция GetCurrentGameLanguage, которая возвращает char с платформенным именем языка. Ну то есть, нативные имена: Русский, Français, Deutsch и т.д., а платформенные: russian, french, german и т.д. Вальва чего-то намудрила с языками, и голдсорсовский ключ командной строки -language не юзается, если менять язык игры в настройках стима, а не прописывать принудительно в параметрах запуска. Пришлось геморроиться с поиском этого сраного ISteamApps, еле нашёл более-менее нормальный пример использования без лишнего мусора в CSBTE.
Кстати, в официальной поставке стимовской халфы есть озвучки для всех языков, кроме русского. Дискриминацыя! Проорал с китайской озвучки, звучит дико

Добавлено 01-09-2022 в 03:30:


Отправлено XaeroX 31-08-2022 в 20:32:

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

Ставь украинскую!

__________________

xaerox on Vivino


Отправлено Ku2zoff 31-08-2022 в 20:37:

XaeroX мовы вообще нет, даже текста. Двойная дискриминацыя!


Отправлено Ku2zoff 05-09-2022 в 08:03:

В процессе русификации текста я нашёл забавный недосмотр французов. Вот пример описания шрифтов из двух текстовых схем:

C++ Source Code:
1
// 640x480 text scheme file
2
 
3
// SchemeName defines a new scheme
4
SchemeName = "Basic Text"
5
 
6
// FontName is the string name of the font the scheme uses
7
FontName   = "Arial"
8
 
9
// FontSize defines the height of the font (the rest is derived from that)
10
FontSize   = 17
11
 
12
// FontWeight thickens the font (700 is bold, 1400 very bold)
13
FontWeight = 0
14
 
15
 
16
// Invasion radio
17
SchemeName = "Invasion Text"
18
FontName = "Arial"
19
FontSize = 17
20
FontWeight = 0
21
FgColor = "255 255 255 170"


C++ Source Code:
1
// 800x600 text scheme file
2
 
3
// COMMAND MENU TEXT
4
SchemeName = "CommandMenu Text"
5
FontName = "Arial"
6
FontSize = 17
7
FgColor = "255 170 0 255"
8
BgColor = "0 0 0 141"
9
FgColorArmed = "255 255 255 255"
10
BgColorArmed = "255 170 0 67"
11
 
12
 
13
// Invasion radio
14
SchemeName = "Invasion Text"
15
FontName = "Arial"
16
FontSize = 17
17
FontWeight = 0
18
FgColor = "255 255 255 170"


Как видите, в обоих случаях у одного из стандартных шрифтов и шрифта из Инвазиона одинаковые параметры FontName, FontSize и FontWeight. Это приводит к тому, что VGUI грузит из схемы первый по списку шрифт. Похоже, на латинице либо все нужные символы есть, либо просто не заметно, что некоторые из букв не такие. Символы расширенной латиницы не слишком отличаются от символов базовой латиницы. А вот когда я подкинул кириллический шрифт за авторством Витамина, сразу же вылезли кракозябры, поскольку я менял только Invasion Text для всех схем, но не Basic Text для 640 и CommandMenu Text для 800. Лечится проблема либо изменением FontSize для целевого (Invasion Text) шрифта, либо установкой ему приоритета FontWeight больше 0.

Добавлено 05-09-2022 в 15:03:

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


Временная зона GMT. Текущее время 15:01.
Показать все 20 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024