JASS — skryptowanie gier Blizzarda od kuchni

Definicja pojęcia JASS — skryptowanie gier Blizzarda od kuchni

Czym jest JASS i dlaczego warto go poznać

JASS (Just Another Scripting Syntax) to język skryptowy stworzony przez Blizzard Entertainment do definiowania logiki gier w silniku Warcraft III. Jeśli graliście w custom mapy w Warcraft III — Tower Defense, DotA, różne RPG — to za każdą z nich stał kod w JASS. To język, który umożliwił całej generacji modderów i game designerów tworzenie złożonych mechanik gry bez dostępu do kodu źródłowego silnika.

JASS jest ważny nie tylko jako narzędzie, ale jako fenomen kulturowy. Warcraft III World Editor i JASS dały początek gatunkom gier, które dziś są warte miliardy dolarów. DotA (Defense of the Ancients), która wyewoluowała w cały gatunek MOBA, została pierwotnie zbudowana w JASS. Tower Defense, auto-battler, hero arena — te koncepty narodziły się w skryptach JASS pisanych przez nastolatków w ich pokojach.

Warto go poznać, bo JASS to case study w tym, jak dobrze zaprojektowany system skryptowania może uwolnić kreatywność społeczności. Nawet jeśli nie planujecie modować Warcraft III, zrozumienie JASS pomoże wam docenić design systemów skryptowych w innych silnikach gier.

Krótka historia i ewolucja

JASS zadebiutował w 2002 roku wraz z premierą Warcraft III: Reign of Chaos. Blizzard potrzebował języka skryptowego, który byłby wystarczająco potężny do tworzenia złożonych mechanik, ale na tyle prosty, żeby modderzy bez formalnego wykształcenia programistycznego mogli go opanować. JASS był odpowiedzią — proceduralny, typowany statycznie, z prostą składnią przypominającą Pascal lub BASIC.

Pierwsza wersja (JASS 1) była ograniczona — brakowało wielu funkcji natywnych, a World Editor eksponował tylko część możliwości silnika. W 2003 roku, wraz z dodatkiem The Frozen Throne, pojawił się JASS 2, który dodał więcej natywnych funkcji, lepszą obsługę triggerów i vJASS — rozszerzenie community-driven, które wprowadziło struktury, biblioteki, scope’y i inne koncepty z nowocześniejszych języków.

vJASS nie był oficjalnym produktem Blizzarda — stworzyła go społeczność modderów, którzy potrzebowali więcej niż JASS mógł zaoferować. Kompilatory jak JASS Helper i JNGP (JASS NewGen Pack) tłumaczyły vJASS na czysty JASS, który silnik Warcraft III mógł wykonać. To piękny przykład tego, jak społeczność potrafi rozszerzyć narzędzia ponad intencje ich twórców.

Kluczowe cechy i filozofia

JASS jest językiem proceduralnym z typowaniem statycznym. Nie ma klas, obiektów ani dziedziczenia — zamiast tego operujecie na uchwytach (handles) do obiektów gry. unit, player, effect, trigger — to wszystko typy uchwytów, które przekazujecie do natywnych funkcji silnika. To model, który przypomina C z jego wskaźnikami, ale bez niebezpieczeństwa dereferencji.

Składnia jest prosta i verbose. Każda funkcja musi być zadeklarowana z typami parametrów i typem zwracanym. Nie ma skrótów, nie ma syntactic sugar. call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "Hello") — to typowa linia kodu JASS. Dla doświadczonych programistów to wygląda topornie, ale dla początkujących ta jawność jest zaletą — zawsze wiadomo, co się dzieje.

System triggerów to unikalna cecha JASS. Zamiast pisać pętlę główną gry, definiujecie triggery — reguły “kiedy X się wydarzy, wykonaj Y”. Trigger składa się z eventów (co wyzwala), warunków (kiedy wykonać) i akcji (co zrobić). To deklaratywny model, który dobrze pasuje do logiki gry.

Filozofia JASS to “kontrolowana moc”. Blizzard dał modderom dużo swobody, ale w ramach bezpiecznych granic. Nie ma dostępu do systemu plików, nie ma operacji sieciowych poza tymi, które silnik udostępnia, nie ma sposobu na crash gry przez nieprawidłowy kod. To sandbox, który pozwala na kreatywność bez ryzyka.

Gdzie JASS sprawdza się najlepiej

Oczywisty use case to tworzenie custom map w Warcraft III. Tower Defense, RPG, strategie, MOBA, minigry — wszystko to było budowane w JASS. Najsłynniejsze mapy jak DotA Allstars, Island Defense, Legion TD miały tysiące linii kodu JASS i były rozwijane przez lata przez zespoły modderów.

JASS sprawdza się też jako narzędzie edukacyjne. Wielu profesjonalnych game developerów i programistów zaczynało od JASS w World Editorze. Prostota języka i natychmiastowa wizualna informacja zwrotna (widzisz co robi twój kod w grze) sprawiają, że jest to świetne wprowadzenie do programowania gier.

