Возможно, удастся записывать бои!

Если вас что-то интересует по Героям 4, то вам сюда
Текущая версия HoMM4: Equilibris 3.51
Ответить
Atos
Zealot
Zealot
Сообщения: 58
Зарегистрирован: 6 май 2005, 12:54
Откуда: Омск

12 апр 2006, 10:06Сообщение

кодил недавно с использованием WinAPI, что натолкнуло на одну идею.
Срочно надо выяснить, лаким образом производится игрой вероятностные действия в бою (выпадение морали, точное значение урона при ударе, и т. д.)? несолько экспериментов на боевой карте, запускаемой c одного и того же сейва позволили выдвинуть гипотезу: эти вероятностные значения при одних и тех же действиях игрока зависят только от времени, потраченного игроком на обдумывание очередного действия, т. е. идеально воспроизведя все действия и выдержав ровно такие же паузы между ходами, мы вроде бы можем добиться полного повтора боя! (а по наблюдениям можно выдвинуть и более смелое утверждение: события повторяются даже вне зависимости от скорости боя, выставленной в настройках, главное - точно выдерживать паузы между ходами) Если у кого-нибудь найдётся время потестированть, - помогите подтвердить или опровергнуть гипотезу!
A если предположение относительно псевдорандомности в бою подтвердится, то это будет ознначать, что возможно осуществить давную мечту героистов - запись и повтор боёв!! поставить хук на мышь и консоль во время боя, и записывать все действия , а потом воспроизводить в том же темпе... :o

Chameleon
Azure Dragon
Почетный член КС — Honored Member
Почетный член КС — Honored Member
Сообщения: 6063
Зарегистрирован: 22 дек 2002, 13:40
Откуда: Петрозаводск
Контактная информация:

12 апр 2006, 12:36Сообщение

