Kwasowa Grota Heroes VIIMight & Magic XDark MessiahHorn of the AbyssHistoria Światów MMSkarbiecCzat
Cmentarz jest opustoszały
jesteś zalogowany jako Nieznajomy
zaloguj się    załóż konto
Niebiańska Kuźnia  (WoG, HotA, VCMI)temat: Kod żródłowy Heroes 3
komnata: Niebiańska Kuźnia (WoG, HotA, VCMI)
strona: 1 - 2 - 3 - 4 - 5

Phoenix PW
24 grudnia 2006, 21:14
Witam! W tym temacie, będzie trochę o edycji Heroesa... Mam pytanie do Acida: Gdzieś na tym forum, nie pamiętam gdzie, widziałem posta, że się udało coś z edycją pliku .exe w Heroesie. Jak się to udało? Czy nie da się w ten sposób edytować inne tego typu pliki z Heroes?

MCaleb PW
24 grudnia 2006, 21:19
Wolałbym, jakbyś założył ten temat po wyciągnięciu kodu źródłowego. :P
Ja osobiście nie pamiętam nigdy takiego posta, ale mogę się mylić (była krótka dyskusja o tym, ale na pewno nie udało się wyciągnąć kodu i nie było to nigdzie opisane).

Phoenix PW
24 grudnia 2006, 21:20
Nie sugeruje, że przeczytałem o wyciągnięciu kodu żródłowego, ale że przeczytałem o edycji pliku .exe, więc owy kod nie byłby potrzebny...

Trang Oul PW
24 grudnia 2006, 21:22
Ja pamiętam, że był post, w którym było wyjaśnione, że zmiany hard-coded to modyfikacje pliku heroes3.exe, a nie ERM.

Altair PW
24 grudnia 2006, 23:14
>>>Jak się to udało? Czy nie da się w ten sposób edytować inne tego typu pliki z Heroes?

Tak udało się tak właśnie powstał WoG ;P
Akurat z innymi plikami np. lod nie problemu z edycją.


>>>>Nie sugeruje, że przeczytałem o wyciągnięciu kodu źródłowego, ale że przeczytałem o edycji pliku .exe, więc owy kod nie byłby potrzebny...


Każdy może edytować plik exe potrzebny jest do tego tylko odpowiedni program. Jak sam kod szesnastkowy programu niewiele jednak daje trzeba jeszcze wiedzie co i gdzie. Po za tym gdyby to było takie proste z pewnością by o tym "było głośno" w Grocie.

Acid Dragon PW
24 grudnia 2006, 23:23
bleh.

Kod źródłowy gry po skompilowaniu jest praktycznie nie do wydobycia. To tak jakbyś z z jajecznicy z powrotem chciał mieć jajko. Po skompilowaniu z języka 'ludzkiego', z punktu widzenia komputera - bardziej skomplikowanego, zostaje przetworzony na tzw "kod maszynowy", czyli bezpośredni ciąg poleceń dla CPU komputera, którego my ludzie (z nielicznymi wyjątkami w skali światowej) nie jesteśmy w stanie zrozumieć.

Nie mniej jednak istnieją pewne metody i programy, które działają na pograniczu prawa, a czasem nawet poza nią, zwane ogólnie 'reverse engineering', a więc służące właśnie do przetłumaczenia (a właściwie do zrozumienia) fragmentów kodu na coś, co zdolny programista jest w stanie poznać i potem zmodyfikować (aczkolwiek droga do tego długa... tropienie wartości wpisywanych do pamięci RAM, poruszanie się po prawie niekończącym się grafie wygenerowanych zależności w kodzie...).

Takie metody i zaawansowane programy wykorzystał właśnie Slava, aby zrozumieć, które fragmenty kodu za co odpowiadają i by móc dodać do programu H3 kawałki swojego własnego kodu - m.in. odpowiedzialne za system doświadczenia jednostek, dowódców, język skryptów ERM czy za właściwości nowych jednostek.

Jak dotąd nie udało się to praktycznie nikomu innemu na świecie, aczkolwiek kilku innym osobom, w tym mnie, udało się dokonać kilku stosunkowo prostych zmian w pliku exe gry korzystając z matematycznych zależności i wartości w kodzie szesnastkowym, by stworzyć swe własne modyfikacje (takie jak WoG Tournament Edition, czy Nowe Ulepszenia, a z historycznych - dodatek H3 The Memory, który w dużej części został wchłonięty przez WoG swojego czasu).

I to właściwie tyle na temat kodu źródłowego H3. Tylko Slava może tu jeszcze cokolwiek zrobić.

Niegdyś (za czasów przejęcia praw do HoMM przez Ubisoft) próbowaliśmy wynegocjować udostępnienie kodu H3 na potrzeby WoGa, ale jak widać - bezskutecznie. Może kiedyś...