Warto wspomnieć, że koncepty z JASS przeniosły się do innych narzędzi Blizzarda. StarCraft II używa podobnego systemu triggerów (Galaxy Script), a wiele mechanik z custom map Warcraft III zostało zaadaptowanych w oficjalnych grach — tryb Nexus w Heroes of the Storm to bezpośredni spadkobierca custom map MOBA.

Jak wygląda kod w JASS

Prosty trigger — zadawanie obrażeń co sekundę:

function DamageTimer takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local unit target = LoadUnitHandle(udg_hash, GetHandleId(t), 0)
    local real damage = LoadReal(udg_hash, GetHandleId(t), 1)

    if GetUnitState(target, UNIT_STATE_LIFE) > damage then
        call SetUnitState(target, UNIT_STATE_LIFE, GetUnitState(target, UNIT_STATE_LIFE) - damage)
        call DisplayTextToPlayer(GetOwningPlayer(target), 0, 0, "Otrzymujesz " + R2S(damage) + " obrażeń!")
    else
        call KillUnit(target)
        call DestroyTimer(t)
    endif

    set t = null
    set target = null
endfunction

function ApplyPeriodicDamage takes unit target, real damage, real interval returns nothing
    local timer t = CreateTimer()
    call SaveUnitHandle(udg_hash, GetHandleId(t), 0, target)
    call SaveReal(udg_hash, GetHandleId(t), 1, damage)
    call TimerStart(t, interval, true, function DamageTimer)
    set t = null
endfunction

Zwróćcie uwagę na takes i returns — to deklaracja parametrów i typu zwracanego. local deklaruje zmienne lokalne. call jest wymagane przed wywołaniem funkcji. Nullowanie uchwytów na końcu to zapobieganie wyciekom pamięci — JASS nie ma garbage collectora dla uchwytów.

Ekosystem i narzędzia

World Editor Warcraft III to podstawowe IDE dla JASS. Pozwala tworzyć triggery graficznie (GUI) lub pisać bezpośrednio w JASS. JNGP (JASS NewGen Pack) to rozszerzony edytor, który odblokowuje funkcje niedostępne w standardowym World Editorze — custom vJASS, zaawansowane manipulacje obiektami, lepszy podgląd kodu.

vJASS i jego kompilator JASS Helper to kluczowe narzędzie community. Dodaje struktury, biblioteki, scope’y, moduły i tekstmakra — koncepty, które czynią duże projekty zarządzalnymi. TESH (The Editor Syntax Highlighter) dodaje podświetlanie składni i autouzupełnianie.

Społeczność JASS skupiała się wokół stron jak wc3c.net, The Helper i Hive Workshop. Hive Workshop do dziś hostuje tysiące custom map i tutoriali JASS/vJASS. Wiele wiedzy jest archiwalna, ale nadal wartościowa — szczególnie tutoriale pisane przez doświadcznych modderów.

Mocne i słabe strony

Mocne strony: głęboka integracja z silnikiem gry, prostota i dostępność. JASS pozwala na tworzenie zaskakująco złożonych mechanik w ramach tego, co silnik Warcraft III udostępnia. System triggerów jest intuicyjny i dobrze pasuje do event-driven logiki gier. Dla wielu osób JASS był pierwszym językiem programowania.

Słabe strony: brak garbage collectora dla uchwytów (konieczność ręcznego nullowania), brak struktur danych poza tablicami i hashtable, verbose składnia, ograniczone możliwości debugowania. Komunikaty o błędach bywają enigmatyczne, a brak prawdziwego debuggera sprawia, że szuka się bugów przez DisplayTextToPlayer.

JASS jest też martwy w sensie rozwoju. Warcraft III Reforged (2020) zmienił World Editor i wprowadził nowe problemy z kompatybilnością. Blizzard nie inwestuje w rozwój JASS, a społeczność modderów w dużej mierze przeniosła się na inne platformy.

Podsumowanie

JASS to język o nieproporcjonalnie dużym wpływie na branżę gier w stosunku do swojej prostoty. Powinni go poznać game designerzy, modderzy i każdy, kto interesuje się tym, jak systemy skryptowe mogą uwolnić kreatywność społeczności. Historia DotA i całego gatunku MOBA to w dużej mierze historia tego, co ludzie potrafili zrobić z JASS.

Dziś JASS jest przede wszystkim sentymentalną podróżą i narzędziem do utrzymania istniejących custom map. Nowe projekty modderskie częściej korzystają z Unity, Godot czy Unreal Engine. Ale duch JASS — prosty język skryptowy dający graczom moc tworzenia — żyje dalej w każdym silniku gier z systemem moddingu.

Pozostałe definicje

JASS to skryptowanie gier Blizzarda od kuchni. Warcraft III i system triggerow.
Scroll to Top
Framework
Języki Programowania
Stanowisko
Co to jest