Kwasowa Grota Heroes VIIMight & Magic XDark MessiahHorn of the AbyssHistoria Światów MMSkarbiecCzat
Cmentarz jest opustoszały
Witaj nieznajomy.
rejestracjalogowanieRSSFB

Bonusy

Pierwszą i podstawową rzeczą, jaką musi zrobić ktoś, kto chce zrozumieć VCMI jest opanowanie formatki Bonus. Jest ona najbardziej podstawową częścią kodowania kwestii takich jak zdolności bohaterów, jednostek itp.

Opis zawartości


Wygląda dość strasznie, jednak w praktyce jest prostsze niż się wydaje. Tyle w kwestii wyglądu całości. Ale z pewnością jesteś ciekaw, co kryje się po poszczególnymi wartościami? Służę pomocą:

  • Na sam początek wartość najważniejsza. Jest ona równocześnie jedyną obowiązkową wartością. Definiuje ona całość działania danego bonusa i przez to przyjmuje pewne specyficzne, predefiniowane wartości, których pełną listę można znaleźć poniżej. Definiuje ona konieczność wykorzystania innych składników kodu.


  • Bonusy ogólne

    Oznaczenie bonusuDodatkowe parametryUwagi
    NONE-Pusty typ
    MORALEvalZwiększa morale o podaną wartość
    LUCKvalZwiększa szczęście o podaną wartość
    MAGIC_SCHOOL_SKILL subtype
    val
    Umożliwia rzucanie zaklęć ze szkoły magii o podanym subtypie0 - wszystkie
    1 - ogień
    2 - powietrze
    4 - woda
    8 - ziemia
    na danym poziomie (val). Efekt analogiczny do magicznych równin.
    NO TYPE-Pusty typ
    DARKNESSvalBohatera na mapie przygód otacza ciemność o promieniu val
    MOVEMENTvalZwiększa zasięg ruchu na mapie przygód o val (zwykła kratka = 100). Działa na lądzie i wodzie


    Bonusy bohaterów

    Oznaczenie bonusuDodatkowe parametryUwagi
    LAND_MOVEMENTvalZwiększa zasięg ruchu na mapie przygód o val (zwykła kratka = 100). Działa na lądzie
    SEA_MOVEMENT valZwiększa zasięg ruchu na mapie przygód o val (zwykła kratka = 100). Działa na wodzie
    WATER_WALKINGsubtypeUmożliwia poruszanie się po wodzie w sposób określonym przez subtype1 - bez kary
    2 - z karą
    FLYING_MOVEMENTsubtypeUmożliwia latanie bohaterowi w sposób określonym przez subtype1 - bez kary
    2 - z karą
    .
    PRIMARY_SKILLsubtype
    additional info
    Daje określoną premię do umiejętności określonej przez subtypeTODO. Additional info1 - walka wręcz
    2 - walka na dystans
    określa (jeśli podane) sytuację, gdzie się ją stosuje
    SIGHT_RADIOUS valZwiększa zasięg widzenia bohatera o wartość val
    MANA_REGENERATION valIlość dziennie regenerowanej many
    FULL_MANA_REGENERATION -Przywraca 100% many każdego dnia
    NONEVIL_ALIGNMENT_MIX -Można mieszać dobre i neutralne oddziały w armii bez straty morale (jak Anielski Sojusz)
    SECONDARY_SKILL_PREMY subtype
    val
    Umiejętność podana przez subtype jest efektywniejsza o procent podany przez val
    SURRENDER_DISCOUNT valZwiększa opłatę za poddanie się o procent podany przez val
    IMPROVED_NECROMANCY subtypeEfekt pozwala na wskrzeszanie jednostek innych niż szkielety, jeśli poda się je poprzez subtype
    SPECIAL_SECONDARY_SKILL subtype
    additional info
    Specjalizacja w umiejętności danej przez subtype o ilość procentów podanych w additional info
    SPECIAL_SPELL_LEV subtype
    additional info
    Specjalizacja w zaklęciu danym przez subtype o ilość procentów podanych w additional info
    SPELL_DAMAGE valZwiększa obrażenia zaklęć o daną ilość procent
    SPECIFIC_SPELL_DAMAGE subtype
    val
    Zwiększa obrażenia danego zaklęcia o daną wartość (jak Luna/Ciele)
    SPECIAL_BLESS_DAMAGE subtype
    val
    Zwiększa skuteczność zaklęcia (błogosławieństwa, jeżeli nie podano subtype) o daną wartość val (wyrażoną w procentach) co poziom
    MAXED_SPELL subtypeZaklęcie o id podanym poprzez subtype ma efekt jakby rzucane było z ekspercką zdolnością (nie działa to na zasięg)
    SPECIAL_PECULIAR_ENCHANT val
    subtype
    Błogosławieństwa i klątwy z id podanym jako val są rzucane z mocą zależną od poziomu jednostki
    subtype jest równe 0 lub 1 (dla efektu Coroniusa)
    SPECIAL_UPGRADE val
    addInfo
    Pozwala na ulepszenia jednostki o id podanym val do jednostki podanej jako addInfo


    Bonusy artefaktów

    Oznaczenie bonusuDodatkowe parametryUwagi
    AIR_SPELL_DMG_PREMY,
    EARTH_SPELL_DMG_PREMY,
    FIRE_SPELL_DMG_PREMY,
    WATER_SPELL_DMG_PREMY
    -To jest bonus do obrażeń do zaklęć powietrza/wody/ziemi/ognia
    BLOCK_MORALE,
    BLOCK_LUCK
    -Blokuje morale/szczęście
    SPELLsubtype
    val
    Bohater uczy się zaklęcia o id podanym poprzez subtype, nawet wtedy gdy zaklęcie jest zablokowane przez mapę. Przez wartośc val okresla się poziom zaklęcia
    SPELLS_OF_LEVEL subtype - level
    val - skill level
    Bohater zna wszystkie zaklęcia poziomu podanego przez subtype na poziomie umiejętności podanej przez val
    FIRE_SPELLS,
    AIR_SPELLS,
    WATER_SPELLS,
    EARTH_SPELLS
    -Wszystkie zaklęcia z tych szkół magii zostają dodane do księgi zaklęć
    GENERATE_RESOURCE subtype
    val
    Generuje wybrany zasób o id podanym poprzez subtype. Wartością val określamy ilość tego zasobu dziennie
    CREATURE_GROWTHsubtype
    val
    Dla artefaktów legionowych. Zwiększa przyrost jednostek o wartość val. Można określić poziom jednostek przez subtype
    CREATURE_GROWTH_PERCENT valZwiększa przyrost jednostek we wszystkich miastach o podany procent val
    ENEMY_CANT_ESCAPE -Wróg nie może uciec z pola bitwy
    NEGATE_ALL_NATURAL_IMMUNITIES-Jednostki odporne na magię tracą tę właściwość
    OPENING_BATTLE_SPELL subtype
    val
    Na początku bitwy rzuca zaklęcie na poziomie ekspert o id podanym poprzez subtype o mocy określonej przez val
    FREE_SHIP_BOARDING-Nie ma straty punktów ruchu przy wchodzeniu i schodzeniu ze statku
    WHIRLPOOL_PROTECTION -Chroni armię bohatera przed wirami


    Bonusy jednostek

    Oznaczenie bonusuDodatkowe parametryUwagi
    STACK_HEALTH-Ilość punktów życia
    STACKS_SPEED -Szybkość jednostki
    CREATURE_DAMAGE subtypeIlość obrażeń jednostki opisanej przez wartość subtype (przy niedokładnej ilości wpisujemy np: "min"=3, "max"=5)
    SHOTS-Ilość strzał jednostki. Przykład: "SHOTS" : 13
    EXP_MULTIPLIERvalIlość doświadczenia jaką dostaje jednostka/dowódca. Podstawowa wartość val wynosi 100
    NON_LIVING-Jednostka jest nieożywiona (tak jak na przykład Gargulec)
    UNDEAD -Jednostka jest nieumarła (tak jak jednostki Nekropolii)
    DRAGON_NATURE -Jednostka jest smokiem
    KING1, KING2, KING3 -Podatność na czar pogromca: podstawowy, zaawansowany, mistrzowski
    FEARLESS -Odporność na strach
    NO_LUCK -Jednostka nie ma szczęścia
    NO_MORALE -Jednostka nie ma morale
    SELF_MORALE -Jednostka ma wysokie morale (jak na przykład Minotaur)
    SELF_LUCK-Jednostka ma wysokie szczęście (jak na przykład Niziołek)
    FLYING subtype Daje możliwość lotu jednostce, opisanego przez wartość subtype 0 - zwykłe
    1 - teleport
    SHOOTER -Jednostka jest strzelająca. Jak opisać ilość strzał napisane jest wyżej
    CHARGE_IMMUNITY-Odporność na szarżę (jak Pikinierzy)
    ADDITIONAL_ATTACK -Dodatkowy atak jednostki
    UNLIMITED_RETALIATIONS -Jednostka zawsze kontratakuje
    ADDITIONAL_RETALIATION valDodatkowa kontry podane wartością val
    JOUSTING -Umiejętność szarży Championów
    HATE subtype
    val
    Nienawiść naszej jednostki do jednostki o id podanym poprzez subtype. Dodatkowe obrażenia z tym związane (procentowe) określamy przez val
    SPELL_LIKE_ATTACK subtype
    val
    Jednostka atakuje zaklęciem o id podanym poprzez subtype i poziomie przez val, ale obrażenia są związane z jednostką, a nie zaklęciem (przykład Gog, Lisz)
    THREE_HEADED_ATTACK -Atak 3 przyległych jednostek (jak Cerber)
    ATTACKS_ALL_ADJACENT -Atak wszystkich dookoła (jak Hydra)
    TWO_HEX_ATTACK_BREATH -Atak przez 2 heksy (jak Smoki)
    RETURN_AFTER_STRIKE -Jednostka wraca na miejsce po ataku
    ENEMY_DEFENCE_REDUCTION valZmniejsza wartość obrony wroga o wartość zapisaną przez val
    GENERAL_DAMAGE_REDUCTION subtype
    val
    To jest redukcja otrzymywanych obrażeń - Subtype1 - działą tylko wręcz
    2 - działa tylko na dystans
    . Val określa procent blokowanych obrażeń
    GENERAL_ATTACK_REDUCTION subtype
    val
    Zaczarowana istota ma mniejszy atak podany procentem przez val. Subtype określa czy tyczy się on walki wręcz (0), strzelania (1) czy obydwóch (-1)
    DEFENSIVE_STANCE valUmiejętność z Woga - bonus wartości obrony podczas defensywy o podaną wartość val
    NO_DISTANCE_PENALTY -Brak kary za dystans podczas ataku na odległość
    NO_MELEE_PENALTY -Brak kary za walkę wręcz (dotyczy jednostki strzelającej)
    FREE_SHOOTING -Brak wszelkiej kary za przeszkody podczas ataku na odległość (tak jak Strzelcy)
    NO_WALL_PENALTY -Brak kary za atak przez mury
    FREE_SHOOTING -Brak wszelkiej kary za przeszkody podczas ataku na odległość (tak jak Strzelcy)
    BLOCKS_RETALIATION -Blokuje kontry
    CATAPULT -Może atakować mury
    CHANGES_SPELL_COST_FOR_ALLY valZmniejsza koszty rzucania zaklęć o wartość wyrażoną przez val
    CHANGES_SPELL_COST_FOR_ENEMY valZmniejsza koszty rzucania zaklęć wroga o wartość wyrażoną przez val
    SPELL_RESISTANCE_AURA valAura odporności na zaklęcia, val daje procentową szansę dla przylegających stworzeń na odparcie zaklęcia
    HP_REGENERATIONvalJednostce co rundę regenerują się punkty życia o wartość wyrażoną przez val
    FULL_HP_REGENERATION SubtypeIstota na początku tury wraca do pełni zdrowia. Subtype określa animację: 0 - jak troll, 2 - jak zjawa
    MANA_DRAINvalCo turę wysysa wrogiemu bohaterowi manę o wartość podaną poprzez val
    MANA_CHANNELING valPrzekazuję pewien procent many wrogiego bohatera, wyrazony wartością val( jak chochlik)
    LIFE_DRAIN valWysysywanie życia, val określa procent leczenia na podstawie zadanych obrażeń
    DOUBLE_DAMAGE_CHANCE valSzansa na podwójnie punktowany atak, wyrażona poprzez val (jak Upiorny rycerz)
    FEAR-Wzbudza strach
    HEALER -Leczy jednostkę na początku swej tury
    FIRE_SHIELD -Tarcza ognia
    MAGIC_MIRROR valPrzy rzucaniu zaklęcia na jednostkę - jest procentowa szansa val na przekierowanie zaklęcia na losową inną jednostkę
    ACID_BREATH valZionięcie kwasem
    DEATH_STARE subtype
    val
    Po ataku ma val procent szansy na zabicie wrogów w zaatakowanym oddziale o maksymalnej ilości równej ilości atakujących jednostek przy subtype = 0
    SPELLCASTER subtype
    val
    additional info
    Jednostka zyskuje zdolność do rzucenia zaklęcia podanego poprzez subtype ze znajomością szkoły podanej przez value i z szansą na powodzenie podaną poprzez addInfo w procentach. SPECIFIC_SPELL_POWER, CREATURE_SPELL_POWER i CREATURE_ENCHANT_POWER są wykorzystywane do określania siły zaklęcia
    ENCHANTER subtype
    val
    additional info
    Co ilość tur podanych przez addInfo, począwszy od pierwszej, jednostka automatycznie rzuca zaklęcie podane przez subtype o znajomości szkoły val na wszystkie możliwe jednostki
    RANDOM_SPELLCASTERvalRzuca losowe zaklęcie na poziomie podanym przez val (jak Dżin)
    SPELL_AFTER_ATTACK subtype
    val
    Po ataku jednostka ma val szans na rzucenie zaklęcia podanego przez subtype. addInfo niesie ze sobą dwie informacje: wynik dzielenia bez reszty to zasięg rzucania zaklęcia (1 - tylko na dystans, 2 - tylko na wręcz, 0 - na wszystko), a reszta z dzielenia to poziom znajomości zaklęcia
    SPELL_BEFORE_ATTACK subtype
    val
    Przed atakiem jednostka ma val szans na rzucenie zaklęcia podanego przez subtype. addInfo niesie ze sobą dwie informacje: wynik dzielenia bez reszty to zasięg rzucania zaklęcia (1 - tylko na dystans, 2 - tylko na wręcz, 0 - na wszystko), a reszta z dzielenia to poziom znajomości zaklęcia
    CASTS -Czas trwania zaklęć jednostki.
    SPECIFIC_SPELL_POWER subtype
    val
    Efektywna moc zaklęć oddziału wynosi val
    razy ilość jednostek w oddziale na zaklęcia podane przez subtype
    CREATURE_SPELL_POWER valOddział ma moc zaklęć podaną przez val na każdą jednostkę, ale podzieloną przez 100
    CREATURE_ENCHANT_POWER-Wykorzystywane do określania siły zaklęcia.
    DAEMON_SUMMONING subtype
    val
    Wskrzesza jednostkę podaną przez subtype z ciał poległych. Val wo ilość hp na jednostkę
    REBIRTH subtype
    val
    Procent życia wskrzeszanych, gdy oddział umrze, subtype równe 1 powoduje wskrzeszenie minimum jednej jednostki
    ENCHANTED-Oddział jest stale pod wpływem zaklęcia podanego przez subID o znajomości szkoły podanej przez val, lub, jeżeli val jest większy niż 3, to o val-3, lecz zaklęcie jest masowe
    LEVEL_SPELL_IMMUNITY valJednostka jest odporna na zaklęcia o poziomie podanym przez val i niższe
    MAGIC_RESISTANCE valOdporność na magię o procent podany przez val
    SPELL_DAMAGE_REDUCTION subtype
    val
    Redukcja o val procent na obrażenia od zaklęć ze szkoły podanej przez subtype (-1 - wszystkie, 0 - powietrze, 1 - ogień, 2 - woda, 3 - ziemia
    MORE_DAMAGE_FROM_SPELL subtype
    val
    Cel otrzymuje więcej obrażeń od zaklęcia podanego przez subtype o procent podany przez val
    FIRE_IMMUNITY,WATER_IMMUNITY, EARTH_IMMUNITY, AIR_IMMUNITY subtype
    Odporność na zaklęcia z danej szkoły magii. Subtype określa, czy na wszystkie zaklęcia (0), wszystkie prócz pozytywów (1), tylko na raniące
    MIND_IMMUNITY -Odporność na zaklęcia umysłu
    SPELL_IMMUNITY subtype
    addInfo
    Niewrażliwość na zaklęcie podane przez subtype, addInfo określa czy tę odporność można rozproszyć (0) lub nie (1)
    DIRECT_DAMAGE_IMMUNITY -Jednostka jest niewrażliwa na zaklęcia zadające obrażenia.
    RECEPTIVE -Jednostka może zostać zaczarowana przez pozytywne zaklęcia niezależnie od swych odporności


    Bonusy zaklęć

    Oznaczenie bonusuDodatkowe parametryUwagi
    POISON valEfekt zaklęcia Trucizna, val określa poziom, z którego efekt będzie brany
    SLAYER valEfekt zaklęcia Pogromca, val określa poziom, z którego efekt będzie brany
    BIND_EFFECT -Brak działania, stosowany jako oznaczenie w przypadku konstruowania zaawansowanych efektów
    FORGETFULL -Efekt zaklęcia zapomnienie, Val określa poziom, z którego efekt będzie brany
    NOT_ACTIVE -Nieaktywny bonus
    ALWAYS_MINIMUM_DAMAGE subtype
    val
    additional info
    Jednostka zawsze zadaje minimalne obrażenia, subtype określa typ ataku: wszystkie (-1), wręcz (0) lub dystans (1). Nadto addInfo określa o ile procent obniżone będą te obrażenia
    ALWAYS_MAXIMUM_DAMAGE subtype
    val
    additional info
    Jednostka zawsze zadaje maksymalne obrażenia, subtype określa typ ataku: wszystkie (-1), wręcz (0) lub dystans (1). Nadto addInfo określa o ile procent obniżone będą te obrażenia
    ATTACKS_NEAREST_CREATURE -Atakuje najbliższe stworzenie
    IN_FRENZY -Cel jest pod wpływem berserka
    HYPNOTIZED -Cel jest pod wpływem hipnozy
    NO_RETALIATION -Jednostka nie wywołuje odwetu

    Modding z Lulu
    Jestem Lulu i pokażę Ci jak się bawi tymi wspaniałymi zabawkami, które tu znajdziesz.
    Chodźmy się bawić!
    Zacznijmy od bardzo prostej rzeczy. Chcemy, by nasza laleczka była smokiem. Uwielbiam smoki, one są takie wspaniałe i majestatyczne! Zatem naprzód!
    W pliku genetycznym naszej laleczki szukamy szufladki abilities:
    [
    ]
    .
    Pomiędzy te śliczne nawiasy kwadratowe wpisujemy:
    "myLittleDragon:_FlyingIsMagic": <-jest to nazwa naszego bonusu. Fachowo nazywałoby się to klasą, ale my się na razie bawimy...
    Następnie otwieramy zgrabne nawiasy klamrowe i zapisujemy w nich: {
    "type": "DRAGON_NATURE"
    }

    Brawo! Nasza laleczka jest teraz smokiem według realiów świata Antagarichu... I nie jest ważne, że wygląda jak czarna salamandra ze skrzydłami...




  • Drugą ważną kwestia jest subtype. Jest to najczęściej tak zwany string - ciąg znaków, ale również czasem może przyjmować postać liczby.
  • Najczęściej do tworzenia stringów wykorzystuje się prefix i affix, zaś sama konstrukcja jest następująca: PREFIX.AFFIX, kropka pomiędzy jest bardzo ważna. Poniżej przedstawiono najważniejsze prefiksy:

  • creature
  • artifact
  • skill
  • resource
  • hero
  • faction
  • spell
  • primSkill

  • Ale co w takim razie jest tym affiksem? Wszystko, co pasuje do danej kategorii. dla przykładu poniżej podajemy listy dla:
    skill
    pathfinding

    archery
    logistics
    scouting
    diplomacy,
    navigation
    leadership
    wisdom
    mysticism
    luck
    ballistics
    eagleEye
    necromancy
    estates
    ireMagic
    airMagic
    waterMagic
    earthMagic
    scholar
    tactics
    artillery
    learning
    offence
    armorer
    intelligence
    sorcery
    resistance
    firstAid

    resource
    wood

    ore
    mercury
    sulfur
    crystal
    gems
    gold
    mithril

    primSkill
    attack

    defence
    spellpower
    knowledge

    Modding z Lulu
    Jestem Lulu i pokażę Ci jak się bawi tymi wspaniałymi zabawkami, które tu znajdziesz.
    Chodźmy się bawić!
    To może zajmijmy się czymś ciekawszym... Czymś, co działa na zaklęcia rzucane przez naszego lalkarza i na którą nasza laleczka ma wpływ. Wróćmy do szufladki abilities:
    [
    ]
    i wpiszmy tam "LordOfTheBless":, jest to nazwa naszej umiejętności. Teraz, ponownie, otwieramy nawiasy klamrowe i zapisujemy w nich:
    {
    "type": "MAXED_SPELL";
    "subtype": "spell.bless"
    }
    .
    Co daje to naszej laleczce? Niiiic. Ona będzie tak samo pożyteczna dla niej, jak dla mnie pożyteczne są pytania ludzi o moja heterochromię i po co mi to...
    Nie, nasza laleczka nic z tego nie będzie mieć. Ale jeżeli jakiś lalkarz weźmie naszą laleczkę w obroty... Będzie mógł rzucać błogosławieństwo z najwyższą możliwą skutecznością! Ale jest mały haczyk... ten efekt nie ma wpływu na rozmiar... zakresu zaklęcia. Czyli lalkarz bez mistrzowskiej zdolności chlapania nie będzie mógł rozchlapać tego na wszystkie swoje jednostki.
    Ale to jest niska cena za taką moc, czyż nie?




  • Kolejną ważną kwestią do dodania jest val. Jest to... liczba! Tak, tak, wiem, że to jest zaskakujące, ale jest to liczba bezpośrednio związana z danym parametrem. Jest on obsługiwany przez valueType, o czym będzie potem. Na razie przyjrzyjmy się przykładowi:

  • Modding z Lulu
    Jestem Lulu i pokażę Ci jak się bawi tymi wspaniałymi zabawkami, które tu znajdziesz.
    Chodźmy się bawić!
    Właśnie wróciłam z wakacji w Czarnobylu, cudowna atmosfera, wspaniałe zwierzątka, przepiękne roślinki, tylko ludzie jacyś tacy smutni i przygaszeni. Nudziarze! Chciałabym, by nasze laleczki też mogły tworzyć taką cudowną atmosferę!
    Zatem znów wchodzimy w geny naszej laleczki i szukamy abilities:
    [
    ].
    Teraz dopiero się zaczyna zabawa! Tradycyjnie, zaczynamy nazwą zdolności: "theHumanspawnShallPerishInFlames:" Następnie piszemy: {
    "type": "SPELLCASTER",
    "subtype": "spell.armageddon",
    "val": 3,
    "addInfo": 100
    };

    Co daje to naszej laleczce? Możliwość rzucania armageddonu z ekspercką znajomością i ze 100% szansy na powodzenie!
    Dobrze, ale... jak określimy siłę zaklęcia? W ten sposób:"bringMeMagicAndThePower":
    {
    "type": "SPECIFIC_SPELL_POWER",
    "val": 1,
    "subtype": "spell.armageddon"
    }

    Dzięki temu każda nasza laleczka będzie mieć dawać swemu oddziałowi jeden punkt mocy magicznej dla armageddonu! Będzie gorąco, może nawet za gorąco... bo przecież nasze laleczki same się w tej temperaturze usmażą, a tego byśmy nie chcieli, byłabym smutna!
    Dlatego dodamy coś takiego: "IAmHot":
    {
    "type": "FIRE_IMMUNITY",
    "subtype": 0
    }

    I nasza laleczka jest zupełnie niewrażliwa na ogień! Będzie się mogła wręcz opalać w płomieniach, które ściągnie z niebios, uważam to za słodkie!




  • Teraz skupmy się na tym, jak wykorzystać val. Do tego służy valueType. Można tam umieścić dokładnie sześć opcji:

  • ADDITIVE_VALUE
    BASE_NUMBER
    PERCENT_TO_ALL
    PERCENT_TO_BASE
    INDEPENDENT_MAX
    INDEPENDENT_MIN

    Ale co która opcja daje? Są one powiązane całym równanie, które zaraz ujrzycie, ale:
  • ADDITIVE_VALUE powoduje, że bonus będzie się nakładał po każdorazowym wystąpieniu efektu;
  • BASE_NUMBER to domyśla opcja, jest to po prostu sztywna wartość danej cechy;
  • PERCENT_TO_ALL dana wartość powiększa całość bonusu o zadany procent (wartość ujemna zmniejsza);
  • PERCENT_TO_BASE dana wartość powiększa wyłącznie BASE_NUMBER o zadany procent (wartość ujemna zmniejsza);
  • INDEPENDENT_MAX jeżeli wynik równania jest większy od zadanej wartości - bonus jest dawany przez zadaną wartość;
  • INDEPENDENT_MIN jeżeli wynik równania jest mniejszy od zadanej wartości - bonus jest dawany przez zadaną wartość.

  • Całe to mityczne równanie wygląda następująco:
    ((BASE_NUMBER * (100 + PERCENT_TO_BASE) / 100) + ADDITIVE_VALUE) * (100 + PERCENT_TO_ALL) / 100

    Wynik tego równania jest porównywany z INDEPENDENT_MAX i INDEPENDENT_MIN, a następnie obcinany w zależności od tego czy jest większy.

    Modding z Lulu
    Jestem Lulu i pokażę Ci jak się bawi tymi wspaniałymi zabawkami, które tu znajdziesz.
    Chodźmy się bawić!
    Ty, tak, Ty! Wiem, że to Grota i tak dalej, ale mógłbyś mi spojrzeć w oczy! Tak, mam je nieco wyżej. Musisz szerzej spojrzeć na świat, szerzej!
    Chyba będzie trzeba Ci coś dopisać do genotypu... poczekaj no chwilę...
    O, już, masz coś nowego: {"type": "SIGHT_RADIOUS",
    "val": 3,
    }

    To powinno Ci zwiększyć zasięg widzenia o trzy jednostki. Metry. Cale. Czy jak to nazywasz...
    Albo nie... Mam lepszy pomysł... Dostaniesz... {"type": "SIGHT_RADIOUS",
    "val": 50,
    "valueType": "PERCENT_TO_ALL"
    }
    Tak, to Ci da zasięg widzenia o połowę większy. To będzie znacznie lepsze.




  • Teraz porozmawiajmy o długości działania danej zdolności/efektu. Służy do tego duration. Można zapisać tę formułkę w dwa sposoby:

  • "duration": "DURATION"
    "duration": ["DURATIONA", "DURATIONB",...]

    Po raz kolejny mamy możliwość podania jednej z kilku opcji:

    PERMANENT
    ONE_BATTLE
    ONE_DAY
    ONE_WEEK
    N_TURNS
    N_DAYS
    UNITL_BEING_ATTACKED
    UNTIL_ATTACK
    STACK_GETS_TURN
    COMMANDER_KILLED

    Każda ta opcja daje inny efekt:
  • PERMANENT - bonus jest stały, działa na wieki wieków;
  • ONE_BATTLE - bonus działa do końca bitwy, w której go nadano;
  • ONE_DAY - bonus działa do końca dnia, w którym go nadano;
  • ONE_WEEK - bonus działa do niedzieli tygodnia, w którym go nadano, włącznie;
  • N_TURNS - bonus działa N tur i jest wykorzystywany podczas bitew, wartość N jest brana z odpowiedniego parametru powiązanego z danym sposobem nadawania bonusu, na przykład dla bonusu nakładanego poprzez zaklęcie: N będzie podawane przez siłę zaklęć. Ale może być też określanie przez turns;
  • N_DAYS - analogicznie do poprzednika, ale działa na dni;
  • UNITL_BEING_ATTACKED - efekt zanika po tym, jak cel zostanie zaatakowany i wyprowadzi kontratak;
  • UNTIL_ATTACK - efekt zanika po tym, jak cel zaatakuje i zostanie w niego wyprowadzony kontratak;
  • STACK_GETS_TURN - trwa aż do uzyskania przez oddział swej tury podczas walki;
  • COMMANDER_KILLED - trwa do śmierci dowódcy.




  • Następnie możemy określić źródło danego bonusu, do tego służy sourceType i sourceID. W tej pierwszej części określamy jaki typ wywołuje bonus, a w drugiej - co konkretnie wywołuje go.

  • ARTIFACT
    ARTIFACT_INSTANCE
    OBJECT
    CREATURE_ABILITY
    TERRAIN_NATIVE
    TERRAIN_OVERLAY
    SPELL_EFFECT
    TOWN_STRUCTURE
    HERO_BASE_SKILL
    SECONDARY_SKILL
    HERO_SPECIAL
    ARMY
    CAMPAIGN_BONUS
    SPECIAL_WEEK
    STACK_EXPERIENCE
    COMMANDER
    GLOBAL_EFFECT
    OTHER

    Co co daje? Oto lista:
  • ARTIFACT - bonus pochodzi z artefaktu;
  • ARTIFACT_INSTANCE - bonus pochodzi ze złożenia artefaktu;
  • OBJECT - bonus pochodzi z danego obiektu na mapie;
  • CREATURE_ABILITY - bonus pochodzi ze zdolności danej jednostki;
  • TERRAIN_NATIVE - bonus pochodzi ze stąpania po terenie natywnym;
  • TERRAIN_OVERLAY - bonus pochodzi ze stąpania po danym terenie;
  • SPELL_EFFECT - bonus pochodzi z efektu danego zaklęcia, jest przez nie wywiływany;
  • TOWN_STRUCTURE - bonus pochodzi z danego budynku miasta;
  • HERO_BASE_SKILL - bonus pochodzi z podstawowej zdolności bohatera;
  • SECONDARY_SKILL - bonus pochodzi ze zdolności bohatera;
  • HERO_SPECIAL - bonus pochodzi ze spacjelizacji bohatera;
  • ARMY - bonus pochodzi z armii, jeje jednostek;
  • CAMPAIGN_BONUS - bonus pochodzi z bonusu kampanijnego;
  • SPECIAL_WEEK - bonus pochodzi ze specjalnego tygodnia;
  • STACK_EXPERIENCE - bonus pochodzi z doświadczenia oddziału;
  • COMMANDER - bonus pochodzi z dowódcy;
  • GLOBAL_EFFECT - bonus pochodzi ze świata, ma zasięg głobalny;
  • OTHER - bonus pochodzi z... innych źródeł.




  • effectRange to bardzo krótka część, określa ona jedynie to, jak daleko efekt będzie działać. Wchodzą tu jedynie cztery krótkie wartości:

  • NO_LIMIT
    ONLY_DISTANCE_FIGHT
    ONLY_MELEE_FIGHT
    ONLY_ENEMY_ARMY

    Ich efekt jest prosty i skuteczny:
  • NO_LIMIT - Zasięg będzie nieskrępowany;
  • ONLY_DISTANCE_FIGHT - bonus będzie aktywowany wyłącznie podczas walki dystansowej;
  • ONLY_MELEE_FIGHT - bonus będzie aktywowany wyłącznie podczas walki wręcz;
  • ONLY_ENEMY_ARMY - bonus będzie oddziaływać na wroga.




  • Przedostatnim punktem, który musimy zrealizować jest limiter. Jak sama nazwa wskazuje - określa on ograniczenia dla danego bonusu, nie pozwala mu się na rozpowszechnienie tam, gdzie nie chcemy. Zasadniczo możemy limiter ograniczać do wartości już istniejącej, predefiniowanej. W taki wariancie mamy trzy możliwości:

  • SHOOTER_ONLY
    DRAGON_NATURE
    IS_UNDEAD

    Ich znaczenie jest raczej oczywiste:
  • SHOOTER_ONLY - bonus działa wyłącznie na strzelców;
  • DRAGON_NATURE bonus działa wyłącznie na smoki (z DRAGON_NATURE );
  • IS_UNDEAD bonus działa wyłącznie na nieumarłych (z UNDEAD ).

  • Na szczęście można zapisać to również w bardziej zaawansowanej formie, wtedy bonus działa wyłącznie przy spełnieniu danego warunku:

    HAS_ANOTHER_BONUS_LIMITER
    CREATURE_TYPE_LIMITER

    W tym przypadku struktura kodu jest bardziej skomplikowana, bo oprócz jednego z powyższej dwójki w nawiasach klamrowych należy podać również parametry.
    Dla HAS_ANOTHER_BONUS_LIMITER należy podać jeszcze typ wymaganego bonusa i (opcjonalnie) jego subtype.

    Dla CREATURE_TYPE_LIMITER należy podać jeszcze typ wymaganego bonusa i (opcjonalnie) jego nazwę jednostki i logiczną wartość prawda fałsz czy bonus ma również działać na ulepszenia.

    Modding z Lulu
    Jestem Lulu i pokażę Ci jak się bawi tymi wspaniałymi zabawkami, które tu znajdziesz.
    Chodźmy się bawić!
    Równość nie istnieje, wszyscy o tym wiemy. Dlaczego więc niektóre nadzwyczajne cechy mają być nadawane wszystkim laleczkom? Przecież to byłoby potwornie nielogiczne!
    Wspominałam, że lubię smoki? Chcę dać zatem efekt wyjątkowy dla nich! Czyli... co muszę zrobić? Do materiału naszej zdolności dodajemy bardzo ważną część: "limiters": [ "DRAGON_NATURE" ]
    Fajnie? Pewnie! Ale możemy zrobić to również w inny sposób. Dajmy teraz nasz efekt wszystkim istotom, które... mogą się teleportować! Dodajemy zatem:
    "limiters": [ {
    "type":"HAS_ANOTHER_BONUS_LIMITER",
    "parameters": [ "FLYING ", 1]
    } ]

    A może teraz dajmy tę cechę konkretnej jednostce? Na przykład... rdzawemu smokowi? Naprzód, piszemy: "limiters": [ {
    "type":"CREATURE_TYPE_LIMITER",
    "parameters": [ "rustDragon", false]
    } ]




  • Została ostatnia kwestia: propagator. Pozwala on na rozniesienie bonusu na... pewną grupę. Określamy to przez:

  • BATTLE_WIDE
    VISITED_TOWN_AND_VISITOR
    PLAYER_PROPAGATOR
    TEAM_PROPAGATOR
    HERO
    GLOBAL_EFFECT

    Co one dają?
  • BATTLE_WIDE - bonus działa na obie strony biorące udział w bitwie;
  • VISITED_TOWN_AND_VISITOR - oddziałuje na miesto odwiedzane przez noszącego artefakt niczym elementy Statuy Legion;
  • PLAYER_PROPAGATOR - bonus działa na wszystko posiadane przez danego bohatera, jak Statua Legionu;
  • TEAM_PROPAGATOR - jak wyżej, ale działa na całą drużynę;
  • HERO - bonus oddziałuje na bohatera;
  • GLOBAL_EFFECT - bonus jest globalny, działa na wszystko, na co tylko może.

  • © 2003-17 Kwasowa Grota. Wszelkie prawa zastrzeżone. Jakiekolwiek kopiowanie, publikowanie lub modyfikowanie tekstów grafiki i innych materiałów chronionych prawem autorskim znajdujących się na stronie bez wyraźnej zgody autorów jest zabronione.
    Komnaty "VCMI". Redakcja, kontakt