Wake of Gods Forum | Форум Во Имя Богов
Настройка состояния условий генерации случайной карты - Printable Version

+- Wake of Gods Forum | Форум Во Имя Богов (http://wforum.heroes35.net)
+-- Forum: Герои Меча и Магии 3.5 WoG/ERA (/forumdisplay.php?fid=99)
+--- Forum: Моды (/forumdisplay.php?fid=104)
+---- Forum: Теория, идеи, обсуждение (/forumdisplay.php?fid=184)
+---- Thread: Настройка состояния условий генерации случайной карты (/showthread.php?tid=5750)


Настройка состояния условий генерации случайной карты - igrik - 17.05.2012 16:40

Давно зрел вопрос: где и что (скорее всего в текстовике в лоде.... /ну всё же/) нужно изменить, чтобы автоматически по умолчанию в генерации случайной карты в игре выставлялись опции: размер карты XL, подземелье - есть, 2 игрока-человека, 6 только компьютеров, воды - нет, монстры - сильные, сложность - 200% ?
Задолбаешься всё выставлять блин, пока нормальную рендомную карту создашь...Fie


RE: Разные вопросы - Berserker - 17.05.2012 16:59

Угу, согласен.


RE: Разные вопросы - igrik - 17.05.2012 20:44

Возможно всё-таки это зашито в екзешнике. Очень жаль.
Я почему спросил: увидил пост baratorch'a
Quote: HoMM 3: High Resolution Project - 3.0 beta 10:
[!] теперь в RMG по умолчанию выставляются опции: 2 игрока-человека, 0 только компьютеров, воды - нет, монстры - сильные, сложность - 180%
и обнадеялся, что это сделать легко и просто. Да уж, рано я то слюнки пустил...


RE: Разные вопросы - Berserker - 17.05.2012 21:00

Так надо бару спросить по адресам и всего-то.


RE: Разные вопросы - gamecreator - 20.05.2012 00:51

(17.05.2012 21:00)Berserker Wrote:  Так надо бару спросить по адресам и всего-то.

можно даже через артмани нарыть, думаю


RE: Разные вопросы - igrik - 20.05.2012 23:36

(20.05.2012 00:51)gamecreator Wrote:  можно даже через артмани нарыть, думаю

Пробовал в артмани через "поиск неизвестного значения". Там выбивало около 600 адресов (после так 50-го отсеивания, после которого кстати к-во адресов перестает уменьшаться), и все меняли свои параметры . Так это только при изменении размера карты, а если учесть настроки с водой или без, сила монстров, кол-компов. Короче всё равно что иголку в стоге сена.


RE: Разные вопросы - SyDr - 21.05.2012 09:27

igrik, для кнопки сложность "всего лишь" 26 адресов. После перезагрузки игры живы только 8. И 4 из них не меняются.

Причём для изменения сложности достаточно изменения всего одного (остальные меняются автоматом):
006834A1

Значения:
0 (80%)
16777216
33554432
50331648
67108864 (200%)

Ну при этом картинка не меняется (и значение по умолчанию тоже).

Впрочем, после экспериментов, у меня теперь всё глючит:
Имя сложности Impossible для стандартных карт независимо от выбранного значения.
Переключается на Normal для случайных карт.

Перезапуск игры ситуацию не меняет. Получается, что сама игра зависит от того, какой будет мусор в памяти после её запуска. Печально.


RE: Разные вопросы - igrik - 21.05.2012 15:56

Перезапуск игры: это выход из игры и её запуск заново / или выход в основное меню и загрузка новой карты? Так, интересно просто))

Я пробовал менять параметры (при выборе размера карты) так на обум. Ошибки не выбивало, и карта нормально грузилась на том размере карты, который я устанавливал. Хотя я думал, что будут вылеты. Но с перезапуском (выход в основное меню и загрузка новой карты) не пробовал. Только выход из игры делал.


RE: Разные вопросы - SyDr - 21.05.2012 17:18

igrik, да, полный выход из игры.


RE: Разные вопросы - Sav - 21.05.2012 18:07