vinius PW
25 grudnia 2006, 10:09
Acidzie - a może byś opowiedział o swych osiagnięciach i dodatkach, o których wspomniałeś? To byłoby ciekawe :)

Acid Dragon PW
25 grudnia 2006, 10:38
Nie bardzo.
W przypadku Nowych Ulepszeń chodziło głównie o zakodowane w grze właściwości nowych jednostek.
W przypadku The Memory było to wykorzystanie 4 luk w kodzie w miejscu 4 żywiołaków Confluxu (prowizoryczne i zabugowane, ale w kampanii działało).
Co do TE, nie jestem pewien, ale jak przeczytać można w innym temacie z dyskusji naszych expertów ERM - właśnie nieco część kodu odpowiedzialną za ERM zmieniono.

Phoenix PW
25 grudnia 2006, 14:48
Acid Dragonie, jak sobie ulepszę siedlisko jakiegoś stworzenia( żeby dawało większy przyrost ) to da się taką liczbę(zwiększoną) wyrekrutować tylko przez kup wszystkie jednostki. Czy to błąd gry, czy tak jest ustalone?

Trang OulTrang OulJakby to był błąd, to by został naprawiony, prawda?
Przestań pisać głupie posty, bo mój zwierzaczek robi się głodny :D .

Acid Dragon PW
25 grudnia 2006, 20:29
Nie mam bladego pojęcia co poniżej miałeś na myśli.... zmienić przyrost jednostek można w miarę bezboleśnie nie ingerując w kod gry. Albo korzystając z ERM, albo z plików konfiguracyjnych.

Phoenix PW
27 grudnia 2006, 17:40
Na myśli miałem grę, a nie ulepszanie siedlisk za pomocą erm.

val-gaav PW
29 grudnia 2006, 12:04
"Co do TE, nie jestem pewien, ale jak przeczytać można w innym temacie z dyskusji naszych expertów ERM - właśnie nieco część kodu odpowiedzialną za ERM zmieniono."

To ja może dopiszę co jeszcze tam zmieniono w tym exe , bo może kogoś to zaciekawi :D


Altar of Sacrifice - wszyscy herosi (zli , dobrzy, neutralni) mogą poświęcać i stworzenia i arty za doświadczenie.

Klawisz “Next Hero” działa nieco inaczej niż w orginalnej grze by zapobiec "szpiegowaniu graczy" (bug z SoD , obecny też w WoGu)

Skeleton transformer zmienia unicorns i cavaliers w black knightów .... W orginalnym SoD tylko smoki i hydry mają przywilej zmiany na bone dragons ... TE dodaje jeszcze właśnie black knightów.

"Acid Dragonie, jak sobie ulepszę siedlisko jakiegoś stworzenia( żeby dawało większy przyrost ) to da się taką liczbę(zwiększoną) wyrekrutować tylko przez kup wszystkie jednostki. Czy to błąd gry, czy tak jest ustalone?"

Chodzi zapewnie o to, że przy użyciu ERM zwiększasz liczbe stworzeń do rekrutacji ? Samo zwiększenie nie wystarczy jeżeli zamek ma już na starcie gry postawiony dany generator ... Przykładowo zwiększyłeś przyrost impów do 20 , ale inferno zaczyna z tym generatorem, więc na starcie masz 15 impów do kupienia (tak jak jest orginalnie) a dopiero w przyszłym tygodniu dostaneisz 20 ...

Rozwiązaniem jest napisanie skryptu, który zwiększyłby ilość jednostek w generatorze (jesli postawiony) pierwszego dnia pierwszego tygodnia.

O wiele łatwiej zmienic przyrosty w crtraits.txt, wtedy wszystko bedzie działać dobrze od razu :-D

Phoenix PW
1 stycznia 2007, 19:29
Dzięki.

Ginden PW
2 czerwca 2007, 15:25
Udało mi się wyciągnąć kod źródłowy H3. Niestety tylko w Asemblerze. Zna tu ktoś dobrze Asembler i mógłby mi pomóc w zmianie jednej wartości? Chodzi o ilość artefaktów.

Acid Dragon PW
2 czerwca 2007, 15:42
jasne :P. Nic nie wyciągnąłeś, a modyfikacja kodu maszynowego w sumie jest analogiczna do modyfikacji skompilowanego pliku exe. Dla Twej informacji - asembler potrafi co najwyżej zapisać polecenia kodu maszynowego w coś "nieco" bardziej zrozumiałego dla człowieka, ale zapewniam, że z kodem źródłowym, dekompilacją i reverse engineering to ma bardzo niewiele wspólnego.

Ale prześlij co tam masz, to spróbuję Ci wytłumaczyć co to jest i czy da się to jakkolwiek wykorzystać. Mam jednak wrażenie, że na 95% to, co uzyskałeś i tak nie nadaje się do użytku :P.

