-
Число публикаций
3 438 -
Регистрация
-
Последнее посещение
-
Дней в топе
2 -
AMKoin
20,314 [Подарить AMKoin]
Закладки
-
Скриптование
Скриптование9 часов назад, Kirgudu сказал:Выше, кстати, есть опечатка: должно быть "se_stor.get(key, default)"
Да, виноват-с...
вы правы.
9 часов назад, Kirgudu сказал:проще, чем выискивать по всем скриптам
Так я же и не выискивал. Вообще понятия не имею, где у меня se_stor дергается. Не помню)
Просто сам se_stor заменил на такой.
----------------------------------------------------------------------------------------------------------- -- Заглушка для подключения всех скриптов, использующих se_stor Артоса, к SCRIPT_VARS_STORAGE движка OGSR ----------------------------------------------------------------------------------------------------------- function get(var_name, default) local s = get_stored_vars() if s[var_name] ~= nil then return s[var_name] end return default end function set(var_name, value, f_check) local s = get_stored_vars() s[var_name] = value end --~
Для движка OGSR, se_stor выглядит вот так
Это на всякий случай, если кто-то будет заморачиваться зачем-то установкой модуля se_stor на моды на этом движке.
Глобальные GetVar, SetVar, etc... на основе этих двух функций тоже дописать можно, при желании.
-
Скриптование
Скриптование@Stalkersof Бро, не советую пользоваться пстором, у движка есть некое хранилище где можешь что то сохранять.
Модуль
local xvars = get_stored_vars() --------------| Публичный интерфейс модуля |----------------------------------- function unpack_value(value) if type(value) == "userdata" then value = value(true) end return value end function value_exist(name) return xvars[name] ~= nil end function set_value(name, value) xvars[name] = value end function get_value(name, default_value) local value = xvars[name] if value == nil then ASSERT(default_value ~= nil, "get_value: neither value '%s' is exist, nor default value is provided", name) set_value(name, default_value) return default_value end return unpack_value(value) end -- в случае, если не существует, просто вернуть nil function get_value_safe(name) return unpack_value(xvars[name]) end function remove_value(name) xvars[name] = nil end function set_or_remove_value(name, value) if value then set_value(name, value) else remove_value(name) end end function get_all_vars() return xvars() end
-
Скриптование
Скриптование@UriZzz, предлагаю борьбу с невнимательностью и fps продолжить дальше и поднять не невиданный доселе уровень, увеличив твою опытность ещё больше.
Смотри.
Функция у тебя с говорящим названием, sleep(obj), предназначена теоретически только для обработки нажатия на спальный мешок. Не знаю, откуда и как она вызывается, но если проверка на то, что ты используешь именно спальник, до вызова функции есть, тогда условие if obj:section() == "sleep_bag" then является лишним.
Но скорее всего такую проверку ты до функции не делаешь, а просто всегда дёргаешь её в коллбэке на дроп (ТЧ) или использование предмета (ЧН, ЗП). Примем это допущение, и тогда возникает другой момент.
Что будет, если вокруг тебя на расстоянии 40 метров нет ни одного врага? А если ты съел колбасу? Правильно, проверка на врага сработает, а поскольку рядом никого нет, пройдёт по полному циклу, по всем 65 с лишним тысячам потенциальных объектов. И в результате ты, может, и избавился от тормозов при выдаче сообщения, зато приобрёл их при любом использовании любого предмета (если только ты не ставишь целью кушать, применять антирад, использовать бинты и аптечки и т. д. также только в спокойном месте).
Выходом является перемещение поиска врагов после условия if obj:section() == "sleep_bag" then, так чтобы цикл запускался только если ты используешь нужный предмет.
И последнее, чисто перфекционистское замечание. Если всё, что делает функция, это проверяет, можешь ли ты использовать спальник, и показывает нужный диалог или выдаёт сообщение, тогда нет нужды заморачиваться с лишними брейками и переменными. Можно выдать сообщение и сразу выйти из функции (return сработает как и break, прервёт выполнение цикла, но вдобавок ещё и обеспечит выход), а меню будет показано за пределами цикла, если всё хорошо, и прерывания не случилось.
Самое время проиллюстрировать вышесказанное.
Скрытый текстfunction sleep(obj) -- мы ещё и условие проверки перевернём: если сработал не спальник, сразу выйдем из функции - дальнейшая портянка нас не интересует if obj:section() ~= "sleep_bag" then return end -- не спальник --> выход -- ogse.spawn_item_in_inv("sleep_bag") -- по-хорошему, спавнить новый предмет лучше сразу, чем разбивать на 2 части, при выдаче сообщения и, видимо, где-то в недрах класса спальника for k=0,65534 do local m_obj = level.object_by_id(k) -- здесь проверку на m_obj прикрутим спереди к остальным; все критерии срабатывают последовательно, так что ошибки не будет -- это позволит нам не множить "if" и не увеличивать кол-во уровней вложенности условий if m_obj and ((IsStalker(m_obj) and ogse.get_npc_relation(m_obj,db.actor)=="enemy") or IsMonster(m_obj)) and m_obj:position():distance_to(db.actor:position()) < 40 and m_obj:see(db.actor) then ogse.send_tip("Не получится заснуть пока вокруг шляются всякие", "Меченый", 0, 10, "mecheny") ogse.spawn_item_in_inv("sleep_bag") -- если не заспавнили выше return --> и сразу выход из цикла и функции end end -- если всё хорошо и цикл врагов не выявил, ничто больше не мешает показать меню спальника local hud = sleep_ui(get_hud()) -- указываем на class "sleep_ui" (CUIScriptWnd) level.start_stop_menu(hud, true) -- открываем меню end
Результат: избавились от лишних времязатратных действий, укоротили (если стереть мои комментарии) код вдвое, а также малость улучшили читабельность.
P.S. При желании ты с Lua разберёшься, я уверен. С СДК разобрался, значит и со скриптами сможешь.
Надо лишь пройти чуть дальше, чем "работает - и ладно".
@Марка демченков, попробуй это:
exit()
-
Проблема последнего дня месяца
СкриптованиеВампир35
1. Никак не получить, т.к. АМК-таймеры не имеют соответствующего интерфейса по доступу к ним. Ну а кто патался написать ... вероятно понимал, что проще и лучше написать свои таймеры заново, чем вставлять костыли "одряхлевшему" коду.
2. А не слышал о проблеме 2000-го года? Того же порядка, т.е. в принятом формате параметра не хватает разрядности и в какой-то момент наступает "переполнение"/сброс.
В АМК-тайрах используется 32-х битный таймер game.time() и кол-во разрядов хватает на ... немного меньше месяца игрового времени. Далее наступает обнуление бахового времени и все "новые" таймеры будут заведомо с меньшим временем, чем те, которые были до "часа Х".
Лечить таймеры в общем-то бессмысленно, т.к. эта ошибка присуща не только им а имеется во многих кодах игры и следует глобально поменять использование game.time() на 64-х битный вариант game.CTime()
-
Методы управления погодой OGSR
[SoC] Ковыряемся в файлах2 hours ago, UriZzz said:что это за метод level.set_weather_next? В чём его смысл? Чем он разнится с level.set_weather?
Попробую вспомнить. На всякий случай начнем с начала, как собственно погода выбирается. Допустим у нас имеется погода с названием "clear". Она состоим из нескольких секций с описанием погоды. Каждая секция описывает погоду в указанное время. Время - это имя секции. В движке имеется указание на секцию для текущего времени и следующую за ней. Назовем их C0 и C1. В процессе нахождения на локации движок плавно меняет погоду от C0 к C1. Когда наступает, время соответствующее погоде C1, текущаяя погода полностью соответствует той, что описана в секции C1 и движок делает C0 = C1 и C1 = следующаяя секция погоды, которая следует за C1 и так далее, до самого конце секции, а потом переходит к началу секции и так по кругу бесконечно. Так вот, set_weather( "clear", true ) устанавливает C0 и C1 из погоды "clear" в соответствии с текущим временем. set_weather( "clear" ) просто устанавливает из какой погоды будут браться следующие C1 и не меняет текущую погоду. Т.е. если мы сделаем set_weather( "cloudy" ), то у нас будет плавное изменение погоды "clear" от С0 к C1, и при наступлении времени, соответствующего C1, погода C1 перейдет в C0, а следующий C1 уже будет выбираться не из погоды "clear", а из погоды "cloudy". Но с динамической погодой возможна ситуация, когда у нас в 12:00 погода "clear", а в 13:00 погода "cloudy". Т.е. нам нужно, вот в этот данный момент, что бы C0 было из "clear", а C1 - из "cloudy". Именно это и делает set_weather_next( "cloudy" ), устанавливает C1 из указанной погоды, т.е. из "cloudy" и ничего более. Т.е. для нашего случая нам нужна цепочка из
-- установить C0 и С1 из погоды "clear" level.set_weather( "clear", true ) -- т.к. начиная с C1 у нас должна действовать погода "cloudy", установим C1 из неё level.set_weather_next( "cloudy" ) -- и далее, после C1 тоже должна действовать погода "cloudy" level.set_weather( "cloudy" )
-
фикс карты Ростока от @naxac
[SoC] Ковыряемся в файлахВ game_maps_single.ltx:
[L05_bar] texture = map\map_bar bound_rect = -512.000, -512.030, 512.000, 512.001 global_rect = 258.0,1414.0,556.0,1712 weathers = bar ;music_tracks = l05_bar_musics ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [L06_rostok] texture = map\map_rostok bound_rect = -512.000, -512.030, 512.000, 512.001 global_rect = 258.0,1414.0,556.0,1712 weathers = rostok music_tracks = l06_rostok_musics
И l06_rostok переименован из "Дикой Территории" в "Завод Росток".
Вот и весь фикс.
-
модули Артоса
Сборочный цехНавеяно помощью @Romz по прикручиванию se_stor к ЗП, результатом чего стал его объединённый комплект скриптов. Он всем хорош, однако, во-первых, предназначен только для ЗП, а во-вторых, предлагает подключение, например, m_timers даже в том случае, если таймеры не нужны, а нужно только универсальное хранилище.
Здесь я хочу выложить немного другой комплект модулей @Artos'a, содержащий не все модули сразу, а каждый модуль по отдельности. При этом:
- реализована полная совместимость модулей между собой (можно интегрировать их в мод в любых необходимых сочетаниях);
- подключение и работа всех модулей протестированы во всех частях игры;
- для модуля универсального хранилища (se_stor) добавлено 3 разных примера подключения - для ТЧ, ЧН и ЗП соответственно. Примеры эти 100% рабочие, не требуют никакой доработки напильником. Достаточно в нужных местах добавить/закомментировать указанные куски кода.
- модуль se_stor доработан так, что теперь он позволяет не только сохранять в чанках те внешние модули, у которых есть публичные методы save/load, но и указывать кастомные названия соответствующих методов. Таким образом, теперь можно больше данных, сохраняемых в оригинале в нет-пакете главного героя, перенести в универсальное хранилище. В добавленных примерах подключения это отражено.
Состав:
lua_helper - различные часто употребляемые и/или полезные функции которые могут использоваться модмейкерами.
m_netpk - интерфейс чтения/записи net-пакетов.
m_timers - менеджер универсальных таймеров.
se_stor - универсальное хранилище данных произвольного размера.
Комплект мультиплатформенных модулей для S.T.A.L.K.E.R. SoC/CS/CoP
Автор: @Artos (+ по рекурсии те авторы, работы которых Artos использовал, см. readme к соотв. модулям)
Доработка модулей и синхронизация их между собой: @Kirgudu
Исправление найденных в некоторых модулях ошибок: @Charsi, @Kirgudu, @naxac, @dsh, ...
Состав:
lua_helper - различные часто употребляемые и/или полезные функции которые могут использоваться модмейкерами.
m_netpk - интерфейс чтения/записи net-пакетов.
m_timers - менеджер универсальных таймеров.
se_stor - универсальное хранилище данных произвольного размера.
Добавляемые в оригинальные файлы игры фрагменты кода, а также наименования некоторых внутренних функций модулей, используемых в других местах, приведены к единому стандарту.
Таким образом, подключать модули можно по отдельности или в любых сочетаниях, необходимых в конкретном случае, без опасений насчёт совместимости.
Подключение всех модулей и их работа проверены мной во всех частях игры.
В общий сборник включён использовавшийся для этого дополнительный скрипт (test_modules.script).
Для разового тестирования можно добавить его вызов, например, на кнопку меню или при первом апдейте актора.
Пример (первый апдейт актора, проверка подключения всех четырёх модулей), bind_stalker.script:
function actor_binder:update(delta) --/ ... все строки функции if not test_modules_executed and test_modules and type(test_modules.execute) == 'function' and device().precache_frame < 2 then test_modules.execute("lua_helper", "m_netpk", "se_stor", "m_timers") test_modules_executed = true end end
Результат в логе, если все модули подключены правильно:
test_modules::>[lua_helper]_success! test_modules::>[lua_extension]_success! test_modules::>[m_netpk]_success! test_modules::>[se_stor]_success! test_modules::>[m_timers]_success!
lua_helper - https://yadi.sk/d/1_J1HVZsu7Jgy, обновлено 08.02.2025
m_netpk - https://yadi.sk/d/GtYsSbjnxqdtp, обновлено 08.02.2025
se_stor - https://yadi.sk/d/a38PlQdju7Jhr, обновлено 10.08.2016
m_timers - https://yadi.sk/d/FWJkTnAMu7Jhg, обновлено 08.02.2025
Общий комплект + скрипт для тестирования - https://yadi.sk/d/p69RQkBMu7JgR, обновлено 08.02.2025
-
Правка последнего дня месяца
[SoC] Ковыряемся в файлахБерем, и ВЕЗДЕ меняем. Либо на game.CTime(), либо сохранения делаем как-то типа вот так:
local n = 0 -- корректировка и сохранение времени for k, v in pairs( tm_sec ) do n = n + 1 end pk:w_u32( n ) for k, v in pairs( tm_sec ) do pk:w_stringZ( k ); pk:w_float( v - game_time_sec ) end n = 0 for k, v in pairs( tm_ms ) do n = n + 1 end pk:w_u32( n ) for k, v in pairs( tm_ms ) do pk:w_stringZ( k ); pk:w_float( v - game_time_ms ) end
преимущества последнего варианта - меньший объем сэйва, быстрее все вычисления, недостаток - кто-то из принципа может проторчать на одной локации не сохраняясь до 35 мая.
-
СДК от яра
[SoC] Вопросы по SDKX-Ray SDK от Yara. Это собранный из исходников SDK 0.4, в котором имеются десятки исправлений и улучшений. Прочитав чейндж-лист вывод один:
Инфа взята тут (оригинальный пост)
Скрытый текст*********************************************************************
Для всех редакторов включена поддержка LARGEADDRESSAWARE
\editors\name_editor\name_editor.bpr, ... LFLAGS ... -GF:LARGEADDRESSAWARE- Исправлены диалоговые окна в редакторах под win7 / win10
- Поправлен экспорт DM (AE)
- При экспорте дописывать в лог имя модели / анимации (AE)
- Отключение оптимизации скелетных мешей (AE)
- Теперь при изменении параметров костей обновляются только свойства, список не обновляется, дабы не сворачивались кости ниже выделенной (AE)
- Загрузка / сохранение списка костей в bone parts (AE)
- Поддержка drag'n'drop в АЕ
- Флаг force 16bit motion (editor preferences > tools > motion export)
- Не переименовать звуки в ~name.ogg при синхронизации
- fixed image editor
- Писать имя surface в лог, если назначены несовместимые шейдеры
- Сохранять build_details.dds как DXT3
- Увеличение максимального размера build_details.dds до 4096x4096
- Увеличение максимального размера level_lods.dds до 4096x4096
- Исправлена ошибка, если выбрать <none> при выборе группы
- THM для групп теперь сохраняются в папку groups, а не в objects
- Замена простого сообщения в лог на окошко с ошибкой, при попытке добавить неправильный детальный объект
- Возможность регулировать дисперсию солнца в настройках сцены, чтобы заработали мягкие тени
- Сверх качество хемисферы в настройках сцены (hemisphere quality: 4)
- Правка ошибки при нажатии на пустоту в режиме Attach Object
- Защита от пустых параметров $spawn, они иногда могут привести к ошибкам
- Показывать имя файла объекта в сообщении, если тот не найден
- Число одновременно добавляемых объектов (до 1024, в списках, где надо ставить галки) для детальных объектов в object list - 100
- Снятние ограничени на количество валлмарков
- Текстовый редактор для снап-листа
- Не очищать snap list при выполнении Clear AI Map
- Отдельная кнопка для экспорта level.snd_env
- Форму со списком детальных объектов теперь можно растягивать в ширину, также можно регулировать ширину левой и правой её части.
- Высота элементов из списка регулируется колёсиком мышки.
- Сообщение вместо окна с ошибкой, при отсутствующем ANM в поле Motion (zones, heli)
- Окно с ошибкой при неверной спаун-секции
- LE при построении уровня (Compile->Build) не удаляет маленькие полигоны
- Отключение оптимизации объектов при загрузке
- Теперь масштаб объекта учитывается при проверке invalid faces
- Увеличена точность позиционирования объектов до 4 знаков после запятой. (AE, LE)
- Правка генератора разбиваемых стёкол
- Автофокусировка на некоторые окошки со списками
- Раскрывать весь свиток (список костей и т.п.) по клику с зажатой клавишей ctrl
- Правка ошибки в случае установки в ноль количества запоминаемых последних файлов (recent count)
- В режиме вращение объектов добавлено фиксированное вращение (90 градусов) с зажатым ctrl
- Сохранение вращения при перемещении объекта с привязкой Normal Aligment (from cop src)
- Убраны сообщения, типа Please notify AlexMX...
- Увеличен лимит по скорости (до 1000) в редакторах
- Увеличен лимит pixel per meter (до 100) в настройках сцены
- Не выводить окошко с подтверждением после создания sky small
- Cохранять параметр Depth Tolerance (box pick in LE settings)
- Флажок вкл / выкл для отрисовки нод при генерации ИИ-сетки (при выкл, процесс идёт быстрей) (у себя ускорения не заметил)
- Продолжать проигрывать анимацию частиц после изменения параметров, если была нажата кнопка Play (PE)
- Более позиция выделения в Object List не сбрасывается (LE)
- Разблокирована опция hemisphere control (по-умолчанию всегда hemi) (для ценителей статики)
*********************************************************************
Добавлены ключи для запуска редакторов:
-no_warn_fv
(отключает сообщения в логе: CSceneObject: 'file_name' different file version!)-no_warn_ft
(отключает сообщения в логе: Can't find texture 'texture_name')Скрытый текстУстановить оригинальный сдк 0.4 -> из архива скопировать папку bins и батники для запуска, в папку сдк (\level_editor)
Скачать: https://yadi.sk/d/YdtenRY9ghNnaw
Приправляется все это х64 компиляторами от @hi_flyer. Скажу сразу: присущи ли им баги как у компиляторов @KD87 я не в курсе, но вроде как тут все работает нормально, без засветов лмапов и прочих страданий. (линк на ориг)
ЦитатаСобрал свой вариант х64 (ТЧ) компиляторов xrLC и xrDO.
xrDO использует до 8 потоков, xrLC до 11 потоков на стадии просчета лайтмапов, на процессорах с количеством потоков < 11 может работать медленнее.
Также в наличии для xrLC новые ключи на отключение просчета лайтмапа террейна, источников света hemi и sunСсылка: https://yadi.sk/d/ZeqjyINRDndl_w
И немного дополненный вариант компиляторов от @macron, чутка прибрано + инструкция. (линк на ориг)ЦитатаНебольшое обновление х64 (ТЧ) компиляторов:
-добавлена инструкция.
-xrLC: исправлен двойной вывод ошибок о ненайденных файлах в лог. Ошибки выделяются пустыми строчками.Ссылка: https://yadi.sk/d/MR5apdQmq3dLpw
Обновленный XrAI — сообщением выше.
-
Сборка от Adm-RAL для FM
S.T.A.L.K.E.R. F.M.Тут что-то совершенно случайно собралось...
За день.
Если честно, то я до сих пор не понимаю - с какого вообще я зацепился за...? Может когда услышал, что есть мод где ГГ зовут Леченный!? По началу даже хотел нахамил автору за такое, но уже поздно... теперь...
Начну, пожалуй...
Скрытый текст1. Скачиваем и ставим:
S.T.A.L.K.E.R. SHOC 1.0006 2020 Adm-RAL Edition
- это Сталкер Тени Чернобыля 1.0006 с пропатченным движком от Macron. При этом, в папке bin есть архивы с оригинальными файлами движка. Очень удобно на мой взгляд. Думаю, любой разберётся как этим пользоваться.
- все файлы чистого ТЧ 1.0006 перепакованы в 3 игровых архива.
- игровой архив gamedata.db6_10006_Weather_Patch_Adm-RAL содержим мою правку смоллов скайкубов, чтобы от кривых теней ПЫС глаза не вытекали. Можете его спокойно грохнуть, если хотите.
- в игре оставлены родные шейдеры 1.0006. Хотя, по началу я собирался сразу включить самые продвинутые шейдеры чистого ТЧ, но потом передумал и оставил их для самостоятельного подключения игроками по желанию.
- в игре предустановлен ReShade 2.0 с идеальными на мой взгляд настройками.
- в главной папке с игрой есть папка tools.
- в этой папке есть несколько инструментов для игры, в том числе шейдеры Е3 для самостоятельной установки в папку gamedata. Однако, я забыл добавить к этим шейдерам нужные текстуры, вот они. Их нужно положить в папку gamedata, чтобы при установке шейдеров Е3 не было вылетов. При установке мода S.T.A.L.K.E.R. The Fundamental Mode - S.G.C. Edition этих манипуляций не потребуется!
- в папке tools есть также: ReShade, конвертер Бардака для распаковки/запаковки игровых архивов, патчер Макрона для 1.0006, патчер движка для увеличения использования оперативки (пользоваться им не нужно, всё уже сделано).
- в эту игру можно играть без всяких модов, как и ставить сверху всякие моды для ТЧ 1.0006. Однако, в некоторых случаях всё-же могут потребоваться минимальные знания игры для установки.
Установка:
- скачать все архивы (ОБЯЗАТЕЛЬНО ПО ОДНОМУ) в одну папку.
- запустить exe файл и указать путь для установки игры, включая само желаемое имя папки игры, типа - C:\GAMES\S.T.A.L.K.E.R. FM
- запустить распаковку.
- запускать игру ТОЛЬКО файлом ! START GAME.bat из корневой папки игры.
2. Скачиваем и ставим:
S.T.A.L.K.E.R. The Fundamental Mode - S.G.C. Edition
S.T.A.L.K.E.R. The Fundamental Mode - S.G.C. Edition - Patch
(на будущее для патчей)
ВИДОСИКИ:
Порезал сосуна на шашлык, почти...
- это ПОЛНЫЙ комплект мода, включает в себя вообще ВСЁ! И содержит в себе:
- gamedata.dbx_SGC_150_Levels_CrommCruac - геометрия локаций от CrommCruac (Autumn Aurora, AtmosFear, Absolute Nature). В архиве ТОЛЬКО геометрия локаций!
- gamedata.dbx_SGC_225_Shaders_E3 - полный комплект самых продвинутых шейдеров для чистого ТЧ. Конфигурационный файл шейдеров найдёте в папке gamedata. Возле конфигурационного файла найдёте два архива - с выкл. лучами и с вкл. лучами. Изначально лучи выключены, т.к. это редкостная дрянь, которая губит насмерть весь графоуни, но можете поприкалываться и поиграть с лучами...
- gamedata.dbx_SGC_300_textures_01, gamedata.dbx_SGC_300_textures_02 - сборка простых текстур, которые я накидываю на всё.
- gamedata.dbx_SGC_325_textures_tricky - сборка хитрых эксклюзивных моих текстур, которые отменяют некоторые графические проблемы Сталкера или просто обязательно должны быть исполнены в определённом виде, качестве и формате.
- gamedata.dbx_SGC_450_Summer - летний сезон в зоне. Будет работать только если отменить осенний сезон, переместив куда-нибудь игровой архив описанный ниже.
- gamedata.dbx_SGC_475_Autumn - осенний сезон. Предустановлен в моде. Если убрать этот игровой архив из папки с игрой, то включится летний сезон!
- gamedata.dbx_SGC_900_Torch - это самый важный игровой архив! Он содержит в себе тусклый ФОНАРИК для ГГ!!!
- gamedata.dbz_Buusty_Addon - мод The Fundamental Mode + оружейный аддон от Buusty.
- gamedata.dbz_Buusty_Weather - билдовская погода от Buusty.
- gamedata.dbz_Buusty_Weather_Patch_Adm-RAL - мой фикс билдовской погоды от Buusty. Исправлены смоллы, чтобы были более мягкие тени.
- gamedata.dbz_Update_FM - апдейт для The Fundamental Mode и его адаптации от Buusty.
- gamedata.dbz_zPatch_Adm-RAL - мой патч для ГГ. Исправлены высоты камеры во всех трёх положениях ГГ. Также заменяет текстуру рук ГГ из мода АА2 с правильными проф. бампами (и вообще, закинул комплект одних перчаток для почти всех типов рук ТЧ). И, до кучи, я заменил (или переделал) все прицельные сетки для мода. В соответствии с моим виденьем, так-сказать...
- пора кончать! Т.е. заканчивать...
Установка:
- скачать все архивы (ОБЯЗАТЕЛЬНО ПО ОДНОМУ) в одну папку.
- запустить exe файл и указать путь для установки мода, т.е. главную папку игры, типа - C:\GAMES\S.T.A.L.K.E.R. FM
- запустить распаковку.
- запускать игру ТОЛЬКО файлом ! START GAME.bat из корневой папки игры.
Игра может работать ТОЛЬКО на ПОЛНОЙ ДИНАМИКЕ!!! Даже не пытайтесь играть в это на статике!
Удачной игры!
Если-чё вопросы... Задавайте.
P.S.
Ну, терь можно и погамать малёху... Попробую пройти. А потом опять в яму!
-
Ссылка на Дискорд ПП
Prosectors Project32 минуты назад, NOapostoL сказал:Ссылка, кстати, была опубликована тут же
Продублирую ее- https://discord.gg/YrW38Tc