Активность
- Последний час
- Сегодня
-
Так небо же к игроку привязано. И весь рендеринг от его координат же. 2х ячейки во все стороны. Все что дальше 4х - не существует, в смысле не загружается. Печально. Все время "казалось", что это заслуга именно, что МСП, а не отдельное направление патчинга. Было интересно исправить сие упущение! Благодарствую за интересный исторический экскурс, теперь будет чем пополнить Заметки! По Ангел.Ини не так чтоб много инфы (было) а тут прям, Праздник! Ака консоль. Там в движке есть такой параметр: ConsoleBuffer=ЪЪЪ https://morrowind-nifs.github.io/NotesForModmakers-ver.3.3/mw_ini_new_things.htm Он как-то связан с этим буфером? Т.е. не так чтобы, но обращу внимание на этот параметр, на всякий случай. Такое уже Достойно в Легенды Складывать (будет). Мечты всех древних и грядущих Нереваров в одном флаконе, смешаны, но не взболтаны. А на правах "нашего ответа Лорду Чамберлену" то вовсе Классикой можно сразу Считать (будет). Мвсе тихо Радуется видя Достойного (Наследника)(или кого Иного). Давать пользователю удобные возможности подстроить важные параметры под себя, это Хороший Тон и Уважение к Пользователю в 2х размере! Беседка как она есть. Насиловать движок 25летней давности, это такой же Шедевр, как и та Игра, которая насилует беседку уже 20лет. Не давая ей кануть в лету, хотя она и старается изо всех сил. Пожелаем же ей дальнейших Успехов! Если правильно понимаю, то МВСЕ работает монитором процесса. В то время, как техт.длл сидит в потоке движка игры, создавая меньшую нагрузку на систему в целом. ? Что до "поддержки языка", есть мнение, что ру-версия МВ.ехе, содержит какие-то (толи) хвосты, толи еще что, чего нет в аглицкой. (опция QuickStart= например) Но если все дело (ру Мв.ехе) только в поддержке кирилицы, тогда (появляется) вариант внедрения техт.длл в аглицкую версию, который способен решить проблему двух зайцев сразу. Впрочем, это уже будет совсем иная история.
-
Я наверное неправильно выразился и вы не так поняли. А. Если этот синдром наблюдается только в русской версии от 1с, то решение сейчас лежит у меня в файлах в пк. Б. Если это проблема обеих версий, то решение лежит в morrowind.exe, который надо дизассемблить и искать байты памяти в которых задаются координаты, что явно дольше будет. В text.dll и фикса бездоспешного боя не должно было быть и других фиксов, потому что это TEXT dll изначально был (насколько я понимаю) для простого перевода x) Решение № 1: Double - самое сложное техническое решение, вы предлагаете вручную в 32 битный оригинальный движок внести 64 бита, что требует глубокой переработки. Решение № 2: Смещение координатной системы: вместо 0.0 использовать локальные координаты относительно региона, которые будут идти к какому то одному "центральному региону" Решение №3: самое глупое привязать центр мира к игроку. И получится как в том кошмаре, когда вы бежите и не занимаетесь с места одновременно, потому что здания как-то-привязаны к координатам (хотя почему тогда они не трясутся, а только НПС и тарелки/ложки) Я не модостроитель, я не знаю как влияют координаты на моддинг и как Tes construction set с ними воздействует. На данный момент я могу просто строить гипотизы, пока четко не увижу код-цифры
-
ywunyx присоединился к сообществу
-
Не для текущего конечно состояния DLL (он еще сырой), но для задела на будущее. Эта проблема наблюдалась и в английской версии? Или это "особенность" русской локализации? upd Вообще, после изучения console.cpp могу предположить вот что: Где-то в оригинальном движке есть что-то типа: struct Object { float x, y, z; (32-битные float) }; Что это значит? (все еще гипотеза): 1. Float (32-bit) имеет ограниченную точность ~6-7 знаков 2. При больших координатах (в тысячах единиц) младшие биты по просту теряются 3. Округление происходит "скачками" → объекты "дрожат"
-
routerbitmalls присоединился к сообществу
-
Итак, быстренько перед работой проанализировав Console.cpp (заметка: надо бы вообще полную ревизию .cpp файлов всего text.dll сделать на предмет уязвимостей и сделать их "современными"), я выявил несколько потенциальных проблем: Проблемное место №1: sprintf без ограничения. КОМБО sprintf(buf, "%s", raw)+char buf[1024]; вот как раз таки если raw будет длиннее 1024 символов — будет переполнение буфера!!! (как вариант заменить на char buf[1024] strncpy(buf, raw, sizeof(buf) - 1) buf[sizeof(buf) - 1] = '\0' (гарантирует нуль-терминацию, но надо смотреть). Потенциальная проблема №2: _vsnprintf с магическим числом. (в этом случае немного ЛУЧШЕ, но не идеально, надо думать). _vsnprintf(tmp, 1024, format, argptr)+char tmp[1024] _vsnprintf ограничивает вывод, но если строка слишком длинная, она может быть обрезана. (как вариант заменить char tmp[1024]; _vsnprintf(tmp, sizeof(tmp), format, argptr) tmp[sizeof(tmp) - 1] = '\0' (гарантирует нуль-терминацию, но надо смотреть) Потенциальная проблема №3: Работа с указателями: В функции GameCommandLineDump идёт опасное приведение типа: Сon_Printf( "%8.8X: %s", adress, ( char * ) adress ). Что это значит? Берется произвольный адрес памяти и трактуется как строка и если в этом участке памяти нет нуль-терминатора, то всё пиши прощай, привет "segfault". Вобщем тоже надо думать. Возможно что-то ещё. Выводы из быстрого анализа: buf имеет размер 1024 байта sprintf копирует ВСЮ строку raw в buf без проверки длины Если raw длиннее 1023 символов + нуль-терминатор - BUFFER OVERRUN! Почему это вызывает проблему с Tamriel Rebuilt, либо сложными скриптами, они: Переполняют buf[1024] в GameCommandLine Вызывают buffer overrun Ломают стек вызовов Приводят к Runtime Error Что я буду делать? Как уже описал выше - (сначала поищу есть ли лучшие решения) потом исправлю эти строки, А ТАК ЖЕ, подумаю на сколько можно увеличить буфер....если взять примеры скриптов Пирата (if-if-if-if-if....и так далее if через каждую строчку x15), то в тестовом режиме можно увеличить буфер до 2-4кб вместо 1 КБ который установил давным давно Angel Death. Я всё ещё нге знаю память игры и эксперименты с этим могут повлечь самые разные последствия. Если всё будет гладко, то ещё увеличу буфер до 8КБ (чтобы на века). Вот такой анализ, и чем я буду заниматься дальше, но это уже будет после того как вернусь с работы, всем хорошего дня! 😃
-
Небольшие подвижки для апгрейда моей версии 3.00 до эталонной 3.01: 1. Провел небольшой анализ и дизассемблинг, я нашёл функцию FixLevelUpMessages из версии text.dll GFM 5.7 if (DAT_1002a074 == 3) скорее всего проверяет версию исполняемого файла Патчит память по адресам 0x5d9281 - 0x5d92a6 с помощью FUN_10008460 Использует функцию FUN_10008460 для записи байтов в память Адреса 0x5d9281-0x5d928a: записывает байты [0xb8, 0x38, 0x0e, 0x7a, 0x00, 0x90, 0x90, 0x90, 0x90, 0x90] Адреса 0x5d929d-0x5d92a6: записывает байты [0xb8, 0x7c, 0x35, 0x79, 0x00, 0x90, 0x90, 0x90, 0x90, 0x90] Далее следует Функция, которая делает патчинг памяти (вообще простой wrapper): VirtualProtect(param_1,param_3,0x40,&local_4); - снимает защиту памяти (уже есть в text.dll 3.00) _memset(param_1,(uint)param_2,param_3); - записывает байты в память (уже есть в text.dll 3.00) VirtualProtect(param_1,param_3,local_4,&local_4); - восстанавливает защиту (уже есть в text.dll 3.00) Исходя из анализа я сделал вывод, что — эта функция не что иное, как функция FillBytes, из файла HelperFunctions.cpp 2. Приступил к реализации: - создал в папке "\morr_text_dll-master\src" новенький файл levelup_fix.cpp следующего содержания (отдал дань уважения Angel Death): 3. В файле morr_text_dll.cpp в функции Initialize, добавил после других Init...() функций: 4. В файле stafx.h объявил о функции: 4. В CmakeLists.txt добавил наш новенький патч табличек: 5. Компиляция прошла без ошибок!!! Файл "потолстел" на 1кб: 6. Запуск показал, что текст при повышении уровня в наличии. УРА! п.с. прикладываю "шакального качества" ролик для ирллайф подтверждения. ФАЙЛЫ В ШАПКЕ ТЕМЫ И НА СТРАНИЦЕ ЗАГРУЗКИ TEXT.DLL ПОКА НЕ МЕНЯЛ — НУЖНЫ ТЕСТЫ! (я записывал данный ролик на оригинальной игре МТВ БЕЗ МСР И МГЕ) text.dll 3.00 to 3.01.mov angel.ini text.dll
- Вчера
-
Ну это не настолько большая проблема, и сейчас в MWSE модах встречаются функции при настройке которых требуется перезапустить игру. Что бы изменить настройки вручную редактированием angel.ini, в любом случае придется игру закрыть и редактировать файл, а тут просто потыкал в меню и перезапустил. Даже в таком виде большинству будет удобнее чем ковырять какие то файлы. Если сможете сделать нативную поддержку lua то круто, если нет то костыль mwse вполне не плох. Ну вот у меня на MWSУ вот так получилось. При изменении параметров записывает новые значения в angel.ini и требует перезапуск. При открытии считывает существующие параметры, и если у пользователя стоит text.dll более младшей версии то отсутствующие настройки просто не показываются.
-
По поводу дрожания... Координаты объектов в экстерьере задаются глобальными. При прорисовке, за счет округления больших чисел происходит скачкообразное изменение (за счет ограничения количества действующих знаков), а следовательно и дрожь предметов. Я пробовал перенести свой остров далеко за карту. У меня там предметы на столе тряслись как в лихорадке при ходьбе.
-
Да, проблема в том, что НА ДАННЫЙ момент angel ини читается игрой только 1 раз - при запуске. Чем может обернуться постоянное обращение morrowind.exe к angel.ini - я не знаю, но гипотетически даже можно сделать полноценное меню и встроить его в меню игры, как это сделано в реализации mcm меню mwse. Отдельное меню Angel, в котором будет не только "горячая клавиша смены языка" но и другие параметры(с описанием), которые можно менять. Эти параметры сможет менять любой пользователь, даже не сведущий во всем этом "моддинге и патчинге"
-
так Бевезде оно видимо не мешает, это игроки собаки такие пилют тут всякие материки на 20 летнюю игру и жалуются :))) ну лично я тоже нейросетями пользуюсь, очень помогает. ну раскладку ваш text.dll будет переключать, а вот меню настройки клавиши, которое спросит у игрока нажмите желаемую клавишу, а потом запишет ее сканкод в angel.ini вполне можно сделать, собственно у меня уже есть рабочий вариант. Конечно новое значенеи только после перезапуска заработает. Я изначально хотел сделать проверку и переключение top\cel\rmk для плагинов, а то до сих пор попадаются игроки у которых оно в 0 стоит и они спрашивают почему локации в моде не переведены и топики не работают. А тут как раз вы загрузили свою версию, ну я и выбор клавиши прикрутил. Хотя конечно если вы это потом напрямую сделаете, то да mwse будет костылем
-
trevorphilips1 присоединился к сообществу
-
aoygyyd присоединился к сообществу
-
1. Ну тем не менее, даже тестер важен для любого проекта =) 2. После внесения исправления по "сообщениям при поднятии уровня" и "переполнения буфера", я как раз таки и возьмусь за то, что буду смотреть КАК именно MCP взаимодействует с text.dll, меняет ли он в нем что-то вообще (просто вносить правки в уже скомпилированный dll файл - занятие такое, неизвестно к чему может привести. А шлюз я хочу добавить как раз для того, чтобы отладка и разработка шла легче. Чтобы каждый раз не вписывать "экспериментальный код в здоровое тело text.DLL". Добавил модуль, ввел логирование - смотришь что получается. Медленно но верно.) 3. Вы меня не поняли. Разница между mwse и text.dll большая. Попробуйте написать мод.lua, который будет переключать русскую раскладку в игре =), я вам больше скажу, он даже будет вам выдавать сообщения и писать, что он работает, он меняет раскладку, но по факту раскладка меняться не будет. Приоритет доступа text.dll к памяти игры можно разобрать в сравнении, что у игры 2 сердца. Одно morrowind.exe, а второе text.dll. одно слушает другое. В этом и прелесть русской локализации. А вот mwse это грубо говоря "Lua- construction-set, который загружается уже после того, как загрузились morrowind.exe и text.DLL, подгружая свои плагины-модули =).) Также я тоже внесу ясность: мой text.dll будет не "врагом", но "исследователем", он не будет диктовать другим разработчикам по каким правилам жить и творить. Представьте что у вас есть папка, допустим от morrowind\text._DLL\lua\. В которую вы закинули свой lua мод по "смене раскладки" и он заработал так, как вы задумали =), не зависимо от версии mwse, потому что text_DLL обучен последней версии Lua, он знает как старые команды, так и новые." И, как вы уже сказали - text.dll в английской версии нет, потому я хочу внести полную совместимость с mwse как прямую, так и обратную..... А потом Morrowind.exe через text.dll спросит Вас в недалеком будущем "хм, господин пират, а не хотите ли вы скинуть мне какой-нибудь игровой скрипт по поведению НПС в формате . json? Я и их научился читать! А вам не надоело постоянно переключать кодировку с UTF-8 на cp1251? Пишите мне скрипты сразу в UTF-8, я и её читать научился! И так далее." Про "дрожание" нпс еще совсем рано рассуждать, для начала надо сделать ядро text.dll.
-
ynuksaa присоединился к сообществу
-
Что бы внести ясность я не из команды Тамриэль Ребилда, даже не переводчик, всего лишь бэта тестер перевода. так в MCP уже же есть исправления для text.dll, значит способ у них был, в любом случае МСP в первую очередь патчит exe, я так понимаю только русские исправления и заносятся в text.dll. Может быть им кто то предоставил правки и сказал куда вставить, ничего не знаю про то как в MCP появились правки для text.dll. И надо ли им оно сейчас. Общие правки они и так делают в exe. Если вдруг возникнут новые чисто русской локализации то проще вам их самим исправить чем вразумлять авторов MCP что и куда надо добавить. Ни к чему не призываю и и не убеждаю чисто мое мнение. Ну я бы не сказал что MWSE прям уж костыль. Так то и text.dll можно считать костылем, с помощью которого воткнули поддержку русского языка. Вот на новом движке OpenMW сделали свою реализацию lua, только путаница вышла из за отсутствия совместимости, извечный выбор какие моды нужнее, тот движок и использовать и т.д. И вечные вопросы в комментах а работает ли мод A на движке Х. Нужно ли делать еще 3 вариант Lua для Морровинда, пойдет ли это на пользу? И потом если вы lua через text.dll прикрутите, в английской версии этого файла нет, а в РФ полтора землекопа lua моды делают. Останется ли совместимость с MWSE не будет ли конфликтов? Все таки подавляющее большинство сделано на английской версии игры, нужно на это ориентироваться. Тоже чисто мое мнение, может вы какой прорыв совершите, просто лично я не вижу пока необходимости замены MWSE. PS Да кстати подкину еще одну мыслю. В оригинальном движке есть проблема, при отдалении от центра мира НПС начинают "дрожать" В Анвиле очень хорошо заметно.
-
Но в любом случае, сначала я доведу версию "моего" text.dll до эталонной 3.01, потом возможно ее чуточку модифицирую (фикс перегрузки для ребят с Тамриэль Ребилда), а потом уж сделаю а-ля шлюз, установлю зависимости доп библиотек, чтобы основной text.dll вливал в память игры помимо себя и соседние файлы (что является идеальным началом для тотального расширения инструментария text.dll) Как я вижу будущее: По поводу совместимости с mcp я принял решение оставить его "отдельным", не тащить оттуда все подряд и делать из чистого text.dll непонятную "цифровую химеру". Но добавить возможность авторам MCP добавлять свои модули через text.dll путем того же шлюза. По поводу lua: предстоит огромное количество работы, технически( пока в большей степени гипотетически) возможно убрать костыль mwse и научить Морровинд напрямую читать Lua файлы. По поводу кодировки - спорный момент, но я попытаюсь научить Морровинд читать и кодировку UTF-8, оставив при этом в нем знание родной кодировки cp1251. Идей очень много на самом деле. а за ссылки огромное спасибо!