Siemka,
ostatnio, żeby trochę odpocząć od H3, zacząłem pogrywać w Heroes IV. Przyzwyczajony do HotA i HD Moda, dość szybko zacząłem odczuwać brak jednej bardzo wygodnej funkcji - możliwości odrzucenia wyniku szybkiej walki i rozegrania jej samemu, kiedy Auto Combat narobi jakichś absurdalnych strat. :)
Dlatego zrobiłem małego moda współpracującego z High Resolution Modem do Heroes IV.
Po zakończeniu szybkiej walki i wyświetleniu okna z jej wynikiem pojawia się dodatkowy przycisk „X”. Kliknięcie go odrzuca wynik Auto Combatu i pozwala od razu rozegrać tę samą walkę ręcznie.
✓ - akceptuje wynik Auto Combatu tak jak w oryginalnej grze.
X / Esc - odrzuca wynik Auto Combatu i uruchamia tę samą walkę ręcznie, z armiami w stanie sprzed symulacji.
Weterani HotA i HD Moda w H3 pewnie od razu wiedzą, o jaki mechanizm chodzi. :)
Na razie zrobiłem go głównie dla siebie, ale jeśli ktoś z Was byłby zainteresowany, mogę go tutaj udostępnić.
Ktoś chętny?
Jeśli tak, napiszcie proszę, w jaki sposób mogę przekazać moda administratorom strony, żeby mogli go przetestować i ewentualnie wrzucić do biblioteki modów.
Kompatybilność:
Heroes IV Complete z GOG + High Resolution Mod.
--
Dla modderów - jak działa mod
Mod nie korzysta z mechanizmu save/load i nie tworzy kopii całych struktur bohaterów ani armii.
Zamiast cofać wynik Auto Combatu, przechwytuje moment pomiędzy obliczeniem wyniku walki a faktycznym naniesieniem tego wyniku na rzeczywisty stan armii.
Oryginalny mechanizm Heroes IV
W uproszczeniu wygląda on tak:
Auto Combat
|
v
obliczenie wyniku i strat
|
v
zastosowanie wyniku do rzeczywistych stosów jednostek
|
v
aktualizacja i finalizacja stanu armii
|
v
wyświetlenie okna "Wynik walki"
Oznacza to, że w chwili wyświetlenia podsumowania wynik szybkiej walki jest już faktycznie zastosowany do armii.
Mechanizm po zastosowaniu moda
Auto Combat
|
v
obliczenie wyniku i strat
|
v
przygotowanie danych potrzebnych do wyświetlenia strat
|
v
przechwycenie operacji modyfikujących rzeczywiste armie
|
v
wyświetlenie okna "Wynik walki"
|
v
decyzja gracza
/
/
X ✓
Heroes IV nadal wykonuje normalną symulację Auto Combatu i przygotowuje dane o poległych jednostkach, dzięki czemu standardowe okno wyniku może pokazać prawidłowe straty.
Mod przechwytuje natomiast późniejsze wywołania silnika odpowiedzialne za faktyczne zastosowanie wyniku symulacji do prawdziwych stosów jednostek.
Wywołania te wraz z ich oryginalnymi argumentami są tymczasowo przechowywane w RAM-ie.
Po kliknięciu ✓
Przechwycone wywołania są wykonywane w oryginalnej kolejności.
✓ | v wykonanie przechwyconych operacji | v zastosowanie strat do armii | v aktualizacja stanu armii | v finalizacja wyniku Auto Combatu
Z punktu widzenia gry rezultat jest więc taki sam jak przy standardowym zaakceptowaniu szybkiej walki.
Po kliknięciu X / Esc
Przechwycone operacje są odrzucane i nigdy nie zostają wykonane.
X / Esc | v odrzucenie przechwyconych operacji | v rzeczywiste armie pozostają niezmienione | v przejście do standardowej ścieżki ręcznej walki
Dzięki temu ręczna walka rozpoczyna się z jednostkami w stanie sprzed Auto Combatu.
Technicznie X nie „cofa” więc wykonanej walki. Gra normalnie oblicza wynik symulacji, ale mod zatrzymuje operacje, które miałyby ten wynik zapisać do rzeczywistych armii.
Interfejs
Przycisk X korzysta z natywnego elementu
cancel_button
interfejsu Heroes IV i jest dodany bezpośrednio do standardowego okna wyników walki.
Nie jest to osobne okno Windows ani zewnętrzna nakładka na grę.
Technicznie
Mod jest 32-bitowym modułem
.mod
ładowanym przez loader DDRAW wykorzystywany przez High Resolution Mod.
Patchowane są konkretne fragmenty
heroes4.exe
, dlatego obecna wersja jest przygotowana pod konkretny build Heroes IV Complete z GOG.