Перейти к содержанию

Активность

Лента обновляется автоматически

  1. Сегодня
  2. ещё забавно, но факт что в стиме при скачивании En, Fr или De версий нет констракшн сета 😃 совсем безолаберность upd Construction Set и всякие источники показывают только строковое значение ID для расы = Argonian. Совершенно бесполезно. Надо искать числовое значение внутри движка и вновь погружаюсь в декомпиляторы) upd из строчек: 007af2a4 Unable to find race id "%s" in script %s. "Unable to find race id \"%s\" in script %s." и 004fde03 PUSH s_Unable_to_find_race_id_"%s"_in_s_007af2a4 DATA прихожу к выводу, что Race id в "скриптах" передаётся как строка ("%s") (что грустно), а не число, Construction Set говорит, что id аргониан = Argonian, которую нещадно переводит наша (да и вообще любая) локализация. Надежда на то, что Движок анимаций использует числа, а не строку, продолжаю поиски. Можно конечно задать параметр, чтобы пеередавалось не как строка.....но хз чем это будет грозить в рамках всего движка (тотальным ахтунгом, потому что все функции ждут строку, а не число int) upd (далее пойдёт немного хаотичное повествование, т.к. автор поста выпил вина 😄 ) что было выявлено посредством шаманства: 0x004C2B40 - 0x004C3090 - это ОДНА ФУНКЦИЯ выбора анимации MOV EAX - загрузка пути анимации в регистр PUSH EAX - передача пути в функцию загрузки base_animKnA.nif vs argonian_swimKnA.nif - два варианта анимации! Вывод в функции происходит ветвление: Если аргонианин → argonian_swimKnA.nif Если другая раса → base_animKnA.nif А ещё я нашёл ЧИСЛОВУЮ (ура) проверку: dec eax ; jz short loc_4C2B47 ; (Если EAX == 2 → зелёная ветка (аргониане)) Вывод EAX содержит числовой race_id. Теперь смотрим на код в декомпиляторе: из которого делаю выводы: if ( v20 ) { if ( v20 == 1 ) { v24 = aBaseAnimkna1st;} else if ( v20 == 2 ){ v24 = aArgonianSwimkn;} else { v24 = 0; } } v24 = aBaseAnimkna1st; // "base_animkna1st.nif" v24 = aArgonianSwimkn; // "argonian_swimKnA.nif" - аргониане получается переменная v20 v20 = 0 → base_animkna.nif (стандартная анимация) v20 = 1 → base_animkna1st.nif (анимация от первого лица) v20 = 2 → argonian_swimKnA.nif (специальная анимация аргониан) НО где же определяется эта переменная? Смотрим выше: v20 = 0; for ( m = 0; ; v20 = m ) {... огромный блок кода ... result = ++m; if ( m >= 3 ) break; } Вывод v20 (m) проходит значения 0, 1, 2, v20 = 2 соответствует аргонианам, Значит race_id аргониан = 2. Нам надо перехватить в момент проверки когда v20 = 2 и обеспечить загрузку правильной анимации.
  3. хоть я уже и перенёс фикс по "названию расы в игре", ваша мысль просто бриллиантовая! я переделаю этот фикс, сделаю его изначально "универсальным" для всех языков, которые НЕ английские! тем более у нас есть уже явный пример от Angel Death в файле items_info.cpp. Он использует сравнение по ID типа предмета (0x4f4d4d41 = 'AMMO'), а не по строковому имени! Это именно тот подход, который нужен для аргониан!
  4. и т.к. в Angel.ini будет прям очень много информации, соответственно скорее всего сам файл Angel.ini будет разделён на разные версии Angel_eng.ini Angel_rus.ini Angel_fr.ini и так далее. В каждом из инишников будет описание как на родном для локали языке, так и на английском. Где "особые" уникальные фиксы будут описываться подробнее (пример: почему его нет в другой локали, а в этой он есть). И сама структура инишников будет переделана - сначала будут идти общие фиксы, которые необходимы всем локалям, а потом будут идти уже узконаправленные фиксы для определённой локали.
  5. Ох даже так? ну в любом случае этот фикс пока направлен на русскую локаль, пока в text.dll нет поддержки польского языка (хотя их Morrowind.exe очень близок к нашему, хоть и базируется на GOTY edition издании, алфавит сродни нашему ) Я добавлю этот алфавит тоже, после внедрения кодировки UTF-8. Будет добавлен блок для исправления польских багов в Angel.ini (если есть какие-то специфичные). А шаблон исправления будет взят с исправления русских фиксов. Сейчас фокусируюсь именно на русской локали, которая даст уже шаблоны на каждый похожий баг 😃 С китайскими иероглифами будет сложнее там вроде 80к иероглифов 😄 определенно нужна будет кодировка UTF-8 чтобы сие чудо внедрить. Сами образы китайской и польской версий у меня есть. Со стима можн овыдернуть Morrowind.exe FR и DE. Про другие версии я даже не знал. Но определенно если ест ькакая-то локализация морровинда - её словарь должен быть в text.dll Что касается De-FR да, в них присутствует этот баг по плаванию аргониан тоже (ох уж это наплевательское отношение беседки к другим языкам). Я добавлю отдельные фиксы позже, которые будут подключаться в соответствующей языковой локали, с выбором фикса вкл/выкл. Т.е. помимо EnableRussianLocalization=1 появятся ещё и EnableFranceLocalization=1, EnableDeutchLocalization=1 и прочие. Сначала надо разобраться с русской локалью, создать шаблоны для фиксов при других локалях. А так-же помимо [Rules_only_for_Russian_version] будут Rules_only_for_France_version и так далее. Работы много, но мы её сделаем 😃 upd перечитал ваше сообщение второй раз. Действительно, проверки должны идти не по названию насы в игре, а по ID расы. Вы открыли мне глаза) зачем плодить эти фиксы, если можно сделать один универсальный.
  6. Насколько я помню, для плаванья аргонцев движок игры проверяет не ID расы, а ее название, которое отличается для других языков: EN: Argonian DE: Argonier ES: Argoniano FR: Argonien HU: Argóniai IT: Argoniano PL: Argonian PT: Argonianos RU: Аргонианин А у китайского шрифт Win32!!! Фиксить нужно проверку не на название, а на ID расы, которая одинакова для всех языков. Соответственно это исправление должно быть в MCP.
  7. нашёл функцию в движке FUN_0048b000, которая отвечает за обработку всех следующих ошибок: "Invalid pointer found in TES 'lightSounds' list!" "Invalid REFR pointer found in TES 'lightSounds' list!" "Invalid REFR pointer found in TES 'tmpSounds' list!" "Invalid REFR pointer found in TES 'sounds' list!" "Trying to AddTmpSound with invalid reference!" буду препарировать данную функцию, увеличивать буфер, а точнее сделать динамический буфер, дабы не занимать места больше чем нужно.
  8. Я обнаружил "молчаливый фикс" в MCP для русской локализации, о котором в принципе не пишется в логе, хотя этот фикс ОЧЕНЬ важен. Было: Стало: Фикс из категории БУФЕРОВ И БЕЗОПАСНОСТИ. Предположение: Фикс переполнения буферов в системе обработки ошибок звуковой подсистемы Morrowind. Я фиксил уже расширение консоли по переполнению буфера. Этот же фикс прорабатывает систему буферов по звукам. Проблема: Слишком длинные сообщения об ошибках в английской версии В русской локализации эти строки становятся еще длиннее из-за кириллицы Приводит к переполнению буферов и возможным сбоям Что делает MCP? Он укорачивает строки ошибок, чтобы избежать переполнения., заменяет list на l. 0x00 00 80 3F - скорее всего, padding или служебные данные. Это довольно важный фикс безопасности, предотвращающий потенциальные сбои при работе со звуковой системой в русской локализации. НО переносить его в таком виде - кощунство. Я буду "забивать гвозди микроскопом". Надо использовать text.dll в полной мере. Мы увеличим буфер для обработки такого типа ошибок (как я сделал фикс по переполнению буфера расширения консоли).
  9. Фикс Анимации плавания успешно перенесён! Теперь он не просто меняет строку с Argonian на Аргонианин, а сама проверка расы должна работать с двумя названиями: как Argonian, так и Аргонианин ! 😊 Полный отчёт сделаю как только перенесу остальные фиксы для русской локализации: фикс меню создания заклинаний и фикс окошка при повышении уровня.
  10. Я имею в виду, что я не хочу (да и не имею морального права) просто молчаливо переносить их патчи. В логах будут прописаны любые разработчики, чьи творения переносятся на уровень ядра. todo: Возможно чуть позже создам отдельный лог к логу первого вдоха (дабы не загружать второй), будет лог по разработчикам (чьи патчи были включены при запуске), где будут прописываться Имена разработчиков и ссылки на оригинальные творения. А пользователи, кто подкинул идею по модернизации будут упомянуты. Например Siberian Crab подсказал идею сделать клавишу смены раскладки не статичной, что считаю тоже немаловажным для упоминания.
  11. СПАСИБО! 🤝🥳 А чтобы у пользователей не было путаницы, в логе первого вдоха 00_text_dll_first_light.log, при подключении фиксов, будет чётко прописано следующее (Сама надпись уже реализована, просто фикс настраиваю, чтобы он ничего лишнего не менял): Т.е. любые импортированные на уровень движка патчи из MCP будут иметь чёткое описание, что это патч из MCP от тех же разработчиков, просто на уровне ядра игры. 😃
  12. Я принял, выглядит достойной задачей, будем способствовать.
  13. Текущая подцель — не изменять рабочую версию исправления, а сделать так, чтобы text.dll (русская локализация в частности) в целом не ломала движок. В общей идеологии MCP и text.dll работают параллельно, создать систему, где все фиксы работают в гармонии, Заменить "сборную солянку" из утилит на "швейцарский армейский нож" (я не про фиксы по типу зачарования стрел, ношения перчаток вместе с наручами и так далее). Чинить не следствия неправильной работы text.dll, а саму неправильную работу text.dll и не снаружи меняя байты памяти, а изнутри, не изменяя morrowind.exe вообще, как часть игрового процесса. На примере фикса плавания аргониан он будет не просто менять строку, а интегрируется в систему локализации, как это было с фиксом по повышению уровня. Модульность и гибкость. Сейчас в MCP как - всё или ничего, либо 3 фикса разом, либо 0. Я же хочу сделать каждый из фиксов отдельно подключаемыми. Дать игрокам / плагиностроителям выбор - что им требуется, то и включают, что им мешает - отключают. Расширение в будущем: после внедрения lua на уровень движка, кодировки utf-8, вдруг кто-то захочет сделать мод (по типу преобразования Ё-Е (это совсем как пример))? Мододелу/плагиностроителю не надо будет читать 40ка страничный туториал как установить Морровинд 1с (сборку fullrest к примеру) в стим, чтобы работал оверлей, как потом накатить MCP, MGE XE почему одно без другого не работает, сверху ещё налепить mwse каким образом оно работает (по такой-же причине MGE с mwse объединены, если не ошибаюсь). А человек просто возьмет напишет скрипт и движок будет это поддерживать посредством text.dll (ядра) и его модулей, сможет вести нормальную отладку всего и вся и получать фидбек от пользователей. Сможет отключать оригинальные патчи и совершенствовать что-либо в Морровинде. Исключение каких-либо конфликтов в будущем. Я не изменяю MCP, его фиксы, я переношу его на уровень движка. Вместо чёрного ящика будет прозрачный аквариум, где всё будет видно что как работает и для чего, потому что исходные коды в доступности. И у всего этого будет единая точка конфигурации. Я хочу создать не просто патч, я хочу создать экосистему.
  14. Вчера
  15. Если все исправления можно внести в один кадастр, который будет еще и удобней, быстрее, стабильнее - было бы странно пройти мимо такой полезной и нужной возможности! Оптимизации способны пораждать новый вектор развития, а полное переосмысление древних опытов, сообщает о ЛевелАпе и Ростом над собой! В нашем случае - МВ жил, Жив и продолжает заниматься, тем, что у него хорошо получается дальше!
  16. >Мне чтобы перенести патч по анимации плавания В связи с этим вопрос-с какой целью переносится то, что уже реализовано и функционирует должным образом? Я увидел работу над Ё и другие полезные модификации библиотеки, ну а какой смысл изменения рабочих исправлений
  17. Мне чтобы перенести патч по анимации плавания, надо использовать intercept и fillbytes. Но...японамать вот это функция выбора анимации при плавании, не слишком ли "маленькая" 😄 либо это вообще функция, отвечающая за анимацию любого движения персонажа:
  18. По бездоспешному фиксу, это вроде общая проблема. Про аргониан, в енг версии точно анимация работает корректно по умолчанию, я слабо помню те нюансы, Олег лучше может довести в чём там детали. Да, Ёж, здоров!
  19. ЛичГвардия востала из стазис чамберов?)) Очень неожиданно, но очень приятно!(С) 4гб совершенно необходимый патч, который не ставить нельзя по определению, конечно!
  20. в том то и дело 4 GB патч ВСЕГДА применяется, какую бы вы галочку не выбрали 😃
  21. Новая вводная. Как выяснилось опытным путём и личными тестами — при отключении русской локали (И ДАЖЕ БЕЗ MCP патча) EnableRussianLocalization=0 в Angel.ini корректно работают: анимация плавания Аргониан работает корректно по умолчанию: меню заклинаний нормальное (не обрезанное), окно повышения уровня отображается корректно без обрезки . Соответственно в Angel.ini будет создан новый блок [rules_russian_fix], где будут находиться 4 фикса, которые будут работать ТОЛЬКО при включении русской локали! Т.к. в английской версии эти патчи ПРОСТО НАПРОСТО НЕ НУЖНЫ! fix_argonian_swim — fix_levelUp_messages fix_levelUp_window — fix_SpellCreation_window — Я не буду объединять патчи fix_levelUp_messages и fix_levelUp_window, да и вообще все патчи в одну строчку - для гибкости и возможности отключения какого-либо патча отдельно. Надо будет выяснить нужен ли fix_unarmored_bug=1 в английской версии. Т.е. присутствует ли баг бездоспешного боя в английской версии? Или это тоже только косяк русской версии. Если кто знает, прошу написать мне х) или в теме в общем.
  22. разве 4 гб патч это русские исправления? я думал он сам по себе ставится в принципе.
  23. в целом по Аргонианам я уже нашёл этот фикс Было до патча MCP: Стало после патча MCP: Что это за байты? Это замена слова Argonian на кириллические символы в кодировке cp1251. Предполагаю (хотя немного глупое предположение Argonian -> Аргонианин Немного сложно то, что все три патча ставятся одной галкой + 4 gb патч стаивтся по умолчанию. Итого 1 галочка=4 патча. Сейчас сделаю тестовый фикс и проверим 😃
  24. именно! я уже писал раннее, что хэш после патчинга MCP и просмотр через Hex Workshop Hex Editor не дают никакой картины по изменениям ДО патчинга MCP и ПОСЛЕ патчинга MCP. Будто он вообще ничего не меняет в text.dll 😉
  25. Никоим образом нельзя этого делать с моей версией! По крайней мере с моей text.dll. Она постоянно меняется, меняется ХЭШ, байты постоянно сползают в сторону, от чего создателю MCP прийдётся чуть ли не каждую неделю выискивать эти смещенные байты в моей версии и выкатывать доп патч. Это бессмысленно пока идёт разработка ядра text.dll. Я потому и удалил свой форк MCP, потому что он мог ломать совершенно другие адреса в моём text.dll !!! MCP сначала проверяет хэш Morrowind.exe! И выбирает подходящие под него патчи (которые ставятся нормально). Потом он проверяет хэш text.dll и выбирает "непонятные патчи для него". Мой text.dll он не знает (и слава богу) иначе бы ломал его.
  1. Загрузить ещё активность
×
×
  • Создать...