Kwasowa Grota Heroes VIIMight & Magic XHeroes III - Board GameHorn of the AbyssHistoria Światów MMSkarbiecCzat
Cmentarz jest opustoszały
Witaj Nieznajomy!
zaloguj się    załóż konto
Niebiańska Kuźnia  (WoG, HotA, VCMI)temat: [HD mod] Tworzenie pluginów
komnata: Niebiańska Kuźnia (WoG, HotA, VCMI)

Ginden PW
25 października 2017, 01:49
Bezczelnie i luźno przetłumaczone z tego tematu.

Znajomość C niezbędna.

Moje uwagi zaznaczone żółtym.

1. Zainstaluj Visual Studio. W temacie proponują Visual Studio Express 2008 (download ze strony Microsoftu), ale podejrzewam że 2017 też zadziała.

2. Pobierz plik patcher_x86.zip. Zawiera on jeden plik, patcher_x86.hpp. To plik nagłówkowy C++ z kodowaniem Windows-1251, ma pełno komentarzy po rosyjsku. Gist. Znalazłem też wersję z angielskimi komentarzami: tutaj

3. W Visual Studio utwórz nowy projekt. Plik => Nowy => Projekt => Visual C++ => Aplikacje klasyczne systemu Windows => Biblioteka dołączana dynamicznie (DLL). Zapamiętaj adres folderu, to ważne.

4. Po lewej (u mnie po prawej, ale ja mam 2017) masz eksplorator rozwiązań.

5. Otwierasz plik dllmain.cpp i wklejasz tam zawartość stąd.

6. Ctrl + S

7. Nad kodem widzisz pewnie dropdown z zaznaczonym "Debug". Zmień na "Release", wciśnij F7 (u mnie Ctrl + Shift + B).

8. Przenieś plik NazwaTwojegoProjektu.dll z folderu Release do folderu _HD3_Data\Packs\NazwaTwojegoProjektu w katalogu Heroesa 3.

9. Gotowe. Co robi mod jest zostawione do sprawdzenia przez czytelnika.

Dodatkowe zasoby:
- wątek na Heroes Community.
- RoseKavalier//h3_plugins/includes na GitHubie - bardzo polecam.

Konkrety jak co zmieniać może kiedyś napiszę, niekoniecznie będzie mi się chciało.

avatar PW
25 października 2017, 09:17
No nareszcie się ktoś w Polsce tym zaczyna zajmować:) Wróżę tym pluginom niezłą przyszłość, jako kolejnej gałęzi modderskiej do h3.
Tak w ogóle, to chcę nieśmiało powiedzieć, że najnowsza wersja tego pluginu zawiera moja pożal-się-boże tłumaczenie :)

Dydzio PW
25 października 2017, 17:28
Przeglądnąłem kod i już widzę, że nie ma to w praktyce żadnej przyszłości. Taki tam upraszczacz dll injection, a i tak bardzo mało ludzi ogarnie o co chodzi z działaniem patcher_x86. W tym patcherze nie ma nic rewolucyjnego - implementuje najbardziej niskopoziomowe akcje do patchowania programów np. hookowania funkcji.
Temat pokroju "nie wiem co to ale mam hype" :D

Co do zawartości całego "moda" to zdecydowana większość rzeczy to spatchowanie pojedynczych bajtów w heroes3.exe

EDIT:
Nie popatrzyłem na github, ale z tego co widzę niewiele tam ciekawego. W scenie H3 poza teamami które coś robią ludzie nie ogarniają podstaw programowania a co dopiero tego typu rzeczy. Widzę adresy funkcji do paru rzeczy z h3, 60% plików to same enumy, widzę rzeczy z kodu woga "odkryte" na nowo. Możliwości tego są ograniczone, a produktywność z takim moddingiem niska.

W przykładzie z witch hutem też nie ma wielkiej filozofii. Bez żadnych pluginów idzie to napisać w 1 dzień, wystarczy wziąć użyte adresy, napisać naszą zapasową funkcję do obsługi witch huta, w dllmain podmienić za pomocą WriteProcessMemory prolog funkcji obsługi witch hut z
"push ebp
mov ebp, esp
sub esp, N" gdzie N to liczba bajtów zarezerwowanych na zmienne lokalne
na
"push (adres funkcji w naszym kodzie)
ret", i robimy kopię zapasową oryginału
jeśli chcemy wywołać oryginalną procedurę należy przywrócić oryginalne bajty (push ebp...) wywołujemy ją poprzez wskaźnik na funkcję na samym końcu i potem spowrotem psujemy funkcję tak by odwoływała się do naszego kodu. Jakoś tak to szło, dawno nie zaglądałem do tego tematu. No i oczywiście trzeba zrobić dll injection.

