Активность
- Сегодня
-
А куда еще пихать исправления багов движка, как не в DLL, к которому привязан оригинальный Морровинд? После того , как версия 3.01 подтвердится я займусь модульностю этого длл , что DLL будет подгружать за собой еще более мелкие правки: Бесит следование нпс, которые постоянно глючат, теряют вас если вы прыгнули, или НЕ ДАЙ БОГ встали на камешек, который на 1 см выше, чем тот уровень, где они стоят - следуйте в (гипотетическую пока) папку textDLL\npclogic\следованиеиnpc.DLL (с исходниками). Постоянно проваливаетесь под пол Вивека , при акробатике 100 и из-за подгрузки ячеек? Проследуйте в папку textDLL\playerlogic\playermovement.dll(с исходниками) Надоел мусор в сохранениях, который постоянно надо чистить через (xEdit.... вроде так называется программа? не помню точное название), порадуйтесь мусора в сохранениях больше не будет, потому что это будет в ядре textDLL\core А вылеты при смене ячеек? Или появление мусора от быстрой телепортации/силтстрайдера? Очень много чего можно будет избежать, убрав это накорню 😁 И вся прелесть в том, что это все работает из коробки, в момент запуска игры, а не после ее загрузки. Все это будет максимально гибким и редактируемым. upd. Вы абсолютно правы в той части, что МСР/mwse делают уже что-то, что делает text.dll (или может делать), но в случае с text.dll вы просто оденете ошейник на Morrowind.exe и будете командовать ему что делать. Сами. В то время как mwse/MCP чужеродные пришитые органы для morrowind.exe, то text.dll для него икона и второе сердце.
-
В 2008ом году впечатления были иные, но с каждым годом они все больше приобретали статус лесипеда, что удручает, хотя мы (не унываем). Однако, на фоне назревающей фрагментации версий (МП) начинают набегать дополнительные сложности в его эксплуатации (но мы не унываем далее). Есть мнение, что у этого есть своя область для применения. Так как, МСП уже некоторое время не вносит новых правок, полностью перенеся это на могучие плечи МВСЕ. Которое, однако, работает далеко не на всех ОС, а дальше, все может стать еще хуже. Интеграция же, патчей движка в егоже детальку, избавляет от необходимости лишних резидентов, предоставляя весь список исправлений в дефолтной комплектации.
-
Так небо же к игроку привязано. И весь рендеринг от его координат же. 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.