(16.08.2020, 10:46)MorgenS Написал: Кстати да, хорошая идея. Я думаю, имелось ввиду описание выбранного мода. Другой вопрос: откуда их брать? Большинство старых модов не то что не поддерживают это, их авторов то даже не найти. Можно, конечно, каким-то образом впилить это в стартер, но тогда как ему отличать моды? По названию? Ну и как бы не совсем это задача стартера.
Их не так много, можно вставить описание самим, там делов минут 10.
Можно, апример, на github сделать reposotiry с описниями и стартер их оттуда смог бы подтягивать.
А отличать можно, ну например по хэшу.
17.08.2020, 12:42 (Сообщение последний раз редактировалось: 17.08.2020, 12:49 Demoth.)
(17.08.2020, 04:15)Vasial Написал: Меня всегда интересовала а вот эту проблему пинга 9999 стартером вообще можно решить?
На всякий случай (мб ты знаешь), этот пинг означает, что ip сервера закрыт извне.
Это может быть из-за провайдера, клиенты которого скрыты под NAT, может быть из-за роутера по аналогичной причине но по отношению к пользователям домашней сети, так и просто из-за брендмауера. Возможно, есть и другие причины, о которых я не знаю или не смог вспомнить, но эти - самые распространнёные.
Может ли аддон помочь их решить? В теории, да. Многие torrent-клиенты используют средства для обхода NAT и добавления исключения в брендмауер. Аддон, в принципе, может делать так же. Хотя даже это не гарантирует, что серверу удастся стать доступным извне...
Эта идея есть у нас в TODO, но не могу точно сказать, когда до её реализации дойдут руки.
17.08.2020, 21:57 (Сообщение последний раз редактировалось: 17.08.2020, 21:58 Demoth.)
(17.08.2020, 15:03)Vasial Написал: Подредактировал изображение, может пригодится подобная иконка для стартера. Жаль исходников нету.
Есть, кстати, исходник логотипа: https://allods.gipat.ru/index.php?p=file...atye-zemli
Из него тоже можно попробовать иконку сделать. Правда 16х16 всё равно придётся руками рисовать, а то на втупую уменьшенной ничего не видно даже при сохранении всех цветов (у .ico вроде как есть ограничения на 256 цветов).
(17.08.2020, 15:03)Vasial Написал: Подредактировал изображение, может пригодится подобная иконка для стартера. Жаль исходников нету.
Есть, кстати, исходник логотипа: https://allods.gipat.ru/index.php?p=file...atye-zemli
Из него тоже можно попробовать иконку сделать. Правда 16х16 всё равно придётся руками рисовать, а то на втупую уменьшенной ничего не видно даже при сохранении всех цветов (у .ico вроде как есть ограничения на 256 цветов).
16x16:
32x32:
96x96:
310x310:
Ну в моем случае смысл был сохранить оригинал, тут же совсем другой значек.
Всегда было интересно, а вот этот EI_Plugin нельзя включить в стартер? А то к некоторым модам его нужно устанавливать отдельно.
Так же увидел в классик моде версию 1.10.2 это как? https://yadi.sk/d/pDzneB7IbvFVHg/%D0%9F%...0%BB%D0%B8
(23.08.2020, 04:18)Vasial Написал: Всегда было интересно, а вот этот EI_Plugin нельзя включить в стартер? А то к некоторым модам его нужно устанавливать отдельно.
Так же увидел в классик моде версию 1.10.2 это как? https://yadi.sk/d/pDzneB7IbvFVHg/%D0%9F%...0%BB%D0%B8
Да вот переношу как раз потихоньку его функциональность в аддон (в 0.10 перенёс новые скриптовые функции).
0.10.2 в классике это хотфикс релиз, который я ещё не публиковал официально. Через неделю вернусь из отпуска, сделаю ещё несколько изменений и зарелижу как 0.10.3 сразу.
(23.08.2020, 04:18)Vasial Написал: Всегда было интересно, а вот этот EI_Plugin нельзя включить в стартер? А то к некоторым модам его нужно устанавливать отдельно.
Так же увидел в классик моде версию 1.10.2 это как? https://yadi.sk/d/pDzneB7IbvFVHg/%D0%9F%...0%BB%D0%B8
Да вот переношу как раз потихоньку его функциональность в аддон (в 0.10 перенёс новые скриптовые функции).
0.10.2 в классике это хотфикс релиз, который я ещё не публиковал официально. Через неделю вернусь из отпуска, сделаю ещё несколько изменений и зарелижу как 0.10.3 сразу.
Пнятно, а то я думал мож человек своё что-то пилит.
24.08.2020, 01:37 (Сообщение последний раз редактировалось: 24.08.2020, 02:52 Albeoris.)
Багрепорт 2020.08.24/1
Версия игры: GOG
Если сразу после установки игры (не запуская её!) устновить EIStarter, он НЕ скопирует себе параметры из Nival Interactive (вероятно, потому что их там ещё нет). И при попытке запустить игру появится сообщение с просьбой вставить диск 2.
1. Хотелось бы, чтобы Addon использовал настройки из Nival Interactive. Пока не понимаю, зачем он их дублирует, нарушая нормализацию реестра.
2. Если это невозможно, и во время установки нужных параметров нет, стоит не завершать установку, а выбросить ошибку и попросить пользователя сперва запустить игру.
"Хаос всегда побеждает порядок, поскольку лучше организован." (с) Терри Пратчетт
На оригинальном game.exe этот праметр указан, а вот на скопированном в Starter/Engine - нет. Было бы здорово автоматически выставлять его при установки.
"Хаос всегда побеждает порядок, поскольку лучше организован." (с) Терри Пратчетт
Если выбрать 1280x720x32bit такой проблемы нет.
Оригинальный лаунчер запускает в 1920x1080 без проблем.
Случайно не Windows 10 с включенным масштабированием?
Если в папке стартера в папке Engine в свойствах game.exe установить режим скейлинга приложением (см. скриншот в аттаче), проблема исчезает?
Потому что такая проблема есть при включенном в системе масштабировании.
Visit allods.gipat.ru - best resource about Evil Islands and Rage of Mages series
24.08.2020, 12:49 (Сообщение последний раз редактировалось: 24.08.2020, 13:24 Albeoris.)
(24.08.2020, 09:55)MorgenS Написал: Случайно не Windows 10 с включенным масштабированием?
Если в папке стартера в папке Engine в свойствах game.exe установить режим скейлинга приложением (см. скриншот в аттаче), проблема исчезает?
Всё верно, спасибо!
Было бы здорово, копировать этот параметр для .exe'ка в Starter/Engine/ при установке Addon'а. Фича реквест 2020.08.24/1: Проблема: Бег на дальние дистанции состоит из постоянных остановок для восстановления энергии. Решение: Разрешить восстановление энергии, если персонаж перемещается шагом.
Фича реквест 2020.08.24/2: Проблема: Длительность бафов отображается на отдельной вкладке, на которой отсутствует полоска здоровья (индивидуально - раздражает затемнение модели, не знаю почему). Решение: Отображать маленькие иконки бафов с таймером или визуальным эффектом для оставшегося времени на основной вкладке.
Фича реквест 2020.08.24/3: Проблема: Мгновенное переключение оружия в бою даёт огромное преимущество. Особенно если речь о маге. Решение: Добавить анимацию смены оружия.
Фича реквест 2020.08.24/4: Проблема: Часто для победы над противником не хватает одного удара, но: "вы умерли". Решение: Добавить скрытую особенность, которая срабатывает раз в минуту. Если враг наносит смертельный удар атакой, которая могла бы нанести меньше урона, и его персонаж бы пережил, снижать урон до безопасного значения, оставляя персонажу 1-3 пункта жизни. Это создаст больше ситуаций "чудом выжил". Для начала отката способности персонаж должен закончить бой.
"Хаос всегда побеждает порядок, поскольку лучше организован." (с) Терри Пратчетт
Фича реквест 2020.08.24/5: Проблема: Каждый переход на новую локацию начинается с ориентации камеры на север. Решение: Добавить возможность автоматически ориентировать камеру.
"Хаос всегда побеждает порядок, поскольку лучше организован." (с) Терри Пратчетт
(24.08.2020, 15:19)Albeoris Написал: Demoth
Я правильно понимаю, что стартер перехватывате вызовы и заменяет их на реализацию из addon.dll?
Какой подход вы для этого используете?
Стартер - просто графический интерфейс для выбора мода и настраивания игры/аддона.длл в реестре и для запуска игры таким образом, чтобы в процесс игры подгрузить addon.dll. Сейчас для этого достаточно запустить engine\game.exe вместо обычного, а в качестве рабочей директории процесса указать директорию стартера.
Аддон.длл делает всю полезную работу патча код игры в оперативной памяти.
24.08.2020, 23:18 (Сообщение последний раз редактировалось: 24.08.2020, 23:21 Albeoris.)
(24.08.2020, 18:08)Demoth Написал: чтобы в процесс игры подгрузить addon.dll. Аддон.длл делает всю полезную работу патча код игры в оперативной памяти.
Тот же самый вопрос.
Какой подход использует Addon.dll для модификации / перехвата вызовов?
MS Detours/вручную расставляет джампы/патчит машинный код/что-то ещё?
Интересует последний пункт, вдруг изобрели что-нибудь супер-удобное. о.о
"Хаос всегда побеждает порядок, поскольку лучше организован." (с) Терри Пратчетт
(24.08.2020, 18:08)Demoth Написал: чтобы в процесс игры подгрузить addon.dll. Аддон.длл делает всю полезную работу патча код игры в оперативной памяти.
Тот же самый вопрос.
Какой подход использует Addon.dll для модификации / перехвата вызовов?
MS Detours/вручную расставляет джампы/патчит машинный код/что-то ещё?
Интересует последний пункт, вдруг изобрели что-нибудь супер-удобное. о.о
Да прям какого-то единого подхода нет. Detours/minhook хорошо подходят для перехвата простых (stdcall/cdecl) функций и заменой их своими, но для аддона они, к сожалению, не очень подходят - только какие-то отдельные редкие (редкие именно для аддона) случаи можно решить с их помощью. Если вдруг я ошибаюсь и не знаю каких-то возможностей детурса, с помощью которых можно было бы и остальные аддоновские кейсы решить, то (без иронии) с удовольствием бы про них узнал. Так-то detours шикарнейшая вещь.
Вообще, многие патчи в аддоне тупо патчат отдельные байты оригинального движка (nop-ят оригинальный код, заменяют какой-нибудь push одной константы на push другой константы или всякое в таком духе).
Для более сложных случаев в старом коде аддона сделано просто - замена оригинальной инструкции, которую нужно перехватить, на jmp на naked-функцию (declspec(naked)) с ассемблерной вставкой. Для нового кода я сделал в чём-то похожую на detours либу для
1) перехвата функций,
2) для перехвата конкретных вызовов функций,
3) для перехвата кода внутри функции.
Первый кейс точно можно решить с помощью detours, но не уверен, что он умеет перехватывать thiscall-функции (хотя не удивлюсь, если уже умеет). Второй кейс в общем-то настолько простой, что для этого никакая либа особо не нужна. А вот с третьим кейсом всё намного сложнее и я сильно сомневаюсь, что его можно как-то автоматизировать.
Вот пример третьего случая: https://gist.github.com/koteyur/416a6804...93b8214554
Тут под "как можно автоматизировать" я имею в виду проверку кода, который будет запатчен, правильный выбор позиции оригинального кода (после выполнения хука или перед) и адаптацию этого кода. Поэтому в моей либе предполагается, что тот кто будет писать код сам хорошо понимает, что он делает. Так что в моей либе ничего инновационного нет - простой cpp на 300 строчек кода.
всегда хотел узнать, а реально ли вообще при помощи стартера решить главную проблему одиночной игры - генерация урона перед ударом, ну я про эту классику, когда замахивавшийся персом, сохраняешься, а потом перезагрузками пытаешься выкинуть максимальное число.
25.08.2020, 01:08 (Сообщение последний раз редактировалось: 25.08.2020, 02:11 Albeoris.)
(25.08.2020, 00:03)Demoth Написал: Вот пример третьего случая: https://gist.github.com/koteyur/416a6804...93b8214554
Тут под "как можно автоматизировать" я имею в виду проверку кода, который будет запатчен, правильный выбор позиции оригинального кода (после выполнения хука или перед) и адаптацию этого кода. Поэтому в моей либе предполагается, что тот кто будет писать код сам хорошо понимает, что он делает. Так что в моей либе ничего инновационного нет - простой cpp на 300 строчек кода.
Хм. Пока не понимаю проблемы.
При помощи Detours, мы перенаправляем все вызовы метода в нашу либину и получаем линку на оригинал. К нам приходит вызов, анализируем аргументы, в зависимости от них либо вызываем оригинал, либо выполняем наш хук. Вроде, всё тоже самое?
Единственное, в твоём случае я вижу некоторый контекст, у которого оттопырены значения регистров. В этой области я не силён, но предполагаю, что мы точно также можем получить их значения на момент вызова?
Возможность патчить отдельные инструкции в методах сама по себе интересная, но на мой взгляд очень скрупулёзная. Вытащить его полностью и дело с концом.
Ясно, я вот тоже всё ищу какую-нибудь серебряную пулю, которая может превратить рутину в "я просто пишу код", но всё никак не выходит. >_> И mail, не отвечают ни по одному из официальных ящиков...
P.S. А у тебя не было проблем с Hardware Breakpoint'ами? Выставляю в Cheat Engine бряку на чтение, и игра вылетает при первом же обращении.
(25.08.2020, 00:45)Vasial Написал: всегда хотел узнать, а реально ли вообще при помощи стартера решить главную проблему одиночной игры - генерация урона перед ударом, ну я про эту классику, когда замахивавшийся персом, сохраняешься, а потом перезагрузками пытаешься выкинуть максимальное число.
Насколько я знаю, такой функции нет, но само собой, ничто не мешает это реализовать. Но зачем? Игра уже сейчас представляет собой Save/Load, а ты увеличишь их число в сотни раз. Я бы наоборот отключил сохранение, оставив только автоматическое при переходе между локациями.
Кстати!
Feature Request 2020.08.25/1
Добавить возможность отключить сохранения в одиночной игре, оставив только N последних автосохранений, которые создаются автоматически при переходе между локациями.
"Хаос всегда побеждает порядок, поскольку лучше организован." (с) Терри Пратчетт