Ginden PW
25 października 2017, 20:35
Pssst, wiesz że w oparciu o patcher_x86 jest zrobiony HD Mod?

Dydzio PW
25 października 2017, 21:27
A jakie to ma znaczenie? Sam patcher_x86.hpp udostępnia "wrappery" podstawowych rzeczy do wygodnego podpinania się do pamięci gry i hookowania funkcji + jakieś rzeczy do współpracy z hd modem jako plugin. Z wyjątkiem tego rozpoznania jako plugin nie ma to nic wspólnego z kodem heroes 3 i nie jest żadnym nowym wynalazkiem - sam mogę napisać swoją kopię tego patchera z wyjątkiem tych rzeczy do współpracy z hd modem. Napisać własny dll który podpina się do wybranego programu i jego działanie ludzie potrafią już od dawnych czasów. Jak mi znajdziesz adres funkcji dla h3 złotej edycji ten od witch hut i adres "result" z tutoriala mogę napisać od zera dll dla czystego soda który zrobi to samo co plugin w tutorialu.

Koleś napisał patcher który opakowuje funkcjonalności które od dawna istnieją i nagle hype jakby coś odkryto.

Zrobienie tego co oferuje patcher to nie sztuka, sztuką jest za to podać dane i adresy do spatchowania by osiągnąć zamierzony efekt. Bez reverse engineeringu się nie obędzie. I znowu - największym problemem reverse engineeringu nie jest nauczenie się go, lecz poznawanie działania istniejącego kodu oraz wpasowywanie swojego celu w istniejący kod jest bardzo problematyczne (np. ze względu na asemblerowe instrukcje skoku z przypisanymi na sztywno offsetami). Jak ktoś chce więcej info pisać hermesa.

avatar PW
25 października 2017, 21:49
Cytat:
I znowu - największym problemem reverse engineeringu nie jest nauczenie się go, lecz poznawanie działania istniejącego kodu oraz wpasowywanie swojego celu w istniejący kod jest bardzo problematyczne (np. ze względu na asemblerowe instrukcje skoku z przypisanymi na sztywno offsetami).

Ale takie rzeczy już się dzieją i jeśli zapaleńców będzie dużo, to możliwości rozszerzania funkcjonalności leciwej h3 poprzez pluginy będzie coraz więcej. Już niektórzy robią całkiem sporo w tej kwestii.

Warmonger PW
26 października 2017, 08:13
Gdyby ci zapaleńcy przerzucili się na nowoczesne metody programowania, jak na przykład VCMI, dałoby się zrobić dużo więcej i szybciej.

Dydzio PW
26 października 2017, 12:25
Czyli znaleźli się nagle z jakiegoś powodu ludzie, którym zachciało się modować herosów metodami wog teamu. Jak chcą to niech robią kolejne mody potworki do soda/hoty :P

Robiąc to w ten sposób są mocno ograniczeni, mogą podmieniać cyferki albo dodawać funkcjonalności na samym początku lub na samym końcu procedur z heroes 3 bez dodawania ich do samego kodu (takie tam magiczne rzeczy). Nie mogą ich normalnie rozszerzyć o dodatkowe bajty bo kod się posypie. W hocie może to np jednorazowo zrobili przy dodawaniu nowych miast czy coś ale jeśli zrobili to w ten sposób to musiało to być niezwykle pracochłonne. Kolejna rzecz, którą niezwykle ciężko jest obejść to istniejące limity np 255 jednostek na mapie, maksymalny zakres pól na mapie uwzględniony przy "myśleniu" AI, szerokość i wysokość mapy, max poziom/punkty doświadczenia itp.

Tak czy siak research kodu gry trzeba prowadzić na nowo "publicznie" bo to co hota team wykminili to nie udostępnili.

Bardziej niż "hype na pluginy" nazwałbym to tak, że nagle po tylu latach od wydania woga znalazło się paru ludzi którym chce się od nowa robić to samo co oni. Więcej tych ludzi nie będzie, bo pułap wejścia w tą działkę wymaga dość wysokich umiejętności.

I dobrze moim zdaniem Warmonger pisze - za duże mamy rozproszenie w scenie h3. Dziś "każdy swojego moda robi niekompatybilnego z resztą". O ile mythology mod ma jeszcze jakieś ręce i nogi (choć dałoby się go zrobić jako moda do vcmi dużo mniejszym nakładem pracy i nie wnosi nic rewolucyjnego) to jeszcze mniejsze produkcje są często wysiłkiem zmarnowanym.