По адресу 0x6834A1 не может изначально быть мусора. Это статический адрес и либо у него есть предустановленное значение, либо там 0. Мусор мог прописаться разве что в какие-то конфиги.


RE: Разные вопросы - igrik - 21.05.2012 23:21

для ERA 1.9
Я нашёл всего 2 адреса для уровня сложности. Это - 006834A4 и 0462F720 (Скорее всего статичные, я в жтом не разбираюсь). Оба принимают одинаковые параметры (от 0 до 4). Если заморозить значение по этим адресам, то рейтинг пишет 200%, хотя сложность можно поставить на пешку (получается пешка с рейтингом 200% вместо 80%), но карта загружается на сложности "Король".

Теперь самое интересное:
команда !!UN:J2 привязана к адресу 006834A4
но сложность игры (что подтверждается сохранением и загрузкой карты) считывается с адреса 0462F720.
Т.е. загрузил карту на сложности "конь" (1).
Через артмани видно что оба адреса показывают уровень сложности "1". команда !!UN:J2 тоже пишет "1". Через неё же (!!UN:J2) меняю сложность на "Король" "4". Захожу в "информация о сценарии" сложность стоит на "коне", хотя !!UN:J2 говорит о сложности №4. Если сохраниться в данном месте и загрузить сейв карты, то сложность будет "конь".
Но если в артмани перед сохранением поменять сложность по адресу 0462F720 то при загрузке сложность считается из адреса 0462F720 в адрес 006834A4.

Как отловить размер карты и наличие воды, пока ума не приложу. Хотя может попробовать анологично


RE: Разные вопросы - gamecreator - 21.05.2012 23:35

4... - это динамический, слишком большой адрес для статического.
6... - статический.
если артмани показывает загруженные модули, то в окне памяти можно увидеть где статический (туда грузится инфа из файлов, динамические области памяти выделяются уже по ходу дела)

а размер карты и воды скорее всего рядом


RE: Разные вопросы - igrik - 22.05.2012 00:49

Вот остальные адреса (повторюсь что адреса найдены на ERA 1.9):

--------------------------
0022A0CC - размер карты
хранит параметр:
С - 36
M - 72
L - 108
XL - 144

После генерации карты данный адрес начинает использоваться для чего-то другого. если его заморозить на уже созданной карте (или изменить) то моментально последует вылет из игры.

Интересно, что этот адрес для Wog3.58f используется для выбора "Команды компьютеров или людей"
диапазон от 0 до 7 для 1 - 8 команд соответсвенно, 255 для случайного выбора команд
----------------------------
0022A0E4 - вода
хранит параметр:
нет - 0
норм. - 1
острова - 2
случайно - 3
---------------------------
0022A0E8 - сила монстров
хранит параметр:
слаб - 0
норм. - 1
сильн. - 3
случайно - 255
---------------------------
Установку количества игроков сложно объяснить - нужно видеть.
Если кому интересно, то найденные таблицы ArtMoney тут!
Вопрос: как теперь это можно использовать чтобы автоматически стояли интересующие настройки при запуске игры?

Сорри за оффтоп.


RE: Разные вопросы - gamecreator - 22.05.2012 00:55

возьми соседние с этим адресом пару десятков байт и поищи в ехе какой-нибудь прогой типа winhex. подставь интересующие значения.


RE: Разные вопросы - Sav - 22.05.2012 01:11

Эти все адреса динамические и могут быть разными на разных машинах. Нужно найти, откуда в них копируются значения. Подозреваю, что эти адреса вообще из структуры диалога, тогда поиск по exe не поможет. Но, возможно, и не так.


RE: Разные вопросы - gamecreator - 22.05.2012 01:45

igrik, чтобы узнать откуда они копируются, нужно в дебагере (подойдет OllyDbg) поставить точку останова (breakpoint) на эту область памяти и посмотреть какой код когда и что туда пишет. как увидишь, что записываются дефолтные значения - смотри откуда они записываются (если они прямо в коде прописаны, то посмотри на байтовое представление (в OllyDbg слева от кода) и там будет это число). как найдешь место - можно уже искать так, как я говорил.