Интересняа теория, то какая точность? Ведь алгоритмов и правда никто не знает :(
CMEPTb, Little Angel of Death
"Если ничто другое не помогает, прочтите, наконец, инструкцию." - Аксиома Кана

Аватара пользователя
Ups_Domas
Fairy Dragon
Fairy Dragon
Сообщения: 789
Зарегистрирован: 29 май 2003, 16:17
Откуда: Lithuania, Klaipeda
Контактная информация:

12 апр 2006, 13:06Сообщение

да было время гдето читал про псевдо рандом цыфры - т.е. все знаем что комп может выдасть вам рендом число - оказываеться что ето число на прямую зависит от даты времени нажатия клавишы (или изполнению команды) всё какбы и хорошё но сколько помниться что нынешние компики производят больше чем 100000 команд в секунду и столько же вариацый времени ну и псевдо рандом цыфры. Если в Героях похожый алгоритм (т.е. просто взята рандом цыфра) то кликай сколько угодно всё равно непопадёш :wink:

но вот мне другая мысля пришла на чсёт рандомности в боях - можно поймать момент в бою когда повторяеться и удар и т.д. но зависимость идёт от превыдущих событий - т.е. ето очень похоже на линейку повышалку - лубая магия невозможна - 3000 а только 3210 и ето также в бою если ты чтото сделал на пример топронул минотавра то срабатывание ево зашиты повышаеться на второй удар ну а если ты таво же минотавра пнул спелом то на следующий топор реже сработает резист минотавра ну и т.д. :wink:

ну ето только мои замечяния :wink:
Если ты становишься, похож на фотографию в паспорте, значит тебе пора в отпуск.
Изображение

Atos
Zealot
Zealot
Сообщения: 58
Зарегистрирован: 6 май 2005, 12:54
Откуда: Омск

12 апр 2006, 13:30Сообщение

всё какбы и хорошё но сколько помниться что нынешние компики производят больше чем 100000 команд в секунду и столько же вариацый времени ну и псевдо рандом цыфры. Если в Героях похожый алгоритм (т.е. просто взята рандом цыфра) то кликай сколько угодно всё равно непопадёш
Мне вроде бы удавалось попадать в течении нескольких раундов. Я поэтому и прошу - потестируйте, кому не лень, чтобы вместе прийти к каким-то выводам.

Atos
Zealot
Zealot
Сообщения: 58
Зарегистрирован: 6 май 2005, 12:54
Откуда: Омск

17 апр 2006, 08:35Сообщение

УРА-А!
Все ожидания оправдались! Бои повторять можно!

Итак, для контрольного эксперимента напал 50 гидрами на 100 нейтральных гидр, сразу сохранился, и начал работать с сейвом. Набросал простеньких код, 10 раз с интервалами в 3 секунды эмулирующий клик мыши. Теперь надо было запустить программку, успеть развернуть Героев, загрузить сейв и передвинуть мышку на кнопку "Защищаться". Скорость боя поставил 4, чтобы было видно всплывающее точное значение урона. Гидры противника подходили и начинали выносить моих, а программка сама "вела бой", кликая на защиту. Но никак не получалось синхронизировать запуск программки с загрузокй сейва. Тогда модифицирую код: пауза в 10 сек, эмуляция двойного клика мышки, а уже потом в цикле пауза 3 секунды - клик. Теперь, внмание! запускаю программу, разворачиваю Героев, ставлю мышку на название нужного сейва в меню "Загрузить игру", и программка сама загружает сейв! теперь опять передвигаем мышку на "Защищаться", и бой идёт... но теперь вся последовательность "случайных" значения урона и выпадения морали зафиксировалась, и повторяется каждый раз при подобном запуске!! :P

Таким образом, на пути создания полноценного CombatRecorder'а лежат лишь чисто технические проблемы (рассинхронизация, скорость, разрешение и т. п.), с которыми тоже вполне реально разобраться.
Нет ли здесь людей с опытом програмирования, желающих поддержать идею? Я и сам, пожалуй, справлюсь, но, во-первых, честно говоря, у меня почти нет опыта работы с хуками и WinAPI, работал в основном с прикладными прораммами и математическими алгоритмами, так что потребуется время, а, во-вторых, что самое главное, времени-то почти и нет, экзамены, курсовая, да ещё в участие в ТМ, не знаю даже, как на него время выкраивать... :? (впрочем, возможно, это последняя возможность поиграть в турнире, так как, боюсь, потом времени станет ещё меньше... )

Oxygen
Black Dragon
Почетный член КС — Honored Member
Почетный член КС — Honored Member
Сообщения: 3386
Зарегистрирован: 19 окт 2002, 14:53
Откуда: Москва
Контактная информация:

17 апр 2006, 11:46Сообщение

Это хорошая новость. Очень интересно было бы взглянуть как оно работает.
Голова - это то место, которым мы думаем, что мы думаем.

Аватара пользователя
Hoher
Fairy Dragon
Fairy Dragon
Сообщения: 696
Зарегистрирован: 16 сен 2002, 18:35
Контактная информация:

17 апр 2006, 14:07Сообщение

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

Atos
Zealot
Zealot
Сообщения: 58
Зарегистрирован: 6 май 2005, 12:54
Откуда: Омск

17 апр 2006, 14:25Сообщение

Да, технических трудностей много. Не удастся, к сожалению, записывать бои по сети... Насчёт разных компов как раз особой проблемы нет - если одинаковое разрешение и у обоих достаточная мощность, то не вижу, в чём может проявиться разница. Впрочем, конечно, надо будет проверить.

Iron Axe
Crusader
Crusader
Сообщения: 35
Зарегистрирован: 11 мар 2005, 16:26

18 авг 2006, 08:44Сообщение

Hoher писал(а):Чтобы повторился псевдорэндом описанный в этой теме необходимо выполнять много условностей, например:
обязательно сохранится как только попал в битву, загрузится с этого сейва, запустить прогу записи кликов, и выиграть данный бой без сейв-лоадов, (если нужен лоад - то делать его только с начального сейва и перезапускать прогу). При этом совершенно не факт что на другом компе сейв будет повторять действия.
Вы все правильно говорите, окромя последней фразы. Что значит НЕ ФАКТ что на другом компе сейв будет повторять действие ? Вы хотите сказать что одни и те же программы работают на разных компутерах по разному. Это легко проверить. Выложите на форуме какой-нить сейв перед нападением. Укажите координату на карте куда нападать. Выложите скриншот начало боя. Пусть участники форума скачают данный сейв и на своих компах cверят полученное у себя поле боя с вашим скриншотом. Уверен, если ничо дергать в сейве не будут, а сразу нападут в указанную точку - поле будет один в один ! Уж если рандом отрисует все в точности до последнего камушка и кустика на разных компах, то другие действия с сейва тоже также повторяться на разных компах.
Слабо эксперимент провести ?

Iron Axe
Crusader
Crusader
Сообщения: 35
Зарегистрирован: 11 мар 2005, 16:26

18 авг 2006, 09:04Сообщение

Atos писал(а):Да, технических трудностей много. Не удастся, к сожалению, записывать бои по сети... Насчёт разных компов как раз особой проблемы нет - если одинаковое разрешение и у обоих достаточная мощность, то не вижу, в чём может проявиться разница. Впрочем, конечно, надо будет проверить.
Ваша идея тупиковая, но не совсем. Сами говорите, что по сети не удасться записывать, то есть там где как раз лоад/сейв не делают.А про лоад/сейв в офлайнах Вам Hoher сказал что не выйдет записи. Но он имеет ввиду ПОЛНОЙ записи боя вследствии применения лоад/сейва в бою. Я вижу единственное применение, это запись части боя, допустим переломного момента в бою или зацикливание длинного нудного боя и записи пары циклов.
Офлайнщик загрузится с любого своего сейва сделанного в бою и зная что если с этого места он будет делать определенную последовательность действий, то этот участок боя будет выполняться в точности как прошлый раз. Трудность будет вызывать именно точность перемещений юнитов вплоть до клеточки. Но тем не менее можно все же сделать запись пары циклов боя. Для чего это можно применить ? Использовать при проверке прохождений сложных битв, где куча мала из кучи отрядов или когда берутся крепости когда компутер тупит не желая выходить из крепости а предпочитает потихоньку дохнуть от яда за стенами. На самом деле это такую часть битвы легче ПОКАЗАТЬ чем описать словами. Да к тому ГЛАЗАМ верят больше чем УШАМ :)

Ответить