Niektórzy chyba kurczowo boją się vcmi i mają jakieś uprzedzenia, zamiast produktywnie wesprzeć rozwój silnika wolą się dosłownie użerać z reverse engineeringiem :P

AmiDaDeer PW
26 października 2017, 14:14
Czy dobrze rozumiem, że jeśli ktoś zmodyfikuje plugin Feanora dodający nowe stworzenia pod Erę, to czysto teoretycznie może to współpracować z czystym Heroes 3, a może nawet z Hotą (w końcu plik exe Hoty ma z tego co zauważyłem ledwo parę dodatkowych bajtów)?

Jeśli tak, to... It's kind of a big deal, isn't it?

Dydzio PW
26 października 2017, 16:15
Informacje na heroescommunity odnośnie tego pluginu są szczątkowe, a linki do pobrania dawno zdechły. Jak na razie to moja odpowiedź brzmi "być może". Plugin może bazować na nowych rzeczach dodanych w era. Limit 255 jednostek wciąż będzie obowiązywać tak czy siak.

Ginden PW
26 października 2017, 17:32
Dydzio:
Niektórzy chyba kurczowo boją się vcmi i mają jakieś uprzedzenia, zamiast produktywnie wesprzeć rozwój silnika wolą się dosłownie użerać z reverse engineeringiem :P

Tak szczerze mówiąc to nie znam C++ na tyle by cokolwiek pomóc z VCMI, a reverse engineering jest znacznie prostszy niż uczenie się całego języka (o jaki głupi kiedyś byłem nie dowierzając że assembler to najprostszy język).


A tak ogólniej o scenie – dopóki VCMI nie będzie współpracowało z lobby HotA które stało się praktycznie obowiązującym standardem wśród ludzi nadal grających w H3, to nie liczyłbym na boom zainteresowania. A raczej nie będzie, bo z tego co wiem team HotA nie jest zainteresowany, a szkoda.

Dydzio PW
26 października 2017, 21:10
To VCMI jest w stanie znieść wszelkie limity techniczne bez trzymania osiągnięć "modderów" w zamknięciu. Jak hota team się rozpadnie nie ma żadnej gwarancji, że cokolwiek od nich wyjdzie na światło dzienne. VCMI jest otwarte i to co jest wypracowane jest dorobkiem dostępnym dla całego community i tak pozostanie.

Nauka technik reverse engineeringu (a nie asemblera jako języka) jest znacznie trudniejsza od nauki c++. Dodatkowo produktywność jest stosunkowo niska i trzeba się liczyć z ograniczeniami h3.

Jak umiesz C to masz częściowo z górki - częściowo, bo składnia jest praktycznie ta sama, ale jest parę szczegółów do "oduczenia się". Enumy działają minimalnie inaczej i nie ma automatycznej konwersji void wskaźników. Niektóre elementy języka będące "jak najbardziej poprawnym C" są uznawane w jakościowym C++ jako złe praktyki programistyczne i składnia zbyt podatna na błędy. Sporo elementów języka ma swoje "lepsze jakościowo" alternatywy, np static_cast do rzutowania typów danych zamiast nawiasów.

PS. By pomóc vcmi powiedziałbym, że nie trzeba koniecznie znać c++. Wystarczy szczera chęć rozwoju projektu i motywacja do nauki, jesteśmy chętni do pomocy. Dodatkowo, brakuje nam też osób do samego testowania vcmi.

Ginden PW
7 stycznia 2018, 22:37
Nowa wersja HD moda wyłącza możliwość prostego dodawania pluginów do HotA, więc zostaje modowanie tylko SoDa w ten sposób. :(

avatar PW
1 lipca 2018, 09:04
VCMI przestało mieć monopol na pasek ruchu na polu walki. Dzięki najnowszej wersji SoD_SP: a HDmod plugin 1.15 możliwe jest to także w SoD/Heroes3 Complete/Gold + HD Mod (ale nie w HotA).



Oprócz tego najnowsza wersja przynosi szereg innych usprawnień. Listę znajdziecie tu.

macowiec PW
6 lipca 2018, 01:36
Pasek ruchu na polu walki, przycisk do kupowania wszystkich stworzeń w zamku (na wzór tego z czwórki) i funkcja autozapisu powszedniej tury, byłyby fajnym usprawnieniem rozgrywki w Hota.

marchewsz PW
6 lipca 2018, 23:13
Macowiec:
Pasek ruchu na polu walki, przycisk do kupowania wszystkich stworzeń w zamku (na wzór tego z czwórki) i funkcja autozapisu powszedniej tury...
Ale przecież to wszystko już jest w hota+hdmod poza paskiem ruchu.
temat: [HD mod] Tworzenie pluginów

powered by phpQui
beware of the two-headed weasel