RE: Разные вопросы - igrik - 22.05.2012 10:15

Спасибо. Хоть вообще в данной области не разбираюсь, но попоробую.
***********
Пробовал, ничего не получилось хоть тресни Dash1 Ламо я в этом деле.
Пытался по адресу 0022A0CC - размер карты чегось надыбать. Чёрт с ним в общем.



RE: Разные вопросы - gamecreator - 23.05.2012 23:22

это же точка останова для кода. чтобы поставить точку останова для памяти нужно выделить интересующую область памяти (в просмотрщике памяти внизу слева) и нажать пкм. в открывшемся меню и будет точка останова (кажется, в каком-то подменю).


RE: Разные вопросы - igrik - 24.05.2012 00:01

Как я понимаю "Точка остановки" - это "Breakpoint". С тем как поставить брекпоинт я разобрался. Да, он есть в подменю. Я его поставил на интересующий меня адрес памяти - на втором скрине он выделен красным. Но я не понимаю, что делать дальше.

Впрочем не буду парить себе и Вам мозг. Для меня эта "Оля" (читал о ней) темный лес как и все эти:"add", "bite", "PTR", "DS:", "[EAX]". Так что закрою эту тему.


RE: Разные вопросы - kostya_76 - 24.05.2012 01:20

(22.05.2012 01:11)Sav Wrote:  Эти все адреса динамические и могут быть разными на разных машинах. Нужно найти, откуда в них копируются значения. Подозреваю, что эти адреса вообще из структуры диалога, тогда поиск по exe не поможет. Но, возможно, и не так.

Это, собственно говоря, стэк.

Начало таблицы с настройками генератора передается в функции которые с ними работают. Например, в программе создания зеркальных карт я получал настройки следующим образом:

Вклинивался по адресу 0x5863ba - в начало функции считывания настроек генератора после нажатия кнопки "начать". Собственно, что там делает эта функция не важно, но адрес начала таблицы с настройками находится в ECX. Дальше адреса настроек, задаются смещением от начала таблицы:
   ptrRacePlayer1 = (unsigned int*) (adrTabOptionGen + 0x1088);
    ptrRacePlayer2 = (unsigned int*) (adrTabOptionGen + 0x1104);
    ptrHeroPlayer1 = (unsigned int*) (adrTabOptionGen + 0x1084);
    ptrHeroPlayer2 = (unsigned int*) (adrTabOptionGen + 0x1100);
и т.д.

igrik Wrote:Вопрос: как теперь это можно использовать чтобы автоматически стояли интересующие настройки при запуске игры?

Если нужно менять настройки до запуска генератора, вероятно нужно вклиниваться в код сразу после нажатия кнопки "случайная карта". Найти, где задается адрес начала таблицы, и менять настройки.

А по Оле есть хорошее руководство: «Введение в крэкинг с помощью OllyDbg».


RE: Разные вопросы - gamecreator - 25.05.2012 00:08

(24.05.2012 00:01)igrik Wrote:  Я его поставил на интересующий меня адрес памяти
нет! ты поставил его на интересующую тебя команду ассемблера! вот только по адресу находится не код.


RE: Вопросы по моддингу - totkotoriy - 30.10.2018 17:42

Ну так что, можно как-нибудь задать стартовые настройки карты (например сложность высокая, 2 команды компьютера, 2 компьютера), чтоб постоянно не изменять на нужные?


RE: Вопросы по моддингу - igrik - 30.10.2018 21:50

В какой именно момент? При старте карты (когда она уже загружается) или в экране выбора карты/случайной карты?


RE: Вопросы по моддингу - totkotoriy - 30.10.2018 22:47

На экране выбора карты, настройки карты и команд


RE: Вопросы по моддингу - igrik - 30.10.2018 22:52

Я могу дать адрес только для настройки сложности (для создания бин патча или редактировании винхексом экзешника). 0x6834A4
Всё остальное не сделать ни скриптом, ни бинарником, ни хексом. Только плагином (dll). Увы.


RE: Вопросы по моддингу - totkotoriy - 31.10.2018 00:31

Всё равно спасибо!