Evil Islands (Add-On) *последняя версия* - Версия для печати +- Город Джунов (https://www.gipat.ru/forum) +-- Форум Аддон для Проклятых Земель (https://www.gipat.ru/forum/forum-20.html) +--- Форум Программирование (https://www.gipat.ru/forum/forum-6.html) +--- Темы: Evil Islands (Add-On) *последняя версия* (/thread-2784.html) |
RE: Evil Islands (Add-On) *последняя версия* - Jet - 16.08.2020 (16.08.2020, 12:03)Vasial Написал:Можно, апример, на github сделать reposotiry с описниями и стартер их оттуда смог бы подтягивать.(16.08.2020, 10:46)MorgenS Написал: Кстати да, хорошая идея. Я думаю, имелось ввиду описание выбранного мода. Другой вопрос: откуда их брать? Большинство старых модов не то что не поддерживают это, их авторов то даже не найти. Можно, конечно, каким-то образом впилить это в стартер, но тогда как ему отличать моды? По названию? Ну и как бы не совсем это задача стартера. А отличать можно, ну например по хэшу. RE: Evil Islands (Add-On) *последняя версия* - Vasial - 17.08.2020 Меня всегда интересовала а вот эту проблему пинга 9999 стартером вообще можно решить? RE: Evil Islands (Add-On) *последняя версия* - Demoth - 17.08.2020 (17.08.2020, 04:15)Vasial Написал: Меня всегда интересовала а вот эту проблему пинга 9999 стартером вообще можно решить? На всякий случай (мб ты знаешь), этот пинг означает, что ip сервера закрыт извне. Это может быть из-за провайдера, клиенты которого скрыты под NAT, может быть из-за роутера по аналогичной причине но по отношению к пользователям домашней сети, так и просто из-за брендмауера. Возможно, есть и другие причины, о которых я не знаю или не смог вспомнить, но эти - самые распространнёные. Может ли аддон помочь их решить? В теории, да. Многие torrent-клиенты используют средства для обхода NAT и добавления исключения в брендмауер. Аддон, в принципе, может делать так же. Хотя даже это не гарантирует, что серверу удастся стать доступным извне... Эта идея есть у нас в TODO, но не могу точно сказать, когда до её реализации дойдут руки. RE: Evil Islands (Add-On) *последняя версия* - Vasial - 17.08.2020 Подредактировал изображение, может пригодится подобная иконка для стартера. Жаль исходников нету. RE: Evil Islands (Add-On) *последняя версия* - Demoth - 17.08.2020 (17.08.2020, 15:03)Vasial Написал: Подредактировал изображение, может пригодится подобная иконка для стартера. Жаль исходников нету. Есть, кстати, исходник логотипа: https://allods.gipat.ru/index.php?p=filesei#logotip-igry-proklyatye-zemli Из него тоже можно попробовать иконку сделать. Правда 16х16 всё равно придётся руками рисовать, а то на втупую уменьшенной ничего не видно даже при сохранении всех цветов (у .ico вроде как есть ограничения на 256 цветов). 16x16: 32x32: 96x96: 310x310: RE: Evil Islands (Add-On) *последняя версия* - Vasial - 17.08.2020 (17.08.2020, 21:57)Demoth Написал:Ну в моем случае смысл был сохранить оригинал, тут же совсем другой значек.(17.08.2020, 15:03)Vasial Написал: Подредактировал изображение, может пригодится подобная иконка для стартера. Жаль исходников нету. RE: Evil Islands (Add-On) *последняя версия* - Vasial - 23.08.2020 Всегда было интересно, а вот этот EI_Plugin нельзя включить в стартер? А то к некоторым модам его нужно устанавливать отдельно. Так же увидел в классик моде версию 1.10.2 это как? https://yadi.sk/d/pDzneB7IbvFVHg/%D0%9F%D1%80%D0%BE%D0%BA%D0%BB%D1%8F%D1%82%D1%8B%D0%B5%20%D0%97%D0%B5%D0%BC%D0%BB%D0%B8 RE: Evil Islands (Add-On) *последняя версия* - Demoth - 23.08.2020 (23.08.2020, 04:18)Vasial Написал: Всегда было интересно, а вот этот EI_Plugin нельзя включить в стартер? А то к некоторым модам его нужно устанавливать отдельно.Да вот переношу как раз потихоньку его функциональность в аддон (в 0.10 перенёс новые скриптовые функции). 0.10.2 в классике это хотфикс релиз, который я ещё не публиковал официально. Через неделю вернусь из отпуска, сделаю ещё несколько изменений и зарелижу как 0.10.3 сразу. RE: Evil Islands (Add-On) *последняя версия* - Vasial - 23.08.2020 (23.08.2020, 06:36)Demoth Написал:Пнятно, а то я думал мож человек своё что-то пилит.(23.08.2020, 04:18)Vasial Написал: Всегда было интересно, а вот этот EI_Plugin нельзя включить в стартер? А то к некоторым модам его нужно устанавливать отдельно.Да вот переношу как раз потихоньку его функциональность в аддон (в 0.10 перенёс новые скриптовые функции). RE: Evil Islands (Add-On) *последняя версия* - Albeoris - 24.08.2020 Багрепорт 2020.08.24/1 Версия игры: GOG Если сразу после установки игры (не запуская её!) устновить EIStarter, он НЕ скопирует себе параметры из Nival Interactive (вероятно, потому что их там ещё нет). И при попытке запустить игру появится сообщение с просьбой вставить диск 2. 1. Хотелось бы, чтобы Addon использовал настройки из Nival Interactive. Пока не понимаю, зачем он их дублирует, нарушая нормализацию реестра. 2. Если это невозможно, и во время установки нужных параметров нет, стоит не завершать установку, а выбросить ошибку и попросить пользователя сперва запустить игру. RE: Evil Islands (Add-On) *последняя версия* - Albeoris - 24.08.2020 Багрепорт 2020.08.24/2 Версия игры: GOG При выборе разрешения 1920x1080x32bit игра удваивает его. Скриншот: https://i.imgur.com/jvVFtwI.jpg Если выбрать 1280x720x32bit такой проблемы нет. Оригинальный лаунчер запускает в 1920x1080 без проблем. Решение: https://www.gipat.ru/forum/thread-2784-post-44949.html#pid44949 На оригинальном game.exe этот праметр указан, а вот на скопированном в Starter/Engine - нет. Было бы здорово автоматически выставлять его при установки. RE: Evil Islands (Add-On) *последняя версия* - MorgenS - 24.08.2020 (24.08.2020, 03:02)Albeoris Написал: Багрепорт 2020.08.24/2 Случайно не Windows 10 с включенным масштабированием? Если в папке стартера в папке Engine в свойствах game.exe установить режим скейлинга приложением (см. скриншот в аттаче), проблема исчезает? Потому что такая проблема есть при включенном в системе масштабировании. RE: Evil Islands (Add-On) *последняя версия* - Albeoris - 24.08.2020 (24.08.2020, 09:55)MorgenS Написал: Случайно не Windows 10 с включенным масштабированием? Всё верно, спасибо! Было бы здорово, копировать этот параметр для .exe'ка в Starter/Engine/ при установке Addon'а. Фича реквест 2020.08.24/1: Проблема: Бег на дальние дистанции состоит из постоянных остановок для восстановления энергии. Решение: Разрешить восстановление энергии, если персонаж перемещается шагом. Фича реквест 2020.08.24/2: Проблема: Длительность бафов отображается на отдельной вкладке, на которой отсутствует полоска здоровья (индивидуально - раздражает затемнение модели, не знаю почему). Решение: Отображать маленькие иконки бафов с таймером или визуальным эффектом для оставшегося времени на основной вкладке. Фича реквест 2020.08.24/3: Проблема: Мгновенное переключение оружия в бою даёт огромное преимущество. Особенно если речь о маге. Решение: Добавить анимацию смены оружия. Фича реквест 2020.08.24/4: Проблема: Часто для победы над противником не хватает одного удара, но: "вы умерли". Решение: Добавить скрытую особенность, которая срабатывает раз в минуту. Если враг наносит смертельный удар атакой, которая могла бы нанести меньше урона, и его персонаж бы пережил, снижать урон до безопасного значения, оставляя персонажу 1-3 пункта жизни. Это создаст больше ситуаций "чудом выжил". Для начала отката способности персонаж должен закончить бой. RE: Evil Islands (Add-On) *последняя версия* - Albeoris - 24.08.2020 Фича реквест 2020.08.24/5: Проблема: Каждый переход на новую локацию начинается с ориентации камеры на север. Решение: Добавить возможность автоматически ориентировать камеру. RE: Evil Islands (Add-On) *последняя версия* - Albeoris - 24.08.2020 Demoth Я правильно понимаю, что стартер перехватывате вызовы и заменяет их на реализацию из addon.dll? Какой подход вы для этого используете? RE: Evil Islands (Add-On) *последняя версия* - Demoth - 24.08.2020 (24.08.2020, 15:19)Albeoris Написал: Demoth Стартер - просто графический интерфейс для выбора мода и настраивания игры/аддона.длл в реестре и для запуска игры таким образом, чтобы в процесс игры подгрузить addon.dll. Сейчас для этого достаточно запустить engine\game.exe вместо обычного, а в качестве рабочей директории процесса указать директорию стартера. Аддон.длл делает всю полезную работу патча код игры в оперативной памяти. RE: Evil Islands (Add-On) *последняя версия* - Albeoris - 24.08.2020 (24.08.2020, 18:08)Demoth Написал: чтобы в процесс игры подгрузить addon.dll. Аддон.длл делает всю полезную работу патча код игры в оперативной памяти. Тот же самый вопрос. Какой подход использует Addon.dll для модификации / перехвата вызовов? MS Detours/вручную расставляет джампы/патчит машинный код/что-то ещё? Интересует последний пункт, вдруг изобрели что-нибудь супер-удобное. о.о RE: Evil Islands (Add-On) *последняя версия* - Demoth - 25.08.2020 (24.08.2020, 23:18)Albeoris Написал:(24.08.2020, 18:08)Demoth Написал: чтобы в процесс игры подгрузить addon.dll. Аддон.длл делает всю полезную работу патча код игры в оперативной памяти. Да прям какого-то единого подхода нет. Detours/minhook хорошо подходят для перехвата простых (stdcall/cdecl) функций и заменой их своими, но для аддона они, к сожалению, не очень подходят - только какие-то отдельные редкие (редкие именно для аддона) случаи можно решить с их помощью. Если вдруг я ошибаюсь и не знаю каких-то возможностей детурса, с помощью которых можно было бы и остальные аддоновские кейсы решить, то (без иронии) с удовольствием бы про них узнал. Так-то detours шикарнейшая вещь. Вообще, многие патчи в аддоне тупо патчат отдельные байты оригинального движка (nop-ят оригинальный код, заменяют какой-нибудь push одной константы на push другой константы или всякое в таком духе). Для более сложных случаев в старом коде аддона сделано просто - замена оригинальной инструкции, которую нужно перехватить, на jmp на naked-функцию (declspec(naked)) с ассемблерной вставкой. Для нового кода я сделал в чём-то похожую на detours либу для 1) перехвата функций, 2) для перехвата конкретных вызовов функций, 3) для перехвата кода внутри функции. Первый кейс точно можно решить с помощью detours, но не уверен, что он умеет перехватывать thiscall-функции (хотя не удивлюсь, если уже умеет). Второй кейс в общем-то настолько простой, что для этого никакая либа особо не нужна. А вот с третьим кейсом всё намного сложнее и я сильно сомневаюсь, что его можно как-то автоматизировать. Вот пример третьего случая: https://gist.github.com/koteyur/416a680433dc3bb61a338a93b8214554 Тут под "как можно автоматизировать" я имею в виду проверку кода, который будет запатчен, правильный выбор позиции оригинального кода (после выполнения хука или перед) и адаптацию этого кода. Поэтому в моей либе предполагается, что тот кто будет писать код сам хорошо понимает, что он делает. Так что в моей либе ничего инновационного нет - простой cpp на 300 строчек кода. RE: Evil Islands (Add-On) *последняя версия* - Vasial - 25.08.2020 всегда хотел узнать, а реально ли вообще при помощи стартера решить главную проблему одиночной игры - генерация урона перед ударом, ну я про эту классику, когда замахивавшийся персом, сохраняешься, а потом перезагрузками пытаешься выкинуть максимальное число. RE: Evil Islands (Add-On) *последняя версия* - Albeoris - 25.08.2020 (25.08.2020, 00:03)Demoth Написал: Вот пример третьего случая: https://gist.github.com/koteyur/416a680433dc3bb61a338a93b8214554 Хм. Пока не понимаю проблемы. При помощи Detours, мы перенаправляем все вызовы метода в нашу либину и получаем линку на оригинал. К нам приходит вызов, анализируем аргументы, в зависимости от них либо вызываем оригинал, либо выполняем наш хук. Вроде, всё тоже самое? Единственное, в твоём случае я вижу некоторый контекст, у которого оттопырены значения регистров. В этой области я не силён, но предполагаю, что мы точно также можем получить их значения на момент вызова? Возможность патчить отдельные инструкции в методах сама по себе интересная, но на мой взгляд очень скрупулёзная. Вытащить его полностью и дело с концом. Ясно, я вот тоже всё ищу какую-нибудь серебряную пулю, которая может превратить рутину в "я просто пишу код", но всё никак не выходит. >_> И mail, не отвечают ни по одному из официальных ящиков... P.S. А у тебя не было проблем с Hardware Breakpoint'ами? Выставляю в Cheat Engine бряку на чтение, и игра вылетает при первом же обращении. (25.08.2020, 00:45)Vasial Написал: всегда хотел узнать, а реально ли вообще при помощи стартера решить главную проблему одиночной игры - генерация урона перед ударом, ну я про эту классику, когда замахивавшийся персом, сохраняешься, а потом перезагрузками пытаешься выкинуть максимальное число. Насколько я знаю, такой функции нет, но само собой, ничто не мешает это реализовать. Но зачем? Игра уже сейчас представляет собой Save/Load, а ты увеличишь их число в сотни раз. Я бы наоборот отключил сохранение, оставив только автоматическое при переходе между локациями. Кстати! Feature Request 2020.08.25/1 Добавить возможность отключить сохранения в одиночной игре, оставив только N последних автосохранений, которые создаются автоматически при переходе между локациями. |