Imperium

Behemoth`s Lair

Mod na powtórzenie nieudanej szybkiej walki (autocombatu)

Permalink

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.

Liczba modyfikacji: 6, Ostatnio modyfikowany: dziś, 16:32, Ostatnio modyfikował: mikex

Permalink

Jeśli rzeczywiście stworzyłeś coś takiego to zawsze chciałem coś takiego mieć :)
Zrobiłeś też szybką walkę bez wykorzystania many przez bohaterów - jako kolejna opcja do kliknięcia w menu opcje jak h3 hota?

Ja przetestuje dopiero za 2 dni jeśli gdzieś udostępnisz bo na razie coś innego robię.

Teraz do pełni szczęścia będzie brakować tylko automatycznej karawany do docelowego miasta z przyciskiem włącz/wyłącz

Dzięki, że coś takiego stworzyłeś.

Permalink

Tych funkcji nie wprowadzałem - nie ingerowałem w zachowanie ai podczas automatycznej rozgrywki :)
Na razie krew mnie zalewała, jak w późniejszych rozgrywkach szybka walka robiła chore straty w jednostkach i bez zapisu przed walką trzeba było wczytywać autozapis rundy i całą rundę odtwarzać.

Jak będzie większe zapotrzebowanie na to o czym napisałeś, to sprawdzę czy będę umiał takie coś stworzyć.
Na razie walczę jeszcze z powiększeniem menu postaci, żeby artefakty dało się sortować i wyświetlać w siatce 5x5 zamiast 2x5.

Na forum jestem nowy i nie wiem jakie są tutaj zasady wrzucania plików. Czy mogę to wrzucać na jakiś zewnętrzny serwer, czy admini jaskini muszą najpierw jakoś zaakceptować pliki i wrzucić to u siebie?

Na pewno przyda się z początku kilku testerów moda, żeby sprawdzić, czy na innych komputerach i wersjach gry ten mój mod będzie działał poprawnie. U mnie jest 10/10, nie ma żadnych crashy, błędów, a oszczędzam sporo czasu na tym, że nie muszę tracić dużej ilości czasu na samodzielne walki z obawy, że AI narobi strat.

Liczba modyfikacji: 1, Ostatnio modyfikowany: dziś, 14:39, Ostatnio modyfikował: mikex

Permalink

Chyba Tabris zajmuje się utrzymaniem strony heroes IV tutaj na jaskini behemota

W sumie dobrze, że wspomniałeś o ekwipunku może byłbyś w stanie zrobić aby przedmioty stakowały się jak mikstury.
Bo domyślam się, żeby zwoje i pergaminy miały ikony jak w hota to raczej trzeba by robić dla każdego zwoju inną ikonę zamiast domyślnej tak samo jak w heroes 3

I w sumie w VCMI spodobało mi się powiększenie interface

Liczba modyfikacji: 1, Ostatnio modyfikowany: dziś, 14:46, Ostatnio modyfikował: HSII

Permalink

Dobra, forum wydaje się mało uczęszczane, wiec pewnie kolejne odpowiedzi będą się długo pojawiały, dlatego żebyś nie musiał czekać, to przesyłam link do plików - https://github.com/mikex1993/heroes4-retry-auto-combat/

Poniżej wrzucam screeny jak to powinno wyglądać po instalacji :)

Podsumowanie szybkiej walki

Walka po odrzuceniu wyniku szybkiej walki

Edit: Funkcja na razie dotyczy tylko szybkiej walki, testuję jeszcze wersję powtórzenia każdej walki, nie tylko tej szybkiej.
Przy źle rozegranej manualnej bitwie fajnie by było od razu rozegrać ją na nowo, żeby inaczej rozmieścić wojska itp.
Teoretycznie już działa, ale rollowanie morali i podział jednostek przeciwnika dalej jest losowy na początku bitwy. Chcę zrobić to "uczciwie", żeby gracz nie powtarzał cały czas bitwy w nadziei na lepszego rolla na początku bitwy.

Liczba modyfikacji: 6, Ostatnio modyfikowany: dziś, 16:58, Ostatnio modyfikował: mikex