Активность
- Последний час
-
Я не в коем случае не против доработки textdll. Я имел в виду совмещение локализации с исправлениями игры. textdll предназначен для русской версии игры от 1С, которая является не лицензионной пираткой и предлагать ее для других языков не имеет смысла. Следовательно исправления будут только для 1С. Для OpenMW не нужны MGE, MCP, MWSE, а на android не работают exe и dll. Tamriel Rebuild - это обычный мод, а не системная примочка, как в прочем и UMP, который работает на любой операционке и языке.
-
wsdyc присоединился к сообществу
- Сегодня
-
ovopasu присоединился к сообществу
-
Из этой старой программы и заплатки можно абсолютно все стереть и написать в неё все что угодно. И многократно исправленная кем? Как мы выяснили в этой теме - сам .DLL не переделывался с того момента, как Ангел внес исправление 3.01 по табличкам при повышении уровня. DLL "застыл во времени" в его первоначальном виде. OpenMW когда-то тоже была "сверхзадачей". Теперь это прекрасная реальность, родившая из себя Tes 3 mp. То же самое можно сказать про MWSE, MCP, MGE, Tamriel Rebuil - титанов творчества плагоностроителей и мододелов. По поводу языка (не знаю причем тут пуп земли и для чего вы это сказали) когда я говорю про сам процесс локализации и то как это было реализовано с технической точки зрения. По поводу поддержки других языков/версий Морровинда/операционных систем. Вы слишком строго относитесь к тому что только только начало зарождаться. То что открылось - полностью неизведанная земля, всех возможностей которых и я не знаю, потому даже не смею предполагать где у неё предел - "край мира". И вас никто ничего не заставляет/принуждает или обязывает делать, ни в коем случае ) вы правы, цели и идеалы у всех разные. Кто-то довольствуется тем что есть, а кто-то готов искать пути для новых возможностей. Upd. Теоретически, если Ангел просто напросто вписал русский алфавит в text.dll, то что мешает внести любой другой алфавит в этот DLL, в другой .cpp файл. Вынести переключение языка в Angel.ini как я это сделал с клавишей смены языка. У пользователя будет его родной язык+английский.
- Вчера
-
Старая программа многократно исправленная и модифицированная превращается в сплошную заплатку. И наступает момент когда становится проще сделать новую, а не латать рухлядь. Нужно разумно смотреть на возможности исправления и не ставить сверх задач. Русский язык не является пупом земли и если на других языках и на других операционках это работать не будет то, для меня лично в опу такую работу. Я прекратил разработку GFM, сделал новый перевод игры и сделал новый фикс с нуля UMP, работающий на всех языках. Но у каждого свои идеалы и цели....
-
А куда еще пихать исправления багов движка, как не в 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, в котором будет не только "горячая клавиша смены языка" но и другие параметры(с описанием), которые можно менять. Эти параметры сможет менять любой пользователь, даже не сведущий во всем этом "моддинге и патчинге"