Coding Tutorial von Zodiac Uchiha
Dieses Tutorial enthält wissenswertes über das Programmieren von Mugen chars in der Cns und cmd. Ausserdem wird dieses Tutorial die hilfe vom Programm Fighter Factory vorraussetzen. Desweiteren bitte ich Rechtsschreibfehler zu entschuldigen ^^ wichtig ist ja das ihr wisst was ich meine oder ? =)
Inhaltsangabe
1. kurze Erklärung vorweg
2. was ist eine State und wie ist sie aufgebaut ?
3. Liste der State Controllers
4. Liste der Trigger
5. kurze erklärung zu trigger
6. Spezielle States
7. schlusswort
8. programmierung eines leichten schlags
-------------------1. kurze erklärung vorweg---------------------------------------------------------------------
Alles was die Charaktere können , wird in sog. States geschrieben. jede State hat eine nummer um den jeweiligen Move zu nummerieren und somit identifizierbar machen. Man kann auch die Nummer der States frei bestimmen. Allerdings gibt es da etwas zu beachten. Ich gehe davon aus, dass ihr das Programm Fighter Factory heruntergeladen habt.das programm ist Freeware und ist von VirtuallTek (
www.VirtuallTek.com). damit macht es richtig spass , charaktere zu basteln =).
also, zu beachten wäre dies : wenn man per Fighter Factory (FF) einen Charakter neu erstellt, wählt man bei Datei --> Templates --> Elecbyte Player. bei FF ist dieses Template bereits vorhanden, aber bei FF Ultimateist es nicht dabei. zumindest nach meinem Wissensstand. Evt ist es bei späteren Versionen hinzugefügt worden. Falls nicht kann man sich das Template irgendwo runterladen.
wenn man also dieses Template ausgewählt hat, dann programmiert FF euch einen vorgefertigten Charakter mit den Basics wo aber die animationen noch nicht dabei sind.
Jedenfalls werden da einige nummern für bestimmte sachen reserviert. und es wäre ratsam, sich diese nummern einzuprägen. aber im grunde brauch man sich nur dieses zu merken : man sollte für die eigenen moves folgende nummern NICHT benutzen : 0 - 199 und 5000 - 5999. So ist man auf der sicheren Seite.die states 0 - 199 sind die basics wie Stand, Ducken,Springen usw und die statenummern 5000 - 5999 sind reserviert für animationen wo der Charakter getroffen wird oder auf dem Boden liegt (sog. gethit States). Klar kann man trotzdem die nummern ändern aber man sollte dies doch einfach lassen, denn wenn das Template euch die Basics vorprogrammiert, spart euch das jede menge zeit. ausserdem nutzen die meisten auch dieses template und kennen diese Nummern auch als reserviert. wenn ihr euch also in foren austauschen wollt, dann wäre also besser man beachte diese nummern die reserviert sind. Man kann das Template also als eine Art Schablone sehen. ausserdem programmiert sie euch auch die Konstanten vor. d.h., sowas wie die lebenspunkte und die angriffs bzw. verteidigungspunkte, die ihr dann alle nach euren belieben verändern könnt.
ok, und nun zur Sache :
------------------2. was ist eine State und wie ist sie aufgebaut ?-------------------------------------------------------------
die state einer bewegung bzw eines moves fängt immer mit einer Definition an. die sog. Statedef. hier wird festgelegt, welche animation der Charakter in dieser State annimmt. hier wird auch die geschwindigkeit festgelegt die der Charakter draufhat zu beginn der state und auch der Typ , MoveTyp und die Physik der State. hier ein Beispiel mit erklärungen daneben :
[Statedef 6000] ----> hier weisen wir der neuen State eine nummer zu, um den move leichter wiederzufinden.
type = S ----> hier wählen wir zwischen "S" = Stand , "A" = Air, "C" = Crouch. in dem beispiel links ist es also ein standmove
movetype = A ----> hier wählen wir aus "A"= Attack, "H" = gethit, "I" = Idle.Idle bedeutet dass der char weder angreift,noch getroffen wird
physics = S ----> hier wählt man aus "S" = Stand,"A" = Air, "C" = Crouch(selbe wirkung wie stand),"N" = None. bei "N" ist zu beachten, dass hier keine physics herrscht und man selber die erdanziehung machen muss. also die fallgeschwindigkeit. in dem beispiel haben wir die Stand Physik.
velset = 0,0 -----> hier gibt man in x , y koordinaten die geschwindigkeit in der waagerechten und senkrechten richtung an.
ein positiver x wert sorgt für einen vorwärtsschub nach rechts, während ein negativer y wert dafür sorgt, euren char nach oben zu befördern. wenn man es weglässt, dann ist 0,0 der standard. genau wie im beispiel.
Juggle = 5 ------> ein char beginnt normalerweise mit 15 juggle points wenn er zu boden fällt, d.h. wenn er in der luft NICHT mehr die kontrolle zurückgewinnt. und wenn unser move wie im beispiel 5 juggle points hat, dann kann er den gegner 3 mal erwischen während dieser in der fall state ist. weil 15 : 5 = 3 . dieses system wurde eingefügt um endlose Kombos zu vermeiden wobei dem gegner keine chance mehrgelassen wird, sich zu erholen und zurückzuschlagen.
ctrl = 0 --------> ein booleanischer wert ( 1 für wahr oder 0 für unwahr) gibt an , ob der char am angfang der state kontrollierbar ist. wenn dies im laufe der state nicht geändert wird, dann bleibt es natürlich so bis zum ende der state.
anim = 6000 ------> hier wählt man aus dem air file die aktionsnummer der animation aus, die für den char in dieser state gespielt werden soll.
poweradd = -1000 -----> hier legt man fest, wie viel power der move verbrauchen soll wenn er ausgeführt wird.
facep2 = 1 ---->ein booleanischer wert gibt an , ob man am anfang der state automatisch in sichtrichtung zum gegner gedreht wird oder nicht. also 1 für wahr oder 0 für unwahr.
hitdefpersist = 1 ------> ein booleanischer wert gibt an , ob die hitdef der vorherigen state weiterhin aktiv bleiben soll , sobald zu dieser state gewechselt wird. 1 für wahr oder 0 für unwahr.
movehitpersist = 0 ------> ein booleanischer wert gibt an , ob die movehit information (ob der vorherige move geblockt wurde, verfehlt hat oder getroffen hat) in diese state übernommen wird.
hitcountpersist = 0 -------> ein booleanischer wert gibt an , ob die anzahl der hits der vorherigen state im "hinterkopf" behalten werden sollen. (hat keinen einfluss auf den hitcounter im screen)
sprpriority = 2 ----> eine zahl zwischen 5 und -5 ( die 0 eingeschlossen) legt fest, welche anzeigepriorität die animation des char in dieser state hat. wenn ein effekt also den wert 3 hätte, würde er unseren char in dieser state überdecken wenn unser char wie im beispiel den wert 2 hat.
Ok. nun habe ich euch aufgelistet, welche möglichkeiten ihr habt, in der statedef sachen zu begin der state festzulegen. Hier kommt nun ein Beispiel, wo ihr sehen könnt, wie eine State in der basis aussieht :
[Statedef 200]
type = S
physics = S
movetype = I
ctrl = 0
anim = 200
velset = 0
[State 200, 1]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1
Den Teil mit Statedef haben wir oben schon durchgekaut. nun komme ich zum Teil den ihr dadrunter seht. in den eckigen klammern kann man nach dem komma eine beliebige nummer,ein wort oder Satz schreiben, damit man bei fehlern von MUGEN auf diese Zeile der cns verwiesen werden kann. etwa so : [State 200, ende der state und wechsel zum Stand]
auch die nummer kann man ändern, aber das ist nicht zu empfehlen, weil man ja so weiss in welcher statedef man suchen muss. also lediglich der übersicht wegen.
type = changestate --> hier wird der statecontroller angegeben. d.h. also welche aktion man genau in diesem Teil der state ausführen möchte. in diesem fall wird durch changestate die state gewechselt.
trigger1 = Animtime = 0 --> der trigger gibt den genauen Zeitpunkt an , WANN die gewünschte aktion stattfinden soll. in diesem Fall Wann die state gewechselt wird. Animtime = 0 bedeutet in dem fall "wenn die animation einmal durchgespielt ist, bzw die animationszeit abgelaufen ist. Man kann die Zeiten der einzelnen Bilder der animation auch zusammenzählen in der air file. dann weiss man die genaue anzahl an Gameticks.
value = 0 --> hier gibt man die nummer der state an zu der gewechselt werden soll. die nummer 0 ist reserviert für den Stand.
ctrl = 1 --> ein booleanischer wert gibt an ob man die kontrolle über den char haben soll sobald zu der gewünschten state gewechselt wird. in diesem fall haben wir die kontrolle.
nach der Statedef folgen also TeilStates, in denen eine bestimmte aktion zu einem bestimmten Zeitpunkt ausgeführt wird. so setzt sich dann die state zusammen und wir haben einen Move, der in Mugen funktioniert. Wenn wir denn keine feher gemacht haben =)
noch eine kleine sache :
--------------------3. Liste der State Controllers----------------------------------------------------------------------------------
im Ordner dieser Textdatei befindet sich eine Datei namens "sctrls". dies sind die Documents für State Controllers die Von Elecbyte mit der Mugen RC8 Version mitgeliefert werden. das was in der datei sctrls drinsteht habe ich NICHT selber geschrieben! aber es ist eine übersichtliche auflistung der existierenden State Controllers. diese beziehen sich jedoch nur auf die Version 1.0 von Mugen ! Vorsicht ist also geboten. wer eine liste mit den State controllers haben möchte die sich noch auf die Mugen beta version beziehen, der sollte sich die beta nochmals downloaden und nach den docs ordner suchen . darin befindet sich dann auch die datei namens sctrls. wäre eigentlich nicht nötig gewesen diese datei beizufügen, weil man ja durch den Mugen download bei elecbyte alles beisammen hat. aber naja. so hat man alles wichtige auf einen griff.
--------------------4. Liste der Trigger-------------------------------------------------------------------------------------------------
für die Trigger gilt das selbe wie bei den State controllers. im ordner wo auch diese textdatei liegt, ist auch eine datei die sich "trigger" nennt. auch diese ist die selbe wie die , die in der RC8 version von mugen mitgeliefert wird und wurde auch nicht von mir geschrieben. wenn ihr auch da die trigger datei von der beta wollt, müsst ihr euch die im ordner der beta version von mugen kopieren. also auch hier wäre es nicht notwendig gewesen die datei beizufügen.
--------------------5. kurze erklärung zu Trigger----------------------------------------------------------------------------------------
Trigger sind bedingungen, Vorraussetzungen um den State Controllers ihre aktion durchführen zu lassen. Wir müssen Jedem State Controller einen Trigger zuweisen, damit dieser weiss, WANN er in kraft treten soll. Es kann auch sein, dass mehrere trigger vorkommen. in diesem Fall werden die Trigger mit nummern versehen. in etwa so :
Trigger1 = time = 0
Trigger2 = animelem = 2
es ist wichtig, dass ein state controller mindestens 1 mal Trigger1 stehen hat. wenn man nur trigger2 stehen hat, bekommt man von Mugen eine Fehlermeldung.
wenn 2 mal Trigger1 auftaucht, dann bedeutet das, dass beide trigger wahr sein müssen, damit der state controller seine arbeit verrichtet. also nochmal zum verständnis : trigger1 ist die erste möglichkeit, den state controller auszulösen. trigger2 wäre eine andere möglicheit. trigger3 wieder eine andere. man kann bis zu trigger30 schreiben =) ich hätte ab und zu gerne mehr zur verfügung, aber naja. dann muss man halt etwas in die trickkiste greifen. aber diese gehört hier nicht rein =). weiter im text
letztenendes gibt es dann noch den Triggerall. der triggerall muss zusätzlich für ALLE trigger, die mit nummern versehen sind, wahr sein. das würde also bedeuten:
wenn man möchte, dass ein state controller seine aktion im 3. ODER 5. bild der animation ausführt, aber NUR wenn der Gegner gerade im getroffenen Zustand ist, dann schreibt man folgendes:
triggerall = p2movetype = H
trigger1 = animelem = 3
trigger2 = animelem = 5
und nun zähle ich euch mal ein paar triggermöglichkeiten auf. nur die gängigsten, damit man nicht unbedingt sofort zu der triggerliste greifen muss UND um euch die bedeutungen näherzubringen. und zwar schreibe ich 3 zeilen. die erste mit dem trigger, die zweite mit einem beispiel für ihn und die dritte für die erklärung. diese könnte halt auch etwas länger als eine zeile werden. aber ich nummeriere die trigger. dann wisst ihr wann ein neuer anfängt. also los
1. time
- trigger1 = time = 5
- time gibt die zeit an , die man in der state verbracht hat. das beispiel bedeutet, dass der state controller aktiviert wird, wenn wir uns im 5. gametick der state befinden.
2. animelem
- trigger1 = animelem = 10
- animelem steht für "animation element" und gibt die nummer des bildes der momentan aktiven animation an. im beispiel würde der state controller also beim 10. bild der aktiven animation aktiviert werden.
3. animelemtime
- trigger1 = animelemtime(2) = 5
- legt die animationszeit eines bestimmten bildes in einer animation fest. im beispiel würde unser state controller aktiviert werden , wenn das 2 bild der aktiven animation noch 5 gameticks übrig hat. "zu beachten ist hierbei, dass bei den animationen die zeit von dem angegebenen wert, runter auf null gezählt wird"
4. anim
- trigger1 = anim = 3000
- dieser trigger gibt die nummer der animation an, die aktiv sein soll, damit der state controller aktiviert wird. im beispiel würde es also die animation mit der nummer 3000 sein. die nummer der animationen findet ihr im air file unter aktionsnummer.
5. animtime
- trigger1 = animtime = 0
- dieser trigger legt die animationszeit fest, in der der state controller aktiviert werden soll. d.h. er addiert die zeitangaben aller bilder der animation zu einer summe zusammen und der festgelegte wert stellt den Zeitpunkt dar, wann der trigger wahr sein soll. im beispiel soll der trigger wahr sein, wenn die zeit auf null galaufen ist. mit anderen worten : wenn die animation einmal durchgespielt worden ist.
6. p2life
- trigger1 = p2life = 0
- p2life gibt den wert der lebenspunkte an , über die der gegner noch verfügen soll. im beispiel würde der gegner also tot sein müssen damit der trigger wahr ist. denn mit 0 lebenspunkten kämpft es sich ja nicht so gut ;-) .
7. life
- trigger1 = life = 0
- ist das selbe wie punkt 6. nur dass man hier die eigenen lebenspunkte im blick hat. in diesem beispiel müsste man selbst also tot sein, wenn der trigger wahr sein soll.
8. stateno
- trigger1 = stateno = 3000
- dieser trigger gibt an , in welcher state sich unser char befinden muss um den trigger wahr werden zu lassen. im beispiel müsste er also in der state 3000 sein um den trigger wahr werden zu lassen.
9. p2stateno
- trigger1 = p2stateno = 3000
- das selbe wie punkt 8. nur dass hier die gegnerische state abgefragt wird.
10. ctrl
- trigger1 = ctrl = 1
- dieser trigger fragt ab, ob der spieler die kontrolle über seinen char haben muss und wird mit einem booleanischen wert auf seine wahrheit geprüft ( 1 für wahr und 0 für unwahr). im beispiel müssten wir also die Kontrolle über unseren char haben um den trigger wahr werden zu lassen.
das wären so die gängigsten die mir einfallen und für euch einigermassen verständlich sein sollten. man muss beachten, dass man mit mathematischen begriffen wie "grösser als : >" , "kleiner als : <" , "grösser gleich : >= " mit der Bedeutung der trigger herumspielen kann. etwas was mit persönlich viel spass macht, weil ich meine Fantasie spielen lassen kann. ein beispiel hierfür wäre dieses:
trigger1 = time = 20 ----> würde ja bedeuten, dass man im 20. gametick der state sein muss um den trigger wahr werden zu lassen.
aber....
trigger1 = time >= 20 -----> würde heissen, dass der trigger ab dem 20. gametick der state wahr ist.
Diese Spielereien ermöglichen es, die trigger extrem flexibel zu machen und somit eure Möglichkeiten erhöhen. damit sollten die trigger in der basic erklärt worden sein.
-------------------6. Spezielle States----------------------------------------------------------------------------------------------------
Für JEDEN char gibt es ausserdem noch spezielle State nummern, die ebenfalls reserviert sind. es sind auch die einzig erlaubten States mit negativen nummern. fangen wir mit der ersten an :
Die State -1 sind statewechsel, die durch die eingabe von Tasten ausgelöst werden. diese State besteht aus 2 Teilen. 1. Der definition von commands. 2. State zuweisung. in der command definition muss man leider auf die Gross und kleinschreibung achten.
Dies sind die 8 Richtungen : B, DB, D, DF, F, UF, U, UB....wobei D = Down, B = Back, F = forward, U = Up bedeuten. Die sieben Tasten sind a ,b ,c, x, y, z, s. Die Command definition sieht so aus :
[Command]
name = " supermove" einen namen für den command eingeben. den namen werden wir in der State zuweisung brauchen
command = D, F, a bedeutet : Down, Forward, a
time = 15 das ist die zeit in der man den command eingeben muss damit er erkannt wird.
wie bereits erwähnt, braucht man den namen in der State zuweisung um der State diesen command zuzuweisen. was den command angeht , werden Richtungen und Tasten jeweils mit einem komma getrennt. ausserdem kann man vor den richtungen und tasten ein Präfix zuweisen. ich liste sie euch mal auf.
Slash ( / ) . Wenn der Slash als Präfix steht, dann bedeutet dies, dass die Taste oder die richtung gedrückt gehalten werden muss. hier ein Beispiel dafür :
command = /s
dieses bedeutet , dass man die taste s gedrückt halten muss.ein anderes Beispiel ist dieses:
command = /DF, a
dieses bedeutet , dass man die Taste a drücken muss WÄHREND man DF gedrückt halt.
das nächste Präfix ist dieses
( ~ ) Wenn dieses Zeichen als Präfix steht, dann bedeutet das, dass man die Taste oder Richtung loslassen muss. man kann auch die Zeit in Gameticks angeben wie lange man die Taste MINDESTENS gedrückt halten muss. hier wieder Beispiele :
command = ~c
dieses bedeutet, dass man die Taste c loslassen muss.
command = ~D, B, y
dieses bedeutet , dass man Down loslassen muss und dann nach hinten und dann y drücken muss.
command = ~20z
dieses bedeutet, dass man die taste z mindestens 20 ticks gedrückt halten werden muss und danach losgelassen werden muss.
Das nächste Präfix wäre das Dollar zeichen
( $ ) Dieses Präfix steht nur für Richtungen. und zwar funktioniert es folgendermassen.
command = $D
dieses beispiel wird feststellen ob D oder DF oder DB gedrückt wird. also alles wo D vorkommt.
command = $B
hier wäre es also B, DB, UB.
das letzte Präfix wäre das pluszeichen. wobei es nicht wirklich ein Präfix ist, weil man es zwischen zweich sachen schreiben muss.
( + )es gibt an welche 2 oder mehrere tasten zusammen gleichzeitig gedrückt werden müssen.
command = c+x
würde bedeuteten, dass man c und x gleichzeitig drücken muss.
das wären die Präfixe. natürlich kann man die ganzen sachen auch kombinieren um den gewünschten command zu erstellen.
Wenn ihr mehrere commands mt dem selben namen definiert habt, dann würden alle versionen mit dem selben namen für den selben zugewiesenen move funktionieren.
durch folgende sache kann man per cmd die tastenbelegung ändern.
[Remap]
a = a
b = b
c = c
x = x
y = y
z = z
s = s
ich empfehle aber die tasten so zu lassen wie sie sind. also so wie im beispiel oben. in mugen selbst kann man die tastenbelegung ja selber auch nochmal ändern was für viele leute einfacher ist, als in der cmd rumzuwurschteln.
Kommen wir nun zu der State zuweisung. hier werden unsere namen der commands die wir gerade festgelegt haben, wieder aufgegriffen. genauer gesagt, sie werden bestimmten states zugewiesen. das sieht folgendermassen aus :
[Statedef -1]
; Run Fwd --> alles nach einem Semikolon wird ignoriert und man kann sich kommentare schreiben zur hilfe.
[State -1, Run Fwd] --> ich empfehle hier die nummer zu 100 zu wechseln , weil in FF links die übersicht in einer liste angezeigt wird
type = ChangeState --> der Statecontroller der es möglicht macht, die State zu wechseln.
value = 100 --> die nummer der State, zu der gewechselt wird wenn man den command mit dem namen eingibt.
trigger1 = command = "FF" --> bedingung, dass der command mit dem namen "FF" eingegeben werden muss
trigger1 = statetype = S --> bedingung, dass der char in einer State mit Stand type sein muss.
trigger1 = ctrl --> bedingung, dass p1 die kontrolle über den char haben muss
Dies macht man natürlich mit jeder State. die basics sind auch hier vorprogrammiert wenn man das template "Elecbyte Player" benutzt.
OK. die nächste Spezielle State ist die State -2. In dieser State werden all die Statetypes abgefragt, die in jedem Gametick überprüft werden müssen. ein beispiel ist dieses hier :
[State -2, Blitz sound]
type = playsnd
triggerall = stateno = 0
trigger1 = anim = 0
trigger1 = animelem = 3
value = S10, 1
channel = -1
volume = 100
ignorehitpause = 0
wenn man dieses Beispiel übernimmt und in die State -2 schreibt, dann spielt Mugen den Sound mit der Gruppe 10 und der Nummer 1 immer im 3. Bild der animation 0 ab. aber nur , wenn sich der char in der State 0 befindet. die state 0 ist reserviert für den Stand des chars. wenn man also einen Blitzeffekt um den char macht der zur selben Zeit auftaucht, dann könnte man hiermit zum Beispiel den Sound für den Blitzeffekt einfügen.
die nächste und letzte spezielle State wäre die -3. hier werden ebenfalls alle Statetypes reingeschrieben, die jeden gamtick geprüft werden müssen, mit ausnahme der Situationen, wo der char sich in einer speziell geschriebenen State vom gegnerischen char befindet. Wie zum Beispiel beim Wurf. ich denke ein Beispiel ist diesesmal nicht nötig, da es sich fast um die Selbe Geschichte handelt.
------------------------------7. schlusswort------------------------------------------------------------------------------------------
ich hoffe, dass ich euch wenigstens ein bisschen helfen konnte. ich möchte mit dieser SEHR SEHR kleinen textdatei erreichen, dass mehr Deutsche sich mit Mugen befassen und es 1. mehr leute gibt, die sich für Mugen interessieren und 2. dass es mehr leute gibt, die sich der Programmierung widmen.
Wenn in dieser sehr bescheidenen Tutorial datei etwas unklar ist, dann schreibt mir in MugenGermany.com eine PM. am besten mit euren Skypenamen. dann kann man unabhängig vom forum sich schreiben und fragen klären bzw sich austauschen. mein username im forum MugenGermany ist Sasuke Uchiha. und in MugenGuild.com findet ihr mich unter Zodiac Uchiha.
und hier mein Skypename für die Leute die gerne sofort mit mir kontakt aufnehmen wollen :
byakuyashinomori
;-------------------------8. programmierung eines leichten schlags--------------------------------------------------------------------
sooo... und nun wollen wir mal gemeinsam das gelernte anwenden, indem wir einfach mal nen leichten schlag programmieren. hierbei lernen wir einen neuen state controller kennen. die Hitdef. hiermit teilen wir mugen mit, wie viel schaden der move anrichten soll und welcher andere kram noch passieren soll wenn der move trifft. ich persönlich denke, dass dieser state controller der Alptraum eines jeden Anfängers ist. er wird aber in elecbytes docs gut erklärt. also in der sctrls datei. ich werde nur bedingt erklären. bei fragen also ruhig mal nachfragen. also ran an den Speck :
Spoiler für Verstecktes:
zuerst müssen wir uns eine nummer überlegen die wir der State zuweisen wollen, die unseren Schlag identifizieren lässt. Ich habe ja schon erklärt, dass wir 0 -199 und 5000 - 5999 auslassen sollten, weil diese für die "lebenswichtigen" states eines chars reserviert sind. das heisst also wir fangen einfach mal mit 200 an.
ausserdem nehmen wir mal an, dass unsere animation für den schlag die nummer 200 hat. das macht die übersicht leichter, weil in diesem Fall Animationsnummer = Statenummer. bedenkt bitte, dass alles, was ihr nach einem semikolon schreibt, NICHT zur programmierung eingezogen wird. Sondern nur als kommentar da steht. auch in der cns und cmd könnt ihr euch also kommentare auf diese art und weise machen. ok fangen wir an zu schreiben :
[Statedef 200] ; zuweisung der statenummer
type = S ; zuweisung , dass es ein move ausm Stand heraus ist
movetype = A ; zuweisung, dass es ein angriff ist
physics = S ; zuweisung, dass die StandPhysik, von elecbyte vorprogrammiert, herrscht
velset = 0,0 ; die geschwindigkeit der x und y achse ist 0. er bleibt also auf der stelle.
ctrl = 0 ; spieler 1 hat während der char sich in dieser state befindet, keine kontrolle über den char.
juggle = 3 ; man kann p2 5 mal damit in der luft erwischen wenn p2 fällt und sich nciht mehr erholt.
poweradd = 25 ; man bekommt 25 punkte in der powerbar gutgeschrieben durch diesen Move
anim = 200 ; zuweisung der animationsnummer, die während dieser state gespielt werden soll.
[State 200, HitDef] ; definitionszeile, um den teil der state, bei fehlern wiederzufinden
type = HitDef ; State controller, der die treffer in der State definiert
trigger1 = animelem = 2 ; der move trifft beim 2. bild der aktiven animation. also hier die anim = 200
attr = S,NA ; Standing, Normal Attack
hitflag = MAF ; der gegner muss entweder stehen, in der luft oder fallend sein um ihn treffen zu können
guardflag = MA ; der gegner kann den schlag nur im stand und in der luft blocken
getpower = 0,0 ; punkte, die in der powerbar gutgeschrieben werden
givepower = 0,0 ; das selbe nur beim gegner
animtype = light ; der gegner zeigt eine leichte reaktion wenn er getroffen wird. mehr dazu evt später mal
air.animtype = light ; das selbe nur wenn der gegner in der luft getroffen wird
priority = 3,Hit ; relativ niedrige priorität. mehr dazu auch erst später
damage = 5,0 ; "schaden wenn der move trifft , schaden wenn der move geblockt wurde"
pausetime = 1,2 ; "zeit die p1 pausiert wenn der move trifft, zeit die p2 pausiert wenn der move trifft"
sparkno = 0 ; special effect, der angezeigt werden soll wenn der move trifft
guard.sparkno = 0 ; selbiges, nur wenn der move geblockt wurde
sparkxy = 0,0 ; x, y koordinaten wo der special effect angezeigt werden soll
hitsound = S1,0 ; "gruppe , nummer" des gewünschten sound effects wenn der move trifft
guardsound = 0,0 ; selbiges, wenn der move geblockt wurde
ground.type = High ; der gegner zeigt reaktion als ob er am kopf getroffen wurde. später mehr dazu
ground.slide = 0 ; ein negativer wert lässt den gegner nach hinten rutschen wenn er getroffen wird
ground.hittime = 6 ; zeit, die der gegner im getroffenen zustand verbringt (in der sog. gethit state)
air.hittime = 10 ;selbiges nur wenn er in der luft getroffen wird
ground.velocity = 0,0 ; x, y koordinaten für die geschwindigkeit von p2 wenn er getroffen wird
air.velocity = 0,0 ; selbiges, nur wenn p2 in der luft getroffen wird
sprpriority = 2 ; von -5 bis 5. höherer wert lässt sprites mit niedrigerem wert unter der animation ;des chars anzeigen
fall = 0 ; ein booleanischer wert gibt an ob der gegner zu fall gebracht wird(1 für wahr und 0 für ;unwahr)
kill = 1 ; ein booleanischer wert gibt an ob p2 durch diesen move tot gehen kann
numhits = 1 ; nummer an hits, die zum Kombo zähler hinzuaddiert werden sollen
; der state controller "hitdef" wird leider von Jedem anfänger gebraucht, weil er Mugen sagt, dass der Move auch
;trifft und schaden anrichten soll und jede menge anderen Kram verursachen soll. anfangs ist es schwer den
;überblick zu wahren. aber mit der zeit kommt man rein und kriegt den dreh raus. wie bei fast allen sachen. ich
;habe viele sachen ausgelassen bei der hitdef, aber so müsste es funktionieren
[State 200, Ende des Moves]
type = changestate ; state controller, der den char WÄHrend der State in eine ANDERE State versetzt
trigger1 = !animtime ; man könnte auch sagen : trigger1 = animtime = 0
value = 0 ; versetzt den char in State 0. ist reserviert für den stand.
ctrl = 1 ; man kann den char wieder kontrollieren
soooo....so würde das dann aussehen. man könnte jetzt auch noch sounds für die stimme des chars einfügen etc aber in der grundstruktur ist das schon richtig so.
ok und nun kommen wir zum cmd part, damit wir den move auch einsetzen können.
oben in der command definition muss folgendes stehen wenn wir den move den x knopf zuweisen wollen :
keine panik...mit dem template "Elecbyte Player" ist das schon vorprogrammiert =)
aber nur bei den gängigsten sachen so wie einzelne knöpfe. wenn ihr Super moves programmieren wollt, dann
ist euer command für den super move natürlich noch nicht definiert.
und unten in der State zuweisung, also in der Statedef -1 muss stehen :
bitte bedenkt hierbei, dass ihr bei der animation im air file die rote Kollisions box setzt. ansonsten trifft der move nicht auch wenn die hitdef in der cns steht.
ausserdem kann ich es immer wieder nur betonen : alles, was in einer zeile NACH einem Semikolon steht, wird NICHT bei der Programmierung berücksichtigt und dient somit euch zum beispiel als kommentar.
das wars. wenn wir das gemacht haben, müsste der char nun den leichten schlag auf dem x knopf ausführen. bei fragen einfach fragen.
Danke fürs Lesen und viel Spass euch !!!
gez :
Zodiac Uchiha bzw hier im Forum natürlich Sasuke Uchiha