Tekst
CFG, DEF, CNS, CMD, ST, TXT i inne - Pliki tekstowe, wszystkie można otworzyć najprostszym edytorem tekstowym.
Mugenowy kod jest w większości pisany jako tekst otwarty, bardzo często nieznany tekst jest ignorowany. Więc jeżeli piszesz kod w jakimś zwykłym notatniku z Windowsa i popełnisz błąd, możesz go nie zauważyć a w Mugenie coś nie będzie działało. Czasami tekst musi być zamknięty w cudzysłowie.
tekst - najczęściej tak będzie oznaczony zwykły tekst.
Liczby
Liczby można podzielić na całkowite: 1, 2, 3... i rzeczywiste (zapis z kropką): 1.3, 9.71. Pojawią się też sytuacje kiedy jakieś wartości mają ograniczony zakres tylko do wartości: 0 lub 1, tak jest z wartością boolean. W Mugenie standardowo zakres liczby całkowitej ze znakiem zawiera się w zakresie od -2147483648 do 2147483647. Liczby rzeczywiste można zapisać za pomocą kropki: 1.3, 9.71... lub jako ułamek: (3/10), (7/15). W niektórych przypadkach jak np.: 0.2 można opuścić 0 i zapisać to jako: .2
liczba, liczba_c - oznaczenie liczby całkowitej.
liczba_rz - oznaczenie liczby rzeczywistej.
boolean, 0/1, prawda/fałsz - oznaczenie wartości boolean.
Czas
Czas w Mugenie opiera się na wyświetlaniu klatek w ciągu sekundy na monitorze, czyli czymś na bazie FPS. Nie wnikając w szczegóły, standardem dla monitorów jest 60 fps. W Mugenie nazwano to "Tikami" stąd 60 tików to 1 sekunda dla całego Mugena. Jednak wpływ na tę wielkość możesz mieć też w konfiguracji Mugena w grupie [Config].
W skrócie: tiki to czas w Mugenie.
Nie da się dokładnie przenieść możliwości naszego wzroku na standard fps, bo zależy to od różnych czynników. Jednak wyliczając średnią, opierając się na różnych źródłach można powiedzieć, że w Mugenie nasze oko wychwyci zmianę klatek nawet o czasie wyświetlania 3 tików. Oko wychwyci zmiany klatek i ich wygląd, da to złudzenie płynności. Oczywiście zależy to też od różnic między poszczególnymi klatkami, bo jeżeli będą niewielkie to mózg odpuści sobie szczegóły.
Poruszanie się po osiach
Standardowo Mugen to silnik do tworzenia bijatyk 2D, dla tego dostępnymi osiami są X i Y.
Oś Y w Mugenie jest odwrócona w stosunku do tego co znasz z lekcji matematyki, jako 0 na osi Y uznawane jest ustawienie zOffset na arenie czyli podłoże po którym chodzą postacie. Wszystkie wartości z liczbą ujemną są nad podłożem areny, wszystkie wartości dodatnie są poniżej podłoża. Czyli jeżeli twoja postać ma podskoczyć na 20 pikseli to chodzi tu o wartość: -20 pikseli.
Poza osiami zewnętrznymi jakie ustala arena, postać ma też swoje osie wewnętrzne, które dla grafiki ustalasz przy jej wstawianiu do pliku SFF (B) i poruszasz postać punktem O(0,0) osi wewnętrznych po osiach zewnętrznych areny. Oczywiście pewne wartości postaci są subiektywne, bo zależą od tego w którą stronę zwrócona jest postać i poruszając się w przód po osi X zawsze ma do czynienia z liczbami dodatnimi.
zOffset w arenach jako nazwa, mógł pozostać po planach dodania osi Z do Mugena, częściowo ta oś Z działała, między innymi działało skalowanie postaci na arenie ze względu na pozycję na osi Z.
[PlayerInfo] ;--- Player 1 --- ;Player 1 starting coordinates. ;p1startx is typically -70 and p2startx is 70. ;p1starty and p1startz should be 0. p1startx = -70 ;Starting x coordinates p1starty = 0 ;Starting y coordinates p1startz = 0 ;Starting z coordinates p1facing = 1 ;Direction player faces: 1=right, -1=left ;--- Player 2 --- p2startx = 70 p2starty = 0 p2startz = 0 p2facing = -1 .... [Scaling] ;No need to change these values topz = 0 ;Top z-coordinate for scaling botz = 50 ;Bottom z-coordinate for scaling topscale = 1 ;Scale to use at top botscale = 1.2 ;Scale to use at bottom
Można było w arenie ustawić wartość P1startZ i P2startZ i się do niej odwołać po przez Pos Z w postaci i tak poznać na jakiej arenie jest postać. W wersji Mugena 1.0 i wyższej usunieto już oś Z i inaczej rozwiązano sprawdzanie areny na której są postacie.
Komentarz
Może pojawić się sytuacja kiedy chcesz dodać jakieś informacje do kodu tak by nie wywołało to żadnego błędu. Mugen nie uznaje niczego co napotka po znaku komentarza w całym wierszu.
; (średnik) - Znak komentarza.
; bla bla tu komentuje coś..... [Options] ;Podstawowe opcje dostępne z poziomu gry. ;Poziom trudności Difficulty = 8 ;Ilość życia [%] Life = 100 ;Czas walki Time = -1 ;Szybkość gry: ; wolniej - [-9 do -1] ; normalnie - [0] ; szybciej - [1 do 9] GameSpeed = 0 ;Ilość życia walcząc 1vs2 [%] Team.1VS2Life = 150 ;Kondycja drużyny dla trybu Team gdy gracz ginie: ; 1 – jeden gracz przegrywa -> koniec walki ; 0 - jeden gracz przegrywa -> drugi walczy dalej sam Team.LoseOnKO = 0 ........
Znaki specjalne i operatory
W wielu sytuacjach można użyć znaków specjalnych w tekście. Znaków które odpowiadają za operacje matematyczne lub logiczne.
+ (plus) - Dodawanie: 3 + 1 = 4.
- (minus) - Odejmowanie lub w pewnych sytuacjach przeciwieństwo: x = 1 czyli: -x = -1.
* (gwiazdka) - Mnożenie: 3 * 4 = 12.
** (dwie gwiazdki) - Potęgowanie: 3 ** 4 = 81, z potęgowania można przejść łatwo do pierwiastkowania używając odwrotności (pierwiastkowanie to odwrotność potęgowania): 2**2 = 4, ponieważ odwrotność liczby 2 = 1/2 = 0.5 to 4**0.5 = 2. Trzeba pamiętać że nie należy pierwiastkować liczb ujemnych.
/ (slash, ukośnik) - Dzielenie, zależnie od wartości i zapisu (liczby rzeczywiste lub całkowite) wynik będzie nieco inny: 7/2 = 3 natomiast 7.0/2.0 = 3.5, można zostawiać liczby w postaci ułamka zwykłego ale nie wszędzie dopuszczalne są liczby rzeczywiste. Trzeba pamiętać że nie należy dzielić przez 0.
= (znak równości) - Znak równości służy do nadawania wartości (od prawej do lewej) np. tu zostaje nadana wartość 2: value = 2. Znak służy też do sprawdzania przy warunkach (od lewej do prawej): trigger1 = x = 2, tu sprawdzane jest czy x = 2.
> (znak większości) - W ten sposób można sprawdzać czy dana wartość jest większa od innej. Sprawdzając warunek: trigger1 = x > 3, coś się stanie jeżeli "x" będzie miał większą wartość od 3.
< (znak mniejszości) - Działa tak samo jak znak większości ale sprawdza w drugą stronę: x < 3.
>= (znak większości i równości) - Ten znak działa analogicznie, sprawdza wielkość liczby włącznie z tą liczbą: trigger1 = x >= 3, coś się stanie jeżeli "x" będzie większe lub równe 3.
<= (znak mniejszości i równości) - Działa tak samo jak poprzedni ale sprawdza w drugą stronę: x <= 3.
( ) (nawiasy okrągłe) - Nawiasy są przydatne w działaniach matematycznych: x = (3*y)/2. W Mugenie można za ich pomocą określić otwarty przedział liczbowy: x = (3, 21) działa tak samo jak dwa równoczesne zapisy x > 3 i x < 21. Nawiasy pojawiają się też w zapisach funkcji np.: Var(3).
[ ] (nawiasy kwadratowe) - W ten sposób za pomocą przecinka można określić zamknięty przedział liczbowy: x = [3, 21] działa tak samo jak dwa równoczesne zapisy x >= 3 i x <= 21.
[ ) (nawiasy okrągłe i kwadratowe) - Oba rodzaje nawiasów można ze sobą łączyć ustalając przedziały liczbowe: x = [ 3, 21 ) działa tak samo jak dwa równoczesne zapisy x >= 3 i x < 21.
! (wykrzyknik) - Operator logiczny NOT inaczej znak zaprzeczenia, zapis: x != 2 oznacza, że coś nam zadziała tylko kiedy "x" nie będzie równe 2, stosując wykrzyknik z nawiasami można uzyskać: x != (3, 21) co oznacza przedział: x <= 3 i x >= 21.
% (znak procentowy) - Jest to operator mod (Modulo), służy do określenia czegoś w rodzaju reszty z dzielenia (x%y) pierwszego wyrażenia przez drugie. Jeżeli któraś z liczb jest rzeczywista lub dzielnikiem jest 0 to Mugen wywoła błąd. Najbardziej logiczne jest używanie tego operatora przy dzieleniu przez 10.
Wartości tego operatora określa wzór: ([] - część całkowita liczby, np.: [3.7] = 3, [-3.7] = -4).
15 / 10 = 1.5
15 % 10 = 5
7 / 3 = 2.333
7 % 3 = 1
3 / 3 = 1
3 % 3 = 0
6 / 3 = 2
6 % 3 = 0
Jak widać operator mod dobrze się sprawdza przy określaniu wielokrotności jakiejś liczby np. trigger1 = (time%3) = 0 w tym wypadku trigger zadziała przy wartościach time = 3, 6, 9, itd.
&& (podwójny znak et lub ampersand) - Operator logiczny AND działa jak "i" przy warunkach: x = 2 && y = 3 czyli x = 2 i y = 3.
|| (podwójna kreska pionowa) - Operator logiczny OR działa jak "lub" przy warunkach: x = 2 || y = 3 czyli x = 2 lub y = 3.
^^ (znak kareta) - Operator logiczny XOR działa jak połączenie "!=" (zaprzeczenie równości) przy warunkach: x ^^ y wywołuje to samo co x != y czyli coś nam zadziała jeżeli "x" jest różne od "y".
:= (dwukropek i znak równości) - Służy do nadawania wartości zmiennej w różnych sytuacjach a nie tylko przy odpowiednim kontrolerze np.: trigger1 = Var(3) := 5 podczas sprawdzania warunku ustawisz dla Var(3) wartość 5.
Logika
Logika w wielu miejscach w Mugenie opiera się na wartościach boolean czyli: 0/1, fałsz/prawda.
Przy warunkach (założeniach) czyli triggerach, trigger musi się ustawić na prawdę żeby zadziałać czyli np.: trigger1 = 1. Dokładnie "prawda" to po prostu "nie 0" czyli zapis: trigger1 = 2 też spowoduje że trigger zaskoczy.
trigger1 = 0 ;Fałsz trigger2 = 1 ;Prawda trigger3 = -8 ;Prawda
Dla tego przy wstawianiu funkcji musisz myśleć o wartościach jakie one zwracają. Używając znaku "=" możesz doprowadzić do sprawdzania wartości funkcji, co zwróci wynik na zasadzie: prawda/fałsz.
trigger1 = x = 5
Jeżeli to prawda że: x = 5 to efekt jest taki sam jak:
trigger1 = 1 ;Prawda
Dodatkowo można też stosować nawiasy, ustawiając kolejność działań lub ustalając przedziały wartości, tu przykład:
1 = (2 = (1 > 0) + !(0 > 1)) * (0.5 = (0,1))
Ponieważ: 1 > 0 to prawda, nawias można zastąpić następująco: (1 > 0) = 1. Ponieważ: 0 < 1 to zapis: 0 > 1 oznacza fałsz czyli można to zastąpić: (0 > 1) = 0, ale znak "!" oznacza przeciwieństwo, a przeciwieństwo fałszu to prawda, dla tego zapis: !(0 > 1) można zastąpić jako: !(0 > 1) = 1.
1 = (2 = 1 + 1) * (0.5 = (0,1))
Ponieważ: 1 + 1 = 2 to prawda, więc nawias można zastąpić: (2 = 1 + 1) = 1. Ponieważ zapis: (0,1) oznacza przedział liczbowy od 0 do 1, to zapis: (0.5 = (0,1)) jest prawdziwy bo liczba 0.5 zawiera się miedzy 0 a 1, można zastąpić to jako: (0.5 = (0,1)) = 1.
1 = 1 * 1
Ponieważ: 1 * 1 = 1 to prawda, więc na końcu: prawda = prawda, można bez problemu użyć takiego zapisu przy triggerze:
trigger1 = (2 = (1 > 0) + !(0 > 1)) * (0.5 = (0,1))
Taki zapis spowoduje uruchomienie triggera ponieważ wynikiem będzie: trigger1 = 1.
Przykład
Taki zapis w pliku CMD postaci, który może po przez różne poziomy energii przekierować postać do danego stanu z danym ciosem można łatwo skrócić:
[State -1] type = ChangeState trigger1 = command = "a" trigger1 = power < 1000 value = 3000 [State -1] type = ChangeState trigger1 = command = "a" trigger1 = power >= 1000 value = 3001 [State -1] type = ChangeState trigger1 = command = "a" trigger1 = power >= 2000 value = 3002
Tak może wyglądać zapis po skróceniu:
[State -1] type = ChangeState trigger1 = command = "a" value = 3000 + (power >= 1000) + (power >= 2000)