Altair PW
2 czerwca 2007, 15:55
W sumie to kodu źródłowego w C++ z WoGa raczej nie da się uzyskać. Część informacji o nazwach zmiennych i funkcji itp. jest tracona podczas kompilacji. Dlatego nie uda się uzyskać nigdy pierwotnego kodu.

Acid Dragon PW
2 czerwca 2007, 16:16
Dokładnie tak.

Dekompilacja jest "świętym graalem" programistów, ale jest nieosiągalna. Możliwe jest jedynie coś w rodzaju "pseudodekompilacji" w przypadku stosunkowo prostych programów (opierająca się w sumie na napisaniu programu od nowa w oparciu o jego działanie), ale śmiem twierdzić, że to nierealne w przypadku kodu H3.

To często jest porównywane do próby uzyskania jajka z usmażonej jajecznicy.

Tak więc możemy co najwyżej opierać się na metodach modyfikacji kodu maszynowego i tak też zrobił Slava.

Ginden PW
2 czerwca 2007, 16:33
Acid: już ci wysłałem. W rarze.

Phoenix PW
4 czerwca 2007, 20:11
Ale na pewno dałoby się zrobić tak, żeby w jakimś specjalnym środowisku(np napisanym przez kogoś systemie operacyjnym) otworzyć plik .exe, a te środowisko wychwytywałoby polecenia przekazywane procesorowi i następnie je interpretowało i tłumaczyło na zrozumiały język, ale wiem, to musi był trudne żeby zrozumieć i przetłumaczyć miliony ciągów liczb które większości z nas nic nie mówią, ale na pewno nie jest to nierealne, to by było coś jak sztuczna inteligencja, jeśli wiecie co mam na myśli.

Acid Dragon PW
4 czerwca 2007, 21:42
To czysta teoria. Tak samo, jak w teorii możesz mówić, że z jajecznicy da się zrobić jajko. Można przecież posklejać skorupkę, użyć wapiennego kleju, oddzielić białko od żółta, odpowiednio je uformować, zmienić strukturę molekularną i jakoś zrenaturować, a to wszystko przy bardzo precyzyjnej i czasochłonnej robocie z odpowiednimi narzędziami i warunkami.

No w teorii tak. W praktyce jednak jeszcze nikomu się to nie udało. Jeśli już jest to niezbędne, to łatwiej zdobyć drugie jajko. Podobnie łatwiej byłoby napisać kod H3 od nowa.
Oczywiście są pewne metody (generalnie opierające się na niektórych z podanych przez Ciebie kwestiach, jak na przykład przechwytywanie informacji przesyłanych nie tylko do procesora, ale bardziej do RAMu), które pozwalają na *pewien stopień* dekompilacji i z których właśnie korzystał Slava, aby cokolwiek z plikiem exe zrobić, ale coś, co automatycznie generowałoby poprawny kod skomplikowanego programu jest raczej nierealne i wątpię, aby kiedykolwiek powstało.

Kompilacja programu to nie "tłumaczenie" programu z "naszego" na "komputerowy", które można odwrócić. To po prostu zrobienie z niego czegoś kompletnie innego, co może być "używane" przez maszynę cyfrową. Coś jak z jajka - jajecznicę, z drzewa - papier, z chomika - mokrą plamę.

Oprócz tego, zauważ, że po samym działaniu programu też nie da się wygenerować kodu. Program bowiem nie działa przecież jak książka - że wykonuje instrukcje od strony 1 do 500. Jeśliby się trzymać przykładu książki to wyglądałoby to tak: przeczytaj piąte słowo ze strony 257, przejdź do strony 12, porównaj czy ósme słowo na stronie 3 jest takie samo jak piętnaste na stronie 499, a następnie przeczytaj pierwsze słowo tam 10 razy. Zakończ. Jak na podstawie czegoś takiego skleić sensowne zdanie? że nie wspomnę o całej treści książki? Instrukcje wszak wysyłane są do procesora w zupełnie innej kolejności i porządku logicznym niż napisany kod. Więcej - z reguły są za każdym razem inne i w innej kolejności w zależności od tego jak działa program.

Posługując się pewnymi metodami możemy na przykład dowiedzieć się jakie słowo jest pierwsze na ósmej stronie, i które po nim następnie jest czytane. Dzięki temu możemy próbować zmienić treść tego słowa albo między tymi dwoma słowami odesłać program do innego - dopisanego na stronie 504. A wiedząc już na której stronie jest zapisana lista jednostek, możemy spróbować wcisnąć tam nowe słowa.
Ale to wciąż bardzo dalekie od poznania wszystkich słów książki.
strona: 1 - 2 - 3 - 4 - 5
temat: Kod żródłowy Heroes 3

powered by phpQui
beware of the two-headed weasel