Website Navigation Help |
Translate the Website
|
Video Content Creation Reference | |
|
| Code Snippet Archive | |
| | |
Author | Message |
---|
thatguy
Posts : 1381 Join date : 2014-05-28 Age : 47 Location : Canada
| Subject: Fatalities July 25th 2018, 10:09 pm | |
| There are many different fatalities tutorials out there. Here are a few all in a bundle for you - Code:
-
https://mega.nz/#!4QER1QDC!v86CP4G5tc4OggI25IlblokvUgCuiComs061st0op58 Inside that .25mb file is: Binho Fatality compatibility tutorial Borghi Fatality compatibility tutorial Gohanssm Fatality tutorial Equinox Fatality tutorial Juano16 Folder: Juano16 fatality tutorial Juano16 Code for Stage fatalities My next post I will paste 1 tutorial out of all 6 of these as some of them include screenshots, and they just don't copy paste well out of the files. I will update this file from time to time adding more compatibility codes, and fatality tutorials. News Update 1 (July 28): I have found some more Fatailities stuff From old archived sites. I will clean it up a bit, translate to english and reupload the file again for update 2 in the coming weeks.
Last edited by thatguy on July 28th 2018, 3:32 pm; edited 1 time in total (Reason for editing : Fatalities tutorial updates...) | |
| | | thatguy
Posts : 1381 Join date : 2014-05-28 Age : 47 Location : Canada
| Subject: Fatality July 25th 2018, 10:12 pm | |
| =========================================== = = --------------------------------------- = Fatality Tutorial = = By: Equinox - 13/07/2004 = = Modified - 12/02/2005 = = = --------------------------------------- = Site: https://web.archive.org/web/20041129080106/http://2dgraphic.tripod.com:80/ = = E-mail: igyur@yahoo.com = = = --------------------------------------- ===========================================
NOTICE: -------------------------------------------------- ----------------------------------------------- - This tutorial aims to help to create finishers blows in M.U.G.E.N, including fatalities, brutalities, pit fatalities etc ...
- If you want to make your own tutorial on fatalities is based on this and their words, feel the will need not advise me.
- If this tutorial helps you in some way, I would not put my name anywhere as a thank you.
- If you want you can host this tutorial on their website. No need to ask me.
- I made minor modifications to the tutorial on 12/02/2005. I added some sctrls (as BGPalFX and PlaySnd) in code and tried to be clearer on some accounts.
Equinox. -------------------------------------------------- -----------------------------------------------
Introduction: -----------
When it comes to fatalities, the first thing that comes to mind is MK (Mortal Kombat). What you learn is valid for any char, regardless of what the game is. However, during the course of the tutorial, MK will be focused to facilitate understanding. Do everything step by step to understand the mechanism of fatalities.
Do fatalities is not difficult, just need to have a little patience; but I believe this is no problem for you, you could get here.
================================================== ============================================== Riding the codes: ---------------------
AIR:
- Let's start talking about the "FINISH HIM!"
First you create an animation, AIR, covering the entire game screen; with red collision box - Clsn1.
Animation (invisible) that covers the entire screen. Will serve as Helper later. [Begin Action 7000] Clsn1: 1 Clsn1 [0] = -320,480,320, -480 -1, 0, 0,0, -1
After this, rip the message sprites "FINISH HIM!" and puts them in SFF and, then make your animation in AIR. If you do not have any messages to place at the "fatality", you can skip this part. This animation should look like
Message "FINISH HIM!" (Which you ripped) [Begin Action 7100] (Animation Site)
================================================== ============================================== CNS:
Step 1: --------- - Now comes the part of the CNS *. In it you will place some important states for the proper functioning of the fatalities.
* NOTE: advise, as a matter of organization, type this in another CNS file named "Fatality", for example. But this is not a rule. Just to stay organized.
Remember that invisible animation you made in AIR and that affects the whole screen? You will make a state for her now. Watch what goes on.
- Finish Him -> Helper that will appear when you get near the end of the fight.
His character calls the Helper right now. -> 10000 is an imaginary number that does not exist in AIR. [StateDef 10000] type = S MoveType = I Physics = S Juggle = 1 velset = 0.0 ctrl = 1
invisible helper that will P2 (opponent) get dizzy. [10000 State, 1] type = Helper trigger1 = 1 trigger1 = NumHelper (7000) = 0; only appears if there is no other helper like this on the screen. ID = 7000 pos = 160 -140 postype = left stateno = 7000 helpertype = normal name = "FINISH HIM!" keyctrl = 0 ownpal = 1
[10000 State 2] type = ChangeState trigger1 AnimTime = 0 = value = 0 ctrl = 1
-------------------------------------
This is the HitDef for Helper created above.
Helper invisible "FINISH HIM!" [StateDef 7000] type = S MoveType = A Physics = S anim = 7000 velset = 0.0 ctrl = 1
Hitting the entire screen [State 7000, 1] type = HitDef trigger1 = AnimElem = 1 trigger1 = P2StateType! = A attr = S, SA damage = 0.0 animtype = Heavy hitflag = MF The guardflag = priority = 7 pausetime = 0.3 sparkxy = 0.0 sparkno = -1 gurad.sparkno = -1 hitsound = -1 guardsound = -1 ground.type = High ground.slidetime = 0 ground.hittime = 0 ground.velocity = 0 air.velocity = 0 air.fall = 1 fall = 0 numhits = 0 p2stateno = 867,031; P2 will go to this state after being hit by Helper.
PS: This Helper can not be destroyed.
------------------------------------- This is the animation Helper "FINISH HIM!" - MSG you ripped and placed in AIR. It appears when P2 dizzy (dizzy). If you do not have any messages to place at the "fatality", you can skip this part.
- "FINISH HIM!" - Message [Statedef 7010] type = S MoveType = I Physics = S Juggle = 1 velset = 0.0 anim = 7010 ctrl = 0
If you want, put some speech that will be said at the time that the message appears. [State 7010, 1] type = PlaySnd trigger1 = Time = 1 value = 3.3
"FINISH HIM!" will not shade while on the screen. [State 7010, 2] type = AssertSpecial trigger1 = 1 flag = noshadow
Helper "FINISH HIM!" - MSG [State 7010, 3] type = Helper trigger1 = NumHelper (7000) = 1; must be at least 1 Helper, which is P2 Trembling on the screen. trigger1 = NumHelper (7010) = 0; There can be no message "FINISH HIM!" on the screen. trigger1 P2StateNo = = 867,031; P2 should be in this state for the message appears. id = 7010 stateno = 7010 pos = 160 -140 postype = left helpertype = normal name = "FINISH HIM!" keyctrl = 0
------------------------------------- 2nd step: ---------
Now you place a Custom State (where P2 will be sent after the Helper appear). Note that the number of this state that was placed on the HitDef Helper Invisible (7000: P2StateNo = 867031)
Dizziness (Before a fatality, with "timer"). [Statedef 867031] type = S MoveType = H Physics = S Juggle = 1 ctrl = 0 velset = 0.0
Enemy will be alive (life) equal to 1. [State 867 031, 1] type = LifeSet trigger1 = 1 value = 1
P1 (your character) gets a little more energy, avoiding a possible tie. [State 867 031, 2] type = TargetLifeAdd trigger1 P2life = <= 1 value = 1
After 480 * ticks without fatalities, P2 falls. [State 867 031, 3] type = SelfState trigger1 = Time = 480 trigger1 P2StateNo = = [3000.3200]; Put here the numbers of fatalities on AIR. value = 5050 ctrl = 0
After 480 * ticks without fatalities, P2 dies. [State 867 031, 4] type = LifeSet trigger1 = Time = 480 trigger1 P2StateNo =! = [3000.3200] value = 0
* PS: 480 ticks = 8 seconds
When you run the command fatality P2 goes to another custom, where he stuns without "timer". Thus the blow can be realized. [State 867 031, 5] type = ChangeState trigger1 P2StateNo = = [3000.3200] value = 867032 -> Enemy will be sent to this state when the "fatality" is performed. ctrl = 0
Enemy is dizzy (dizzy) [State 867 031, 6] type = ChangeAnim trigger1 = AnimExist (5300) trigger1 = Anim! = 5300 value = 5300
------------------------------------- Now that P2 is in this state, it will be dizzy without "timer". [Statedef 867032] type = S MoveType = H Physics = S Juggle = 1 ctrl = 0 velset = 0.0
dizziness animation. [State 867 032, 1] type = ChangeAnim trigger1 = AnimExist (5300) trigger1 = Anim! = 5300 value = 5300
3 ° -step: ----------
Now open the main CNS 1ºst (the one where there is [Date]). You put "states -2" indispensable it.
To make them, you should setting a var high value, so that it is not reset between rounds. Let us take as an example the Var (58). The first thing you should do is change the parameter value - IntPersistIndex = 60 - on [date] of their CNS. If in the example var is 58, change it to 57. You see, just put a value below the selected var. By doing this it does not will reset between rounds.
[Statedef -2]
This VAR is only on when a previous round is won. [State -2, 1] type = VARSET trigger1 = Win = 1 trigger1 = NumHelper (7000) = 0; invisible Helper that makes the opponent stun. v = 58 value = 1
When opponent dies, it resets. [State -2, 2] type = VARSET trigger1 = Win = 1 trigger1 NumHelper = (7000) = 1 trigger1 p2life =! = 0 v = 58 value = 0
When opponent is 1 out of power, it dies with every blow. [State -2, 3] type = AttackMulSet triggerall! = Var (58) && p2Life <= 1 trigger1 RoundNo =! = 1 && Win = 0 trigger2 = P2StateNo = 867031 value = 9999
This state is optional, but I suggest that the place to get a sense of distance between P1 and P2. It will appear in debug during the game. [State -2, 4] type = DisplayToClipBoard trigger1 = 1 text = "P2BodyDist X% f,% f P2BodyDist Y, Var (58) =% d" params = p2bodydist x, y p2bodydist, Var (58)
------------------------------------- Add this code in HitDefs and Projectiles of character, with the exception of Fatalities:
kill! = var (58) || 1 = 867 031 * p2stateno
What happens when life (life) the opponent is equal to 1:
- You can kill if you did not win the first round before or P2 is tonteando (dizzy). - Prevents the opponent die before FINISH HIM.
================================================== ==============================================
CMD
Step 1: ---------
Now comes the part of the CMD. In it you put the commands required for the execution of fatalities.
FINISH HIM! -> This command will call the invisible Helper when P2 is with life (life) equal to 1. Everything is automatic. You do not need to dial any command.
[State -1] type = ChangeState trigger1 = ctrl, must have control trigger1 P2Life = <= 1; P2 life should be equal to 1. trigger1 = NumHelper (7000) = 0, can not be another Helper like this on the screen. trigger1 P2StateNo = = 867,031;! Opponent can not yet be in Custom State. trigger1 = RoundNo = 1;! Round can not be the first. trigger1 = var (58)> = 1; you must win at least one round before. trigger1 statetype = = A;! Your pesrsonagem should be standing. trigger1 p2statetype = = A;! P2 can not be in the air. value = 10000
This should be placed before any ChangeState or routine character. Or rather, at the top, just below "[Statedef -1]." If you have made Artificial Intelligence for your character, put this up ChangeState of her routines. These procedures are not rules, but it increases the likelihood of being called Helper at the end of the fight.
EX .: Artificial Intelligence
trigger46 = command = "cpu_46" trigger47 = command = "cpu_47" trigger48 = command = "cpu_48" trigger49 = command = "cpu_49" trigger50 = command = "cpu_50" trigger51 = command = "cpu_51" v = 59 value = 1
(Insert here the command that invokes the invisible Helper)
------------------------------
2nd step: ---------
The fatality to be performed must have parameters as shown below in CMD.
[State -1, Fatality] type = ChangeState trigger1 = ctrl; The character must have control. trigger1 = P2Life = 1; opponent of life should be equal to 1. trigger1 = NumHelper (7000) = 1; must be at least 1 invisible helper on the screen. trigger1 P2StateNo = = 867,031; Opponent should be in this state. trigger1 = RoundNo = 1;! Round can not be the first. trigger1 = var (58)> = 1; you must win at least one round before. trigger1 = command = "FATALITY"; Place the command to the fatality to run. trigger1 statetype = = S; Your character should be standing. trigger1 = (p2statetype = S) || (P2statetype = C), P2 can not be flying. value = 3000
PS: If you want, you can put another parameter to "P2BodyDist X <= 50" for example. You can use the language of "&&" to not have to type as many "trigger1".
================================================== ==============================================
Making Fatalities: -------------------
There are basic types of fatalities that we can take as an example:
Example 1: The first example we will analyze the fatality in which a Helper It appears in place P2. The method used in this case need not HitDef some for your character, just a Helper with a HitDef for it will enough. This model will serve to Fatality, Babality, Animality or any other scam where something or someone to appear in place of the opponent.
PS: You should put on a red AIR collision box - Clsn1 - around the helper function for the HitDef.
================================================== ==================== Fatality -> Here you will place the animation in which the character makes the move to to strike, but it will only be the helper. [Statedef 3000] type = S MoveType = A Physics = S Juggle = 1 velset = 0.0 anim = 3000 -> The character makes the move to give the fatality. ctrl = 0
This is the Helper that will appear in place of P2. [State 3000, 1] type = Helper trigger1 = Time = 50 trigger1 = NumHelper (3010) = 0, can be no helper like this on the screen. ID = 3010 pos = 0.0 postype = P2 stateno = 3010 helpertype = normal name = "helper" keyctrl = 0 sprpriority> = -2
darkens screen (optional) [3000 State 2] type = BGPalFX trigger1 = Time = 45 time = 999999 add = 0,0,0 mul = 0,0,0
Sound being played at the time (optional) [3000 State 3] type = PlaySnd trigger1 = time = 1 value = 1.1
[State 3000, 4] type = ChangeState trigger1 AnimTime = 0 = value = 0 ctrl = 1
----------------------------------- This is the Helper which will be called and it was placed in the blow up. Note that here was not set the parameter "anim". 11000 is an imaginary number that does not exist in AIR.
[Statedef 11000] type = S MoveType = A Physics = S Juggle = 1 velset = 0.0 ctrl = 0
[11000 State, 1] type = Helper trigger1 = NumHelper (3010) = 0 ID = 3010 pos = 0.0 postype = P2 stateno = 3010 helpertype = normal name = "helper" keyctrl = 0 sprpriority> = -2
[11000 State 2] type = Destroyself trigger1 AnimTime = 0 =
----------------------------------- This is HitDef helper. [Statedef 3010] type = S MoveType = A Physics = S anim = 3010; Helper Number AIR. velset = 0.0 ctrl = 1
[State 3010, 1] type = HitDef trigger1 = Time> = 15 trigger1 = P2StateType! = A attr = S, SA damage = 99.99 animtype = Heavy hitflag = MFA The guardflag = priority = 7 pausetime = 0.3 sparkxy = 0.0 sparkno = -1 gurad.sparkno = -1 hitsound = -1 guardsound = -1 ground.type = High ground.slidetime = 0 ground.hittime = 0 ground.velocity = 0 air.velocity = 0 air.fall = 1 fall = 0 numhits = 0 p2stateno = 867,033; P2 will go to this state after being hit by Helper.
----------------------------------- After P2 suffers the action of helper and your life goes to zero, it Custom comes to this state.
Custom State: [Statedef 867033] type = S MoveType = H Physics = S Juggle = 1 velset = 0.0 ctrl = 0
P2 changes position and "some" of the screen. [State 867 033, 1] type = posset trigger1 = Time> = 50 y = 1500
Opponent is no shadow. [State 867 033, 2] type = AssertSpecial trigger1 = Time> = 50 flag = noshadow
Enemy back to their own CNS, but is still in Y = 1500 position [State 867 033, 3] type = SelfState trigger1 = life = 0 value = 5150
The above example can also be applied to strokes below:
Babality: --------- You will have to create or rip a standard figure of a child and puts it as Helper. The Custom State where P2 is sent is similar. When he vanish from the screen and lose a life, the child (Helper) appears in place.
animality: ---------- It follows the same scheme, but the difference is that, as your character is turns into an animal, it must also vanish from the screen during the transformation and stroke. Try to your character the Sctrl posset, as you used the Custom opponent. One can use the same sample Custom State above. The animal may be a Helper with HitDef; or else life (life) P2 can go to zero when it is in the Custom State (Use the Sctrl LifeSet). When the strike ends, your character will return to the same place as before. This requires you to time the time of coming and going in posset, to his character.
FriendShip: ----------- Share P2 Custom State, and this custom, make a state where life the opponent goes to zero (try using Sctrl LifeSet). In SelfState put animation 5300. The result is that P2 tonteará even after your life is zero. If you can also create its own animation, AIR, to apply to P2 during the Custom State.
PS 5300 is only an example for the opponent to continue standing. We know that in FriendShip P2 should stand.
"Blade" means a fatality in which P2 is cut into several parts. -------------------------------------------------- ---------- For this you can create a black box that appears in place of P2 and the extent to which it is cut. The Helper should SprPriority higher than the opponent.
Share P2 Custom State and it put this here:
[State 3400] type = SprPriority trigger1 = Life <= 1 value = -5
This Sctrl has several options SprPriority to be chosen. They range from -5 to 5.
In the example P2 has SprPriority = -5, then your Helper should have SprPriority> -5.
If you want the P2 parts of the body are thrown on the ground, then you have to create or rip a body of a standard man to be used as a substitute. I suggest this model is a man half naked, for no clothes contrast with other characters. Here, more than in other scams, I advise using Sctrl BGPalFX to darken the scene. I say this not to appear a black box, rectangular in full scenario. I would be weird. Hence camouflages it would be better.
----------------------------------- Final words on the 1st Example: The HitDef for Helper in any scam is of paramount importance. Even if you use the Sctrl LifeSet the Custom State to end the life of the opponent; the HitDef for Helper, even with damage = 0, serve to send the P2 Custom State. Remember the parameter "P2stateno" you put in the HitDef Helper.
================================================== ====================
Example 2 -> "Brutality": ------------------------
 We will now see a model of Brutality or any other combo finisher. As in the first example, you do not put crash boxes around character. The only difference is that the blow will be divided into two parts: the first is when the character runs or walks toward the opponent to run the blow and the second part is when a series of blows, which is the "brutality" in sÃ.
 The moment you start the sequence of P2 blows will be sent to Custom State. If you want, you can put some animation that appears in place of P2 when he died. This animation can be a Helper. In our example, we will post an overflow blood to replace the P2 figure in the game.
 To the first part, you simply copy the animation 20 or 100 which is on file "Common1.cns" located in the "data" folder M.U.G.E.N. Then put it in a different State.
