Niniejszy artykuł ma w zamiarze w możliwie prosty i zrozumiały sposób opisać techniczną stronę generowania zaklęć w gildiach magów. Przy jego pisaniu posiłkowano się zdekompilowanym kodem gry, który popełnił Darmani (osoba związana z modyfikacją Project Ironfist). Tekst powstał z nadzieją, że poszerzy on wiedzę tych, którzy dążą do poznania szczegółowych informacji na temat Heroes II.
Zaklęcia "gwarantowane"
Podobnie jak w innych częściach, zaklęcia są generowane na starcie mapy. Na początku przydzielane są zaklęcia gwarantowane. Pierwsze gwarantowane zaklęcie dotyczy tylko graczy komputerowych grających Nekromantą, przypisując im jeden z dwóch czarów: Drgawki śmierci lub Falę śmierci.
Pierwszą czynnością, którą gra wykonuje jest sprawdzenie czy miasto należy do gracza komputerowego, oraz czy jest to miasto Nekromanty. Jeśli tak, to losuje liczbę od 0 do 100. Jeśli wylosowana wartość jest większa lub równa 50, komputerowy Nekromanta na trzecim poziomie gildii magów otrzyma czar Fala śmierci. W przeciwnym wypadku otrzyma czar Drgawki śmierci po wybudowaniu poziomu drugiego. To znaczy, że szansa wynosi 50.5% (51/101) dla Fali śmierci, a 49.5% (50/101) dla Drgawek śmierci dla gracza komputerowego grającego Nekromantą.
Fragment zdekompilowanego kodu z komentarzem:
|
Drugie i trzecie gwarantowane zaklęcie dotyczy już wszystkich graczy - zarówno ludzkich, jak i komputerowych, a także jest niezależne od tego, jaką grają frakcją.
Drugim gwarantowanym zaklęciem jest jeden czar wybierany spośród czwórki zaklęć lecząco-antymagicznych: Rozproszenia magii (24.75%), Uleczenia (25.74%), Antymagii (24.75%) i Masowego Rozproszenia (24.75%).
Kod gry ponownie losuje liczbę od 0 do 100. Jeśli liczba jest mniejsza niż 25, Gidlia magów otrzyma Rozproszenie magii. W przeciwnym wypadku, jeśli liczba jest mniejsza niż 50, w Gildii znajdzie się Masowe Rozproszenie. W przeciwnym wypadku, jeśli liczba jest mniejsza niż 75, czarem gwarantowanym będzie Antymagia, a jeśli wylosowany numer jest większy lub równy 75: Uzdrowienie.
Fragment zdekompilowanego kodu:
|
Trzecie i ostatnie gwarantowane zaklęcie to czar ofensywny wybrany spośród czwórki zaklęć: Magicznej Strzały (19.8%), Promienia Zimna (19.8%), Pierścienia Zimna (20.8%) oraz Kuli Ognia (19.8%).
Mechanizm generowania trzeciego gwarantowanego zaklęcia jest identyczny z drugim, a jedyną różnicą są procentowe wartości.
Fragmentu zdekompilowanego kodu:
|
Losowanie reszty zaklęć
W tym momencie kończy się etap przypisywania zaklęć gwarantowanych, a zaczyna losowanie pozostałych w gildiach czarów. Najważniejsze, co należy wiedzieć w przypadku rozpoczynającego się teraz etapu, to że szansa na otrzymanie danego zaklęcia różni się w przypadku graczy ludzkich oraz komputerowych, nekromantów oraz innych frakcji, a także, że na każdym poziomie gildii magów możemy mieć maksymalnie tylko jedno zaklęcie podróżne.
Dla każdego poziomu gildii magów gra losuje liczbę od 0 do 64 (liczba zaklęć w grze) i sprawdza, czy poziom zaklęcia odpowiada poziomowi gildii, dla którego właśnie trwa losowanie. Jeśli nie odpowiada, numer zaklęcia zostaje wylosowany jeszcze raz i proces powtarza się aż do skutku.
Gdy już udało się wylosować zaklęcie odpowiadające generowanemu właśnie poziomowi gildii, następuje przypisanie wagi zaklęcia, która służy do tego, by zwiększyć szansę na otrzymanie niektórych zaklęć dla gracza komputerowego...
Tak, tak, komputer w Heroes II oszukuje :). Waga ta wynosi zawsze 1500 dla graczy ludzkich i zaklęcia Wrota wymiarów. W przypadku graczy komputerowych najpierw pobierana jest wartość ze struktury z informacjami dla wszystkich zaklęć. Struktura zawiera także wartości, na podstawie których kalkulowana jest szansa na pojawienie się zaklęcia dla poszczególnych frakcji (zarówno sterowanych przez komputer, jak i gracza), a także dodatkowe informacje. Oto tabela, z której wycięto zbędne dla kalkulacji informacje takie jak koszt zaklęcia, nazwy dźwięków i grafik, itp:
Nazwa zaklęcia | Szansa dla komputera | Szansa dla frakcji w kolejności: |
Atrybuty zaklęcia |
Kula ognia | 500 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Uderzenie ognia | 750 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Błyskawica | 450 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Seria błyskawic | 650 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Teleport | 30 | 10 - 10 - 10 - 10 - 10 - 10 | |
Uzdrowienie | 250 | 10 - 10 - 10 - 10 - 10 - 10 | |
Grupowe uzdrowienie | 700 | 10 - 10 - 10 - 10 - 10 - 10 | |
Wskrzeszenie | 400 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Prawdziwe wskrzeszenie | 550 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Przyspieszenie | 300 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Grupowe przyspieszenie | 950 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Spowolnienie | 350 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Grupowe spowolnienie | 1000 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Oślepienie | 500 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Błogosławieństwo | 200 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Grupowe błogosławieństwo | 650 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Kamienna skóra | 300 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Stalowa skóra | 575 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Klątwa | 200 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Grupowa klątwa | 500 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Święte słowo | 300 | 10 - 10 - 10 - 10 - 10 - 0 | Powszechne zaklęcie |
Święte zawołanie | 450 | 10 - 10 - 10 - 10 - 10 - 0 | Powszechne zaklęcie |
Antymagia | 100 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Rozproszenie | 275 | 10 - 10 - 10 - 10 - 10 - 10 | |
Grupowe rozproszenie | 450 | 10 - 10 - 10 - 10 - 10 - 10 | |
Magiczna strzała | 200 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Szał bitewny | 1000 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Armagedon | 2000 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Burza żywiołów | 1300 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Deszcz meteorów | 1000 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Paraliż | 700 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Hipnoza | 1300 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Promień zimna | 375 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Krąg zimna | 500 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Promień osłabienia | 500 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Drgawki śmierci | 300 | 0 - 0 - 0 - 0 - 0 - 10 | Powszechne zaklęcie |
Fala śmierci | 450 | 0 - 0 - 0 - 0 - 0 - 10 | Powszechne zaklęcie |
Zabójca smoków | 100 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Żądza krwi | 300 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Ożywienie | 400 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Lustrzane odbicie | 800 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Tarcza | 150 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Grupowa tarcza | 375 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Przywołanie Żywiołaka ziemi | 1000 | 0 - 0 - 0 - 0 - 0 - 0 | Powszechne zaklęcie |
Przywołanie Żywiołaka powietrza | 1000 | 0 - 0 - 0 - 0 - 0 - 0 | Powszechne zaklęcie |
Przywołanie Żywiołaka ognia | 1000 | 0 - 0 - 0 - 0 - 0 - 0 | Powszechne zaklęcie |
Przywołanie Żywiołaka wody | 1000 | 0 - 0 - 0 - 0 - 0 - 0 | Powszechne zaklęcie |
Trzęsienie ziemi | 300 | 10 - 10 - 10 - 10 - 10 - 10 | Powszechne zaklęcie |
Pokaż kopalnie | 30 | 10 - 10 - 10 - 10 - 10 - 10 | Zaklęcie podróżne |
Pokaż zasoby | 30 | 10 - 10 - 10 - 10 - 10 - 10 | Zaklęcie podróżne |
Pokaż artefakty | 30 | 10 - 10 - 10 - 10 - 10 - 10 | Zaklęcie podróżne |
Pokaż miasta | 30 | 10 - 10 - 10 - 10 - 10 - 10 | Zaklęcie podróżne |
Pokaż bohaterów | 30 | 10 - 10 - 10 - 10 - 10 - 10 | Zaklęcie podróżne |
Pokaż wszystko | 30 | 10 - 10 - 10 - 10 - 10 - 10 | Zaklęcie podróżne |
Identyfikacja bohatera | 30 | 10 - 10 - 10 - 10 - 10 - 10 | Zaklęcie podróżne |
Przywołanie łodzi | 30 | 10 - 10 - 10 - 10 - 10 - 10 | Zaklęcie podróżne |
Brama między wymiarami | 1500 | 10 - 10 - 10 - 10 - 10 - 10 | Zaklęcie podróżne |
Brama do miasta | 30 | 10 - 10 - 10 - 10 - 10 - 10 | Zaklęcie podróżne |
Miejski portal | 30 | 0 - 0 - 0 - 0 - 0 - 0 | Zaklęcie podróżne |
Wizje | 30 | 0 - 0 - 0 - 0 - 0 - 0 | Zaklęcie podróżne |
Nawiedzenie | 30 | 0 - 0 - 0 - 0 - 0 - 0 | Zaklęcie podróżne |
Ustaw strażnika ziemi | 700 | 0 - 0 - 0 - 0 - 0 - 0 | Zaklęcie podróżne |
Ustaw strażnika powietrza | 700 | 0 - 0 - 0 - 0 - 0 - 0 | Zaklęcie podróżne |
Ustaw strażnika ognia | 700 | 0 - 0 - 0 - 0 - 0 - 0 | Zaklęcie podróżne |
Ustaw strażnika wody | 700 | 0 - 0 - 0 - 0 - 0 - 0 | Zaklęcie podróżne |
Wartość dla zaklęć oznaczonych atrybutem "Powszechne zaklęcie" kalkulowana jest ze wzoru:
A dla zaklęć bez atrybutu:
Następnie sprawdzane jest czy na aktualnym poziomie gildii zostało wylosowane już wcześniej zaklęcie podróżne - jeśli tak, to czy aktualnie losowane zaklęcie również jest oznaczone atrybutem "Zaklęcie podróżne". Jeśli drugi raz na danym poziomie wylosowaliśmy zaklęcie podróżne, to zaklęcie jest losowane jeszcze raz i cały proces zaczyna się od nowa.
W kolejnym kroku pobierana jest przypisana zaklęciu wartość "Szansa dla frakcji" dla typu, do którego należy miasto. Wartość ta może wynosić 0 lub 10 (albo zero, albo dziesięć!). Na jej podstawie kalkulowana jest szansa na otrzymanie danego zaklęcia dla poszczególnych frakcji. Wygląda to tak, że gra losuje liczbę od 0 do 10. Jeśli "Szansa dla frakcji" jest większa lub równa od wylosowanej liczby, możemy przejść do ostatniego etapu losowania. Jeśli nie jest, to zaklęcie jest losowane jeszcze raz i cały proces zaczyna się od nowa.
Ponieważ "Szansa dla frakcji" to zawsze 0 lub 10, oznacza to, że miasta, dla których Szansa dla frakcji dla poszczególnego zaklęcia wynosi wartość 10, mają sto procent szansy na przejście do ostatniego etapu losowania, ponieważ 10 będzie zawsze większe lub równe wylosowanej liczbie.
W ostatnim etapie najpierw zostaje sprawdzone czy dane zaklęcie nie znajduje się już w gildii magów (tak, dopiero teraz!) i jeśli go nie ma, to gracze ludzcy otrzymają zaklęcie, a w przypadku graczy komputerowych zostanie wykorzystana wykalkulowana przez nas wcześniej waga, która dopiero o tym zdecyduje.
Gra w tym momencie losuje liczbę od 1 do 1500 i jeśli wylosowana liczba jest mniejsza lub równa wykalkulowanej wadze, to gildia otrzyma zaklęcie (a jeśli nie, to losujemy je jeszcze raz i wracamy do początkowego etapu):
Ponieważ dla graczy ludzkich waga każdego z zaklęć to 1500, to warunek ten jest zawsze prawdziwy, więc zawsze otrzyma on wylosowane zaklęcie. Ale żeby udowodnić, że komputer oszukuje oraz wyjaśnić, po co ta "waga" jest, porównane zostanie jak w jego wypadku wygląda wylosowanie słabego zaklęcia pierwszego poziomu Pokaż kopalnie oraz silnego Spowolnienia.
"Szansa dla komputera" dla Pokaż kopalnie to 30 oraz zaklęcie nie ma atrybutu "Powszechne zaklęcie", więc waga to: 30 * 1 + 50 = 80
Więc zaklęcie otrzyma on tylko w wypadku, jeśli losując liczbę od 1 do 1500 trafi na liczbę mniejszą lub równą 80 (prawie nigdy)!
Weźmy spowolnienie z "Szansą dla komputera" o wartości 350 i atrybutem "Powszechne zaklęcie": 350 * 4 + 50 = 1450
Czyli zaklęcie otrzyma on w wypadku, jeśli losując liczbę od 1 do 1500 trafi na liczbę mniejszą lub równą 1450 (prawie zawsze)!
Poniżej zamieszczono zdekompilowany przez Darmaniego kod:
|
A także oryginalną Strukturę zaklęć:
|
Powrót do góry |