Berserker
Posts: 16657
|
|
08.02.2021 19:33 |
|
Berserker
Posts: 16657
|
|
08.02.2021 20:14 |
|
daemon_n
Posts: 4343
|
Berserker, тогда просто вернуть "повторяемость".
И не только в бою, если возможно - хотя остальные объекты можно защитить "грамотным скриптингом" в начале карты. Та же "книга заклинаний", которая генерирует совершенно рандомныые заклинания каждый раз, когда ты её поднимаешь.
И всё же. Смотрю на пример Хота и переигровка битвы.
Там мы получаем всегда один результат в точном повторении действий в битве.
Но вопрос мой такой:
Почему ты отменил внесённое ранее сохранение ГСЧ? Было ведь даже особо объявлено, а лично мной принято с восторгом. Каковы же причины возврата?
Новейший Heroes Launcher
|
|
08.02.2021 20:23 |
|
Berserker
Posts: 16657
|
Дима, ну где сохранять состояние ГСЧ? В воздухе? В Хоте используется корявый родной генератор на простой хэш функции от текущего времени в миллисекундах. Состояние генератора — 4 байта простив 1000+ у Вихря Мерсенна. Его инициализация происходит до боя и при переигровке в фиксированное значение, которое получается из набора параметров, вроде координат боя. Ровно так, как сейчас работает генерация препятствий в бою. В сохранённой игре состояние генератора не запоминается. Потому, если хочется детерминированности, то делается это скриптом ровно схожим макаром: принудительная инициализация ГСЧ хэшем от набора фиксированных параметров.
У меня в моде Смешанные Нейтралы схожим образом реализована случайная расстановка отрядов.
Подсказываю как сделать:
Получаешь фикс. параметры x, y, z, leftHero, rightHero, day. Можешь взять другие.
Получаешь первый хэш = x OR (y SHL 8) OR (z SHL 16)
Получаешь второй хэш = (leftHero SHL 4) OR (rightHero SHL 12) OR (day SHL 20).
Получаешь комбинированный хэш = первый_хэш XOR второй_хэш XOR случайное_число_карты
Вызываешь Tm32Encode из Era Erm Framework для получения конечного хэша от комбинированного
Вызываешь VR:R0/хэш T0/хэш для установки ГСЧ в фиксированное значение.
Хэш можешь рассчитать в OnBattlefieldVisible с приоритетом 999 у скрипта. Его же использовать в OnBeforeBattleReplay, например. Нужно тестировать и смотреть очерёдность событий.
Случайное число карты генерируешь при старте игры.
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|
|
08.02.2021 21:09 |
|
daemon_n
Posts: 4343
|
|
08.02.2021 21:43 |
|
Berserker
Posts: 16657
|
|
08.02.2021 22:04 |
|
daemon_n
Posts: 4343
|
Для бинарников не работает проверка через !!SN:L; - так понимаю, и не должна?
Однако-таки есть возможность их определить:
Новейший Heroes Launcher
|
|
09.02.2021 14:22 |
|
daemon_n
Posts: 4343
|
|
09.02.2021 16:31 |
|
Raistlin
Posts: 1349
|
XEPOMAHT, хорошо, я понял. Единственное, в новый ехе придется ведь подгрузить era.dll и еще пару библиотек? Если да, то как это сделать? Вот так получится?
Code:
call loadlib
db "mydll.dll", 0
Code:
loadlib:
call LoadLibraryA
jmp OriginalEntryPoint
daemon_n, возможно. Меня просто на эксперименты тянет, да и делать прямо сейчас это необязательно - не получится, так не получится. Зато мы все потом будем это знать ))
Создал новый глобальный мод: WoG Ultra Edition
(This post was last modified: 12.02.2021 14:31 by Raistlin.)
|
|
12.02.2021 14:28 |
|