Note the example:
============================== - Brutality - Part 1
The character runs toward the opponent. -> 3199 is an imaginary number that does not exist in AIR. [Statedef 3199] type = S MoveType = A Physics = S Juggle = 1 anim = 100; running animation. velset = 0.0 ctrl = 0
constant speed. [State 3199, 1] type = VelSet trigger1 = 1 x = const (velocity.run.fwd.x)
It will not be interrupted by the floor, if it is running. [3199 State 2] type = AssertSpecial trigger1 = 1 flag = NoWalk
Does not turn during the race. [3199 State 3] type = AssertSpecial trigger1 = 1 flag = NoAutoTurn
Sound being played at the time (optional) [State 3199, 4] type = PlaySnd trigger1 = time = 1 value = 1.4
When the character is within 15 pixels of the opponent it changes state and begins to blows session. [3199 State 5] type = ChangeState trigger1 P2BodyDist = X <= 15 value = 3200 ctrl = 0
In the second part you must create a great animation containing all char moves, but do not put any collision box sprite some. Even that it is huge and strange, leave it. This is just one technique. There is another that is to place each sprite in a different animation, but there is already more work and we want to simplify.
============================== Brutality - Part 2
The character performs a sequence of strokes. 3200 is the animation in which the character performs the blows. [Statedef 3200] type = S MoveType = A Physics = S Juggle = 1 anim = 3200; animation number AIR. velset = 0.0 ctrl = 0
[State 3200, 1] type = Helper trigger1 AnimElem = = 63 trigger1 = NumHelper (3210) = 0, can be no helper like this on the screen. ID = 3210 pos = 0.0 postype = P2 facing = 1 stateno = 3210 helpertype = normal name = "overflow" keyctrl = 0 sprpriority> = -2
Screen darkens (optional). [3200 State 2] type = BGPalFX trigger1 AnimElem = = 10 time = 999999 add = 0,0,0 mul = 0,0,0
If you want, put a PlaySnd. The sound will be played whenever your character makes a move that supposedly would hit the opponent if there were Clsn1 in animation. [3200 State 3] type = PlaySnd triggerall p2bodydist = X <= 16 trigger1 AnimElem = = 2 trigger2 AnimElem = = 4 trigger3 AnimElem = = 7 trigger4 AnimElem = = 12 trigger5 AnimElem = = 16 trigger6 AnimElem = = 21 trigger7 AnimElem = = 23 trigger8 AnimElem = = 25 value = 0.6
Return to standing position (stand) [State 3200, 4] type = ChangeState trigger1 AnimTime = 0 = value = 0 ctrl = 1
----------------------------------- P2 helper replacing the end of the "Brutality". [Statedef 3210] type = S MoveType = A Physics = S Juggle = 1 velset = 0.0 anim = 3210 ctrl = 0
Burst blood [State 3210, 1] type = Helper trigger1 = NumHelper (3210) = 0 ID = 3210 pos = 0.0 postype = P2 stateno = 3210 helpertype = normal name = "overflow" keyctrl = 0 sprpriority> = -2
[3210 State 2] type = Destroyself trigger1 AnimTime = 0 =
-------------------------------------------------- -------------------- Remember the example of State - 867,032 - appearing in all fatalities for the opponent tonteie without "timer"? If you go back to the beginning of Tutorial (2-step CNS), you will find it. Add this Sctrl it:
[State 867 032, 1] type = ChangeState trigger1 P2StateNo = = 3200 value = 867035 -> Custom State where P2 will start after his character blows. ctrl = 0
By the time the character is running, P2 will go to the State - 867 032 - where he tonteará without "timer", and will have enough time to get to the opponent and start the blows. When she stop running and start the sequence of blows, P2 will the State 867,032 and will go to the State - 867035. It is in this State where the Helper appears and the opponent will lose life.
Well, this is the State Custom's "brutality". [Statedef 867035] type = S MoveType = H Physics = S Juggle = 1 velset = 0.0 ctrl = 0
There will be a draw among the animations 5000 and 5001. The draw will be made every 12 ticks not to get too fast while P2 is picking up. [State 867 035, 1] type = VarRandom trigger1 = (GameTime 12%) = 0 trigger1 = Time> = 3 v = 10 range = 1.2
Spanking [State 867 035, 2] type = ChangeAnim trigger1 = var (10) = 1 trigger1 = Time> = 3 value = 5000
Spanking - 2 [State 867 035, 3] type = ChangeAnim trigger1 = var (10) = 2 trigger1 = Time> = 3 value = 5001
Life goes to 0 (zero) when you reach a certain time. [State 867 035, 4] type = LifeSet trigger1 = Time = 295 value = 0
Changes position and another animation may arise locally. One shown above and replace P2. [State 867 035, 5] type = posset trigger1 = time> = 295; Helper will appear at the same time. y = 1500
Do not cry at the end (optional). You will not want the opponent shouting the same time bursts. For opponents that have echo after the scream, you must set The Sctrl 50 or more ticks. Take a read at sctrls documentation to learn more. [State 867 035, 6] type = AssertSpecial trigger1 = 1 flag = nokosnd
Back to its own CNS [State 867 035, 7] type = SelfState trigger1 = Time> = 300; P2 return to its own CNS, but already dead. value = 5150
Finally the code, open the CMD and enter the related execution command the "brutality". Follow the model that was placed above.
PS: You must place the command concerning the first part of "brutality". The coup was divided into two parts - 3199 and 3200 -. Place the command only to the first part - 3199. So the character will run and start the sequence.
You may have noticed that this method of doing "brutality" there is no present HitDef. Only one Custom state where P2 is sent and replaced by a Helper (optional). In this custom, the opponent loses life. Some chars-maker use HitDef with boxes collision, but I personally prefer the method that you use only Custom State.
================================================== ====================
Example 3 -> Pit-Fatality: ---------------------------
It's a little more complicated, for it was last.
First you must rip or create a large of measurements standards size screen the M.U.G.E.N - 320 x 240. It is not a rule, but the goal is to cover the entire screen.
You can get the same animation Uppercut (hook) of your character to the coup. The opponent will be sent to Custom State at the same time and suffer a vertical acceleration to vanish from the screen. When he reappears, the Pit-Fatality screen should already be gift. Put it as Helper.
Note the example:
This is the animation in which the character performs the "hook". [Statedef 3300] type = C MoveType = A Physics = C Juggle = 1 ctrl = 0 anim = 3300 velset = 0.0
Her character hits P2. [State 3300, 1] type = HitDef trigger1 AnimElem = = 3 attr = C HA damage = 0.0 hitflag = HAF MA = guardflag pausetime = 1.0 sparkno = -1 sparkxy = -1 guard.sparkno = -1 hitsound = s1,0 p2stateno = 867036 -> Immediately P2 will the Custom State.
At any given time, when P2 leaves the screen, his character and will also add to a distant position. At the same time that the Pit screen appears, but a little before. Compare the times. [3300 State 2] type = posset trigger1 = Time = 50 y = 2000
The character has no shadow. [3300 state, 3] type = AssertSpecial trigger1 = 1 flag = noshadow
Screen Pit-Fatality. I suggest you put the first Helper in this position (pos = 160, -120). See if it was suitable and to your liking. [State 3300, 4] type = Helper trigger1 NumHelper = (3310) = 0; There can be no helper like this on the screen. trigger1 = Time> = 55 ID = 3310 pos = 160 -120 postype = left stateno = 3310 helpertype = normal name = "screen" keyctrl = 0 sprpriority> = -2
Your character will be in the same pose "hook" to die P2. [3300 State 5] type = ChangeState trigger1 P2Life = 0 = value = 0 ctrl = 1
----------------------------------- Helper: Screen [Statedef 3310] type = S MoveType = A Physics = S Juggle = 1 velset = 0.0 anim = 3310 ctrl = 0
[State 3310, 1] type = Helper trigger1 StateNo = = 3300 ID = 3310 pos = 160 -120 postype = left stateno = 3310 helpertype = normal name = "screen" keyctrl = 0 sprpriority> = -2
[3310 State 2] type = Destroyself trigger1 AnimTime = 0 =
------------------------------------- Where P2 will during the Pit-Fatality. [Statedef 867036] type = S MoveType = H Physics = S Juggle = 1 velset = 0.0 ctrl = 0
Without shadow [State 867 036, 1] type = AssertSpecial trigger1 = 1 flag = noshadow
Camera not included with P2 out of the screen. [State 867 036, 2] type = ScreenBound trigger1 = 1 value = 0 movecamera = 0
Taking Clout - P2 animation to be set. [State 867 036, 3] type = ChangeAnim trigger1 = 1 value = 5030
Speed ??- when P2 is coming out of the screen. If you want to put VelSet, the choice is yours. [State 867 036, 4] type = VelAdd trigger1 = time <= 32 y = -0.3
Speed ??- P2 appears on the screen again. [State 867 036, 5] type = VelAdd trigger1 = time> = 31 y = 0.3
Life (life) goes to 0 (zero) at a certain time of the fall. [State 867 036, 6] type = LifeSet trigger1 = 115 time = value = 0
Changes position when Life = 0 [State 867 036, 7] type = posset trigger1 = Time = 115 y = 1500
Opponent is invisible when Life = 0 [State 867 036 8] type = AssertSpecial trigger1 = Life = 0 flag = invisible
Do not cry at the end (optional). For opponents that have echo after the scream, you must set The Sctrl 50 or more ticks. Take a read at sctrls documentation to learn more. [State 867 036, 9] type = AssertSpecial trigger1 = 1 flag = nokosnd
Back to its own CNS when Pos Y = 1500 [State 867 036 10] type = SelfState trigger1 = Pos Y = 1500 value = 5150
The same has been done in Brutality, will be here too. Add a state in Statedef in the opponent stuns without "timer" (867 032) so that when your character der P2 direct blow go to Custom State.
Example:
[State 867 032, 1] type = ChangeState trigger1 P2StateNo = = 3300 value = 867036 -> Custom State where P2 goes after her character start the Pit-Fatality. ctrl = 0
This will serve to the coup is not interrupted, even if your character has IA / AI.
Try to make everything as accurate as possible at the Pit-Fatality. In rare cases in which images are multiplied P2, or when P2Life = 0, part of the stage just showing up. To alleviate these bugs, I suggest you change the slatted screen resolution of 320 x 240 to 350 x 260 eg and add it in State -2:
Funds disappear during the coup. [State -2, 1] type = BGPalFX trigger1 = P2Stateno = 867036 time = 999999 add = 0,0,0 mul = 0,0,0
When P2 is in Custom State, the scene will be dark; so the stage will not appear.
When P2 life is 0 (zero), while going to a distant position and is invisible, there may, as a suggestion, it bursts into many pieces, as well as Brutality; to clash with many metal ferpas. If you just want it to be jammed in ferpas and die, obviously you do not need to make it invisible and send him to a distant position.
-------------------------------------------------- -----------------------------------------------
Thanks:
- God, for giving me the opportunity to learn about M.U.G.E.N and fatalities.
- Chon Wang: for teaching me the fundamentals and techniques of fatalities.
-------------------------------------------------- -----------------------------------------------
I hope the tutorial will assist in the creation of fatalities.
If you have any questions, please contact me by email.
Good luck,
Equinox. | |
| | | Shining
Posts : 5028 Join date : 2013-03-26 Age : 44 Location : Italy
| Subject: Re: Code Snippet Archive July 26th 2018, 12:49 am | |
| | |
| | | thatguy
Posts : 1381 Join date : 2014-05-28 Age : 47 Location : Canada
| Subject: Simple Attack With Descriptions July 27th 2018, 1:10 am | |
| ; CNS difficulty: easy [Statedef 200] type   = S      ;State-type: S-stand, C-crouch, A-air, L-liedown movetype= A    ;Move-type: A-attack, I-idle, H-gethit physics = S      ;Physics: S-stand, C-crouch, A-air juggle  = 1      ;Number of air juggle points move takes ;Commonly-used controllers: velset = 0,0     ;Set velocity (x,y) (Def: no change) ctrl = 0         ;Set ctrl (Def: no change) anim = 200      ;Change animation (Def: no change) poweradd = 20   ;Power to add (Def: 0) sprpriority = 2    ;Set layering priority to 2 (in front)
[State 200, 1] type =   HitDef         ; Hit definition trigger1 = Time = 0      ; What triggers it (When time begins) attr = S, NA            ;Attribute: Standing, Normal Attack damage = 23, 0         ;Damage that move inflicts, guard damage animtype = Light        ;Animation type: Light, Medium, Heavy, Back (def: Light) guardflag = MA         ;Flags on how move is to be guarded against hitflag = MAF          ;Flags of conditions that move can hit priority = 3, Hit         ;Attack priority: 0 (least) to 7 (most), 4 default                    ;Hit/Miss/Dodge type (Def: Hit) pausetime = 8, 8       ;Time attacker pauses, time opponent shakes sparkno = 0           ;Spark anim no (Def: set above) sparkxy = -10, -76      ;X-offset for the "hit spark" rel. to p2,                   ;Y-offset for the spark rel. to p1 hitsound = 5, 0        ;Sound to play on hit guardsound = 6, 0      ;Sound to play on guard ground.type = High    ;Type: High, Low, Trip (def: Normal) ground.slidetime = 5   ;Time that the opponent slides back ground.hittime  = 12   ;Time opponent is in hit state ground.velocity = -4   ;Velocity at which opponent is pushed airguard.velocity = -1.9,-.8       ;Guard velocity in air (def: (air.xvel*1.5, air.yvel/2)) air.type = High       ;Type: High, Low, Trip (def: same as ground.type) air.velocity = -1.4,-3   ;X-velocity at which opponent is pushed,                  ;Y-velocity at which opponent is pushed air.hittime = 12      ;Time before opponent regains control in air
[State 200, 5] type = ChangeState      ;Change players state trigger1 = AnimTime = 0   ;What triggers it (When animation is over) value = 0              ;State to change to (stance - statedef 0) ctrl = 1               ;Give back control | |
| | | thatguy
Posts : 1381 Join date : 2014-05-28 Age : 47 Location : Canada
| Subject: The Sprite Standard July 27th 2018, 1:14 am | |
| The sprite standard M.U.G.E.N, (c) Elecbyte 1999-2009 Documentation for version 1.0 (2009) Updated 05 October 2009 Contents Required Sprites Standard getting hit Diagram Recommended group numbers Required Sprites Every character must have what is called "required sprites". These are sprites that you may not necessarily be using for your animations, but must always be included in the character's SFF. These sprites are necessary for your character to appear correctly when thrown. Use only these standard frames when making a action in the .air file that characters beside yourself will execute. For example, getting thrown animation. The horizontal component of "Axis" means around the center of the character, unless specified otherwise Standard getting hit You MUST follow the numbers exactly. Axes labelled "where feet would be" should have the axis approximately between where both feet would be, if the character was made to stand with his center of gravity fixed in the same position as that required frame Axes labelled "midsection" should have the axis around the waist area Axes labelled "head" should have the axis in the middle of the character's head Some numbers, such as 5000,1 to 5000,9 are for you to add intermediate frames if you choose to do so. See Diagram for an example of how the sprites should approximately look and where the axes should be placed. Frame Description Axis 5000,0 Hit high while standing, head back slightly Feet 5000,10 Hit high while standing, head back more Feet 5000,20 Hit high while standing, head back far Feet 5001,0 Frame 5000,0 Midsection 5001,10 Frame 5000,10 Midsection 5001,20 Frame 5000,20 Midsection 5002,0 Frame 5000,0 Head 5002,10 Frame 5000,10 Head 5002,20 Frame 5000,20 Head 5010,0 Hit low while standing, bent over slightly Feet 5010,10 Hit low while standing, bent over more Feet 5010,20 Hit low while standing, bent over far Feet 5011,0 Frame 5010,0 Midsection 5011,10 Frame 5010,10 Midsection 5011,20 Frame 5010,20 Midsection 5012,0 Frame 5010,0 Head 5012,10 Frame 5010,10 Head 5012,20 Frame 5010,20 Head 5020,0 Hit while crouching, head back slightly Feet 5020,10 Hit while crouching, head back more Feet 5020,20 Hit while crouching, head back far Feet 5030,0 Hit back, head back slightly Where feet would be if standing 5030,10 Hit back, head back far Where feet would be 5030,20 Hit in stomach with body horizontal Where feet would be 5030,30 Hit back, body horizontal Where feet would be 5030,40 Falling, head down slightly Where feet would be 5030,50 Falling, head down far Where feet would be 5031,0 Frame 5030,0 Midsection 5031,10 Frame 5030,10 Midsection 5031,20 Frame 5030,20 Midsection 5031,30 Frame 5030,30 Midsection 5031,40 Frame 5030,40 Midsection 5031,50 Frame 5030,50 Midsection 5032,0 Frame 5030,0 Head 5032,10 Frame 5030,10 Head 5032,20 Frame 5030,20 Head 5032,30 Frame 5030,30 Head 5032,40 Frame 5030,40 Head 5032,50 Frame 5030,50 Head 5040,0 Fall and hitting ground Ground-level (eg. back) 5040,10 Lying down on ground Ground-level 5040,20 Hit while lying on ground Ground-level 5041,0 Frame 5040,0 Middle of body 5041,10 Frame 5040,10 Middle of body 5041,20 Frame 5040,20 Middle of body 5042,0 Frame 5040,0 Head 5042,10 Frame 5040,10 Head 5042,20 Frame 5040,20 Head 5060,0 Hit up, head pointed up, body vertical Where feet would be if standing 5060,10 Head pointed down, body vertical Where feet would be 5061,0 Frame 5060,0 Midsection 5061,10 Frame 5060,10 Midsection 5062,0 Frame 5060,0 Head 5062,10 Frame 5060,10 Head 5070,0 Thrown, body tiled forwards slightly Where feet would be if standing 5070,10 Thrown, body tiled forwards far Where feet would be 5070,20 Thrown, body horizontal, head in front Where feet would be 5071,0 Frame 5070,0 Midsection 5071,10 Frame 5070,10 Midsection 5071,20 Frame 5070,20 Midsection 5072,0 Frame 5070,0 Head 5072,10 Frame 5070,10 Head 5072,20 Frame 5070,20 Head DiagramRecommended group numbers Group Description 0 Standing 5 Turning 10 Stand to crouch 11 Crouching 12 Stand to crouch 20 Walking forwards 21 Walking backwards 40 Jump start (on ground) 41 Jump neutral (upwards) 42 Jump forwards (upwards) 43 Jump back (upwards) 44 Jump neutral (downwards) 45 Jump fwd (downwards) 46 Jump back (downwards) 47 Jump landing 100 Run fwd 105 Hop back 120 Start guarding (stand) 121 Start guarding (crouch) 122 Start guarding (air) 130 Guard (stand) 131 Guard (crouch) 132 Guard (air) 140 Stop guarding (stand) 141 Stop guarding (crouch) 142 Stop guarding (air) 150 Guarding a hit (stand) 151 Guarding a hit (crouch) 152 Guarding a hit (air) Source: http://www.elecbyte.com/mugendocs/spr.html | |
| | | thatguy
Posts : 1381 Join date : 2014-05-28 Age : 47 Location : Canada
| Subject: Projectile Charge (Mobile Version) July 27th 2018, 9:54 pm | |
| =============================== Projectile Charge (Mobile Version) =============================== Created by The Necromancer ;--------------------------------------------------------------------------- Projectile Charge -- I'm not sure what's the "official" name of this feature, but this is VERY common in the Mega Man games. This same feature can be used to "pump up" your character, while your he/she is still able to move. ;--------------------------------------------------------------------------- Under statedef -3, (Since the effect should end if your character gets thrown.) input: [State -3] type = VarAdd trigger1 = command = "holdx" var(0) = 1 ignorehitpause = 1 [State -3] type = VarSet trigger1 = (stateno = [9000,9001]) || (stateno = [9010,9011]) || (movetype = H && command != "holdx") var(0) = 0 [State -3] type = ChangeState trigger1 = (command != "holdx") && (var(0) = [0,50]) && (ctrl) && (statetype != A) value = 9000 ;On the ground (Weak effect) [State -3] type = ChangeState trigger1 = (command != "holdx") && (var(0) > 50) && (ctrl) && (statetype != A) value = 9001 ;On the ground (Strong effect) [State -3] type = ChangeState trigger1 = (command != "holdx") && (var(0) = [0,50]) && (ctrl) && (statetype = A) value = 9010 ;In the air (Weak effect) [State -3] type = ChangeState trigger1 = (command != "holdx") && (var(0) > 50) && (ctrl) && (statetype = A) value = 9011 ;In the air (Strong effect) Feel free to add in any effects. Next, you create your character's move as the result of releasing the button. Because this can be anything you choose, I'll leave you at that. | |
| | | thatguy
Posts : 1381 Join date : 2014-05-28 Age : 47 Location : Canada
| Subject: Projectile Charge (Non Mobile Version) July 27th 2018, 9:55 pm | |
| ================================== Projectile Charge (Non Mobile Version) ================================== Created by The Necromancer
;--------------------------------------------------------------------------- Projectile Charge -- This feature isn't very common, as with the Mobile version, but it's a great way to increase a projectile's power.
Characters such as Ryu from SF3 have this feature. ;--------------------------------------------------------------------------- 1.) In your character's charging state, have a VarSet AND a VarAdd. Example:
;Charge reset at the beginning. [State 9000, VarSet] type = VarSet trigger1 = Time = 0 var(0) = 0
;Charge addition when holding the button. [State 9000, VarAdd] type = VarAdd trigger1 = Time > 0 var(0) = 1
2.) Have several changestate parameters. Each with a different var trigger. The higher the variable's value, the more powerful the attack should be. Examples:
[State 9000, 1] type = ChangeState triggerall = command != "holdx" ;When you release the button. trigger1 = var(0) <= 20 ;Held the button for less than 20 ticks. value = * ;Weak projectile state
[State 9000, 2] type = ChangeState triggerall = command != "holdx" ;When you release the button. trigger1 = var(0) = [21,40] ;Held the button between 21 and 40 ticks. value = * ;Medium projectile state
etc...
| |
| | | thatguy
Posts : 1381 Join date : 2014-05-28 Age : 47 Location : Canada
| Subject: Projectile Critical July 27th 2018, 9:55 pm | |
| =================== Projectile Critical =================== Created By The Necromancer
;--------------------------------------------------------------------------- Projectile Critical -- A "secret" feature in the original Super Boutuden games, you can cause extra damage to your opponent, by pressing any button the moment your character's projectile makes contact. ;--------------------------------------------------------------------------- This is a fairly simple piece of code. All you need is to add this under statedef -2:
[State -2, Projectile] type = Projectile triggerall = ((ProjContactTime(9000) != -1) && (ProjContactTime(9000) < 5)) trigger1 = command = (whatever) projid = 9001 projanim = -1 projhitanim = -1 projremanim = -1 projcancelanim = -1 etc...
Simply add in your preferences for your projectile's HitDef attributes.
Please note, this example triggers a projectile with an ID of 9000. Change it to suit your character. | |
| | | thatguy
Posts : 1381 Join date : 2014-05-28 Age : 47 Location : Canada
| Subject: Projectile Repel July 27th 2018, 9:55 pm | |
| =============== Projectile Repel =============== Created by The Necromancer
;--------------------------------------------------------------------------- Projectile Repel -- Uncommon in most fighting games, but VERY common for the DBZ genre, this ability allows your character to redirect the opponent's projectile back at him/her.
This example shows how the "Hajiku" move of the Super Boutuden games is made.
Notes:
-3 Vars are required for this move.
Var(0): Opponent's projectile damage value Var(1): Records the number of taps pressed. Var(2): The number of taps required. (Equation: Opponent damage divided by 30)
Var(0) and Var(1) are resetted whenever the character goes into his/her recovery state. (After the projectile has been repelled/destroyed.)
Var(2) is resetted at the beginning of the projectile repel attempt state. ;--------------------------------------------------------------------------- ;Hajiku - Stance [Statedef 9000] type = S movetype = I physics = S anim = 9000 ;A blocking type animation
[State 9000: HitOverride] type = HitOverride trigger1 = 1 slot = 1 attr = SCA, AP stateno = 9001 time = 1
[State 9000: ChangeState] type = ChangeState trigger1 = (Command != "holdb") || (Command != "holdc") value = 0 ctrl = 1
;--------------------------------------------------------------------------- ;Hajiku - Repel Attempt [Statedef 9001] type = S movetype = H physics = S anim = 9001 ; A blocking type animation sprpriority = -2
[State 9001: HitOverride] type = HitOverride trigger1 = 1 slot = 0 attr = SCA, AP stateno = 9001 time = 1
;Used for projectile damage in state 9002. (If successfuly repelled.) [State 9001: VarAdd] type = VarAdd trigger1 = Time = 0 v = 0 value = Ceil(GetHitVar(Damage)*(-1))
;Used for "tapping" feature. (3 taps for every 100 points of damage of the opponent's projectile.) [State 9001: VarSet] type = VarSet trigger1 = Time = 1 v = 1 value = Floor(Var(0)/30)*(-1)
;Used for number of taps made. (Reset at start) [State 9001: VarSet] type = VarSet trigger1 = Time = 0 v = 2 value = 0
;Used for number of taps made. (Add tap value) [State 9001: VarAdd] type = VarAdd triggerall = Time <= 100 trigger1 = (Command = "x") || (Command = "y") || (Command = "z") || (Command = "a") || (Command = "b") || (Command = "c") v = 2 value = 1
;Get pushed by the opponent's projectile. (Divided by 2.) [State 9001: VelSet] type = VelSet trigger1 = Time = 0 x = IfElse(Facing = 1,(GetHitVar(XVel)/2),(GetHitVar(XVel)/2*(-1))) y = 0
;Projectile explod animation (On character) [State 9001: Explod] type = Explod trigger1 = Time = 0 anim = (whatever) id = (whatever) pos = (Position of projectile) postype = p1 bindtime = -1 removetime = -1 ontop = 1 ownpal = 1 removeongethit = 1
;Remove projectile explod animation. [State 9001: RemoveExplod] type = RemoveExplod trigger1 = AnimTime = 0 id = (whatever)
;If projectile was successfully tapped, go to projectile repel state. [State 9001: ChangeState] type = ChangeState trigger1 = (AnimTime = 0) && (Var(2) > Var(1)) value = 9002
;If projectile was not successfully tapped, go to get hit state. (Projectile will explod on character in next state.) [State 9001: ChangeState] type = ChangeState trigger1 = (AnimTime = 0) && (Var(2) <= Var(1)) value = 9003
;--------------------------------------------------------------------------- ;Hajiku - Proj Cancel Success [Statedef 9002] type = S movetype = I physics = S anim = 9002 ;Animation to repel projectile, or a blocking type animation. velset = 0,0 ctrl = 0
;Recovery: Lose no life from the opponent's original projectile. ;Note: This equation applies only if the LIFE setting in Mugen is set to default. (100%) [State 9002: LifeAdd] type = LifeAdd trigger1 = Time = 0 value = Ceil(Var(0)*(-1))
;VarSet: Reset the tapping values. [State 9002: VarSet] type = VarSet trigger1 = Time = 0 v = 1 value = 0
;VarSet: Rest the opponent's projectile value. (Must be AFTER the projectile has been released.) [State 9002: VarSet] type = VarSet trigger1 = AnimTime = 0 v = 0 value = 0
[State 9002: Projectile] type = Projectile trigger1 = (whatever) projid = (whatever) projanim = (whatever) projhitanim = (whatever) projremanim = (whatever) projcancelanim = (whatever) projremove = 1 projremovetime = 100 velocity = *,* projpriority = 9 projsprpriority = 4 projedgebound = 1000 projstagebound = 1000 projheightbound = -1000,1 offset = *,* ;Must be the same offset as the projectile explod animation. postype = p1 ;------------------ attr = S, HP hitflag = MAFP guardflag = MA animtype = Heavy priority = 1, Hit damage = Ceil(Var(0)*(-1)),(Var(0)*(-1))/2 etc...
[State 9002: ChangeState] type = ChangeState trigger1 = AnimTime = 0 value = 0 ctrl = 1
;--------------------------------------------------------------------------- ;Hajiku - Proj Cancel Failed [Statedef 9003 ] type = S movetype = I physics = S anim = 9003 ;Blocking type animation, or get hit animation.
;VarSet: Reset the tapping values. [State 9003: VarSet] type = VarSet trigger1 = Time = 0 v = 1 value = 0
;VarSet: Rest the opponent's projectile value. (Must be AFTER the projectile has been released.) [State 9003: VarSet] type = VarSet trigger1 = AnimTime = 0 v = 0 value = 0
;Projectile explosion animtion. [State 9003: Explod] type = Explod trigger1 = Time = 0 anim = (whatever) id = (whatever) pos = 0,0 postype = p1 bindtime = 1 removetime = -2 ontop = 1 ownpal = 1
If dies, go to custom KOed state. [State 9003: ChangeState] type = ChangeState trigger1 = Life <= 0 value = *
;Ends the move. [State 9003: ChangeState] type = ChangeState trigger1 = AnimTime = 0 value = 0 ctrl = 1
| |
| | | LESSARD
Posts : 2221 Join date : 2016-06-19 Age : 45 Location : In your wildest mugen Dreams
| Subject: Re: Code Snippet Archive July 28th 2018, 1:35 pm | |
| You are making a great job with your code snippet. It would be awesome if add an image or gift to see how the codes are working...Just an idea... | |
| | | yolomate
Posts : 7503 Join date : 2013-06-17 Age : 47
| Subject: Re: Code Snippet Archive July 28th 2018, 2:06 pm | |
| yep need pics this!! like a illustration. | |
| | | thatguy
Posts : 1381 Join date : 2014-05-28 Age : 47 Location : Canada
| Subject: Re: Code Snippet Archive July 28th 2018, 3:21 pm | |
| Lots of requests for screenshots... Here's the deal. Short Answer: The screenshots for over half of these are available in the download in the first post. You can also see most of what will be posted in the future as well in the download. Long Answer: I originally wanted to do this with screenshots. The first problem I ran into is that there can be up to 50 screenshots / sprites per tutorial. Then while still trying to get this to work found that they would have to be individually ripped from the DOCs and uploaded separately. I will post screenshots when I can, but only certain posts. Maybe when I get further along I can start going back over the posts and editing to add more info, and screenshots for some of them. P.S. @ADMINS Can you please move this thread to MUGEN Resources section. I think that may be a better fit for what this thread became. | |
| | | thatguy
Posts : 1381 Join date : 2014-05-28 Age : 47 Location : Canada
| Subject: Why the delay August 8th 2018, 6:13 pm | |
| Hello everyone. I know I haven't been posting as much as I'd like of this code archive. Once I clear my plate again, I will continue posting each individual code. Some of them with pictures as per requests Stay tuned for updates of the code archive. I'm still around, but have been busy with special coding, and code fixes. I am currently working with 4 other creators on their works. Some have been released recently, and some are planned for the future. Sorry I can't give any details on them as I leave that up to their respective creators. Please post any questions about mugen or coding in the help section of the forum.P.S. Administrators please move this thread to the "mugen resources" section. Complete
Last edited by thatguy on August 30th 2018, 11:45 pm; edited 1 time in total (Reason for editing : Moved topic to Mugen Resources) | |
| | | Sponsored content
| Subject: Re: Code Snippet Archive | |
| |
| | | | Code Snippet Archive | |
|
Similar topics | |
|
| Permissions in this forum: | You cannot reply to topics in this forum
| |
| |
| |