Jump to content

Mugen4Anthony

Member
  • Posts

    2
  • Joined

  • Last visited

Reputation Activity

  1. Upvote
    Mugen4Anthony reacted to sтαя∂υsт cяυsα∂εя in Melty Blood Fusion (Screenpack + Lifebars) Unpacked   
    Lifebars


    Screenpack



    Unpacked by me (7th if u want me to take this down just say the word n it'll be done), only posting it on MFFA. You guyz can now edit it urself, the bars, round anims, etc.
    Go ballz out
  2. Upvote
    Mugen4Anthony reacted to Otasira in Post Ur Roster Picture & Roster Mugen Videos   
    After a crap ton of cropping and placement, my first wide screen roster is practically done!
     

  3. Upvote
  4. Upvote
    Mugen4Anthony reacted to Ex✭Cᴀʜᴍ in Post Ur Roster Picture & Roster Mugen Videos   
    Looks good and clean Ota!

    +1 for ya!
  5. Upvote
    Mugen4Anthony reacted to Potpourri in Post Ur Roster Picture & Roster Mugen Videos   
    Could be better imho.
    Im changing this screenpack VERY soon.
  6. Upvote
    Mugen4Anthony reacted to Kazagami in Post Ur Roster Picture & Roster Mugen Videos   
    You need to fill up the empty slots, man
  7. Upvote
    Mugen4Anthony reacted to Kazagami in Post Ur Roster Picture & Roster Mugen Videos   
    Feel like showing my roster again.


  8. Upvote
    Mugen4Anthony reacted to Kazagami in Post Ur Roster Picture & Roster Mugen Videos   
    Still growing but also decided to kick out some shits.
  9. Upvote
    Mugen4Anthony reacted to Okami in AI Tutorial - For Beginners!   
    Whats up! Welcome to a Beginner Guide on AI Coding. Since there are a lot of AI tutorials that are a bit in depth, but not really helpful to others (DON'T KNOW WHY), Guess I'll post a tutorial on AI Coding.

    First, to start AI coding, YOU MUST KNOW HOW TO CODE A CHARACTER WITH SOME EXPERIENCE (Well at least understand the codes)
    (Important or you'll get confused like an idiot =x)

    First, there are 2 different methods of implementing AI in terms of compatibility:
    Var AI coding:
    Coding AI through variable activation. Usually having a var set at either the CMD or the CNS file. Use this to recognize if this is the player or not the player, and must include various cpu commands for AI through this method.
    NOT recommended since this is old AI coding, refer to mugendocs if you want to do the hard way for custom AI.

    Simple steps however:
    Varset - var(59) occasionally for AI activation
    Trigger - var(59) = 0 or var(59) > 0 to see if this is an AI command or Human Command

    Example:

    CPU COMMANDS : <- NEEDED, usually complex hard to implicate for humans

    [state -1, AI TRIGGER] <- TRIGGER FOR AI
    type = Varset <-VAR SETTING
    triggerall = RoundState = 2 <- Occurs if RoundState = 2 (ROUND START)
    trigger1 = command = "cpu1" <- make the commands like x,d,f,d,x,f,x -> etc
    trigger2 = command = "cpu2"
    trigger3 = command = "cpu3"
    trigger4 = command = "cpu4"
    trigger5 = command = "cpu5"
    trigger6 = command = "cpu6"
    trigger7 = command = "cpu7"
    trigger8 = command = "cpu8"
    trigger9 = command = "cpu9"
    trigger10 = command = "cpu10"
    trigger11 = command = "cpu11"
    trigger12 = command = "cpu12"
    trigger13 = command = "cpu13"
    trigger14 = command = "cpu14"
    trigger15 = command = "cpu15"
    trigger16 = command = "cpu16"
    trigger17 = command = "cpu17"
    trigger18 = command = "cpu18"
    trigger19 = command = "cpu19"
    trigger20 = command = "cpu20"
    trigger21 = command = "cpu21"
    trigger22 = command = "cpu22"
    trigger23 = command = "cpu23"
    trigger24 = command = "cpu24"
    trigger25 = command = "cpu25"
    trigger26 = command = "cpu26"
    trigger27 = command = "cpu27"
    trigger28 = command = "cpu28"
    trigger29 = command = "cpu29"
    trigger30 = command = "cpu30"
    v = 7 <- Variable is 7 -> var(7)
    value = 1 <- Value is 1 -> var(7) = 1

    Example of how this works: <- Duplication State Method - One for AI and One for You

    [state -1, Stand Medium Left Punch] ; Human State
    type = ChangeState
    value = 900
    triggerall = var (7) != ; Trigger for When var(7) != 1 -> Its Human!
    triggerall = command = "Stand Medium Left Punch" ; Human Command
    trigger1 = statetype != A ; Your state should not be equal to A - Hence AIR
    trigger1 = ctrl ; You Have Control
    trigger2 = (stateno = 200 || stateno = 210 || stateno = 400 || stateno = 410 ) && movecontact
    trigger3 = (stateno = 901 && time > 17) && movecontact
    trigger4 = (stateno = 902 && time > 28) && movecontact
    trigger5 = (stateno = 903 && time > 10) && movecontact
    Triggers 1-5 are the conditions when it can happen and how many it can be linked or duplicated
    Important as you can use more complex triggers for better custom AI

    [state -1, Stand Medium Left Punch AI] AI State State
    type = ChangeState
    value = 900
    triggerall = var (7) Trigger for When var(7) = 1 -> Its CPU
    triggerall = !Win ; Don't need but usually AI turns on if the AI did not win and won't go again after win.
    triggerall = P2bodydist X = [0,20] Move should occur if p2bodydist x is around 0-20 pixels
    triggerall = P2StateType != L Move should occur if p2statetype is not lying down
    trigger1 = statetype != A Can't do this move in AIR to prevent bugs in AI
    trigger1 = ctrl AI must have control to use this
    trigger1= random <= 300 Not recommended way to do random, you can use triggerall = random <= (expression) for better transition
    trigger2= random <= 300
    trigger3= random <= 300
    trigger4= random <= 300
    trigger5= random <= 300
    trigger2 = (stateno = 200 || stateno = 210 || stateno = 400 || stateno = 410 ) && movecontact
    trigger3 = (stateno = 901 && time > 17) && movecontact
    trigger4 = (stateno = 902 && time > 28) && movecontact
    trigger5 = (sta teno = 903 && time > 10) && movecontact
    Triggers 2-5! IMPORTANT FOR AI linking combos and states for better AI

    Note: AI can be scaled through variable by having a variable placed in the random with an expression, must be for moderate coders only =P
    Advantages : Can be used for custom combos really well, if you know how to code more complex triggers and using other triggers and expressions.
    Disadvantages: Coding may be complex, and CPU commands tend to override Human commands. Basically, ending up being controlled by the CPU while you SUPPOSE to play.

    Note: You can have one state for both AI and Human, just set it different triggers and don't use triggeralls that only apply to AI or Human or it will cause errors.

    This is the old method to use, but I recommend the AILevel method.


    AILevel Method Coding:
    This method of Coding is the most up to date and the best way to code characters as it includes a very handy feature: Adjustable Diffuculties!

    There is no need to include CPU commands or variables to activate AI, however, you can use complex expressions and vars for AI custom combos and human commands.

    Example: -> You can do it the Duplication State Way
    NOTE: For Human Commands
    YOU MUST HAVE TRIGGERALL = !AILEVEL TO SPECIFY THAT YOU ARE NOT AI
    While Triggerall = AIlevel is applied to CPU commands.



    [state -1, Lotus Sinking Fangs AI]
    type = ChangeState
    value = 1200
    triggerall = AIlevel ; Applied if AI is activated
    triggerall = random <= AIlevel*10 ; AI level is based on level 1 - 8 - AIlevel is multipled by 10 meaning at AIlevel = 8 it has a 80% change of this move happening with 80% of the triggers that is activated.
    triggerall = p2bodydist x = [0,20] ; Distance trigger as explained above
    triggerall = power >= 3000 ; IMPORTANT, AI MUST HAVE THIS TRIGGER OR ELSE THEY CAN SPAM SUPER!
    trigger1 = statetype = S ; Has to stand to activate move
    trigger1 = ctrl ; AI is in control

    You can have more triggers to activate this move more by adding other expressions and more triggers. Most you probably need is 10 for triggers, for 10 different outcomes * state triggers outcomes in other states.
    THIS WAY OF CODING IS EASIER AND IT IS RECOMMENDED TO BE USED FOR BEGINNERS

    Moderate and Expert Coders Occasionally Use Vars and AIlevel coding together for Good AI, but AIlevel is all you really need for AI activation, and triggers are used to define the right trigger to make the move work without bugs and to work properly for AI


    NOTE: IF any questions is asked, I will answer and update this post and give feedback on it!
  10. Upvote
    Mugen4Anthony reacted to RicePigeon in State Tree-based AI method   
    So after looking at various AI tutorial and code, I've noticed a major flaw in almost all of them that remains unaddressed.
     
    For anyone who knows Mugen code, you should know that Mugen processes states in a top-down fashion. What this essentially means is that for each state controller in a character's state, for every tick that character is in that state, Mugen will process each and every state controller in order. Take for example the following code snippet;
     

     In this case, the Changestate controller is always processed before the Varadd controller, even if the Changestate controller doesn't actually change the character's state. Therefore, once the character reaches time 20 in state number 200, assuming that var(19) is initiated to 0 at the beginning of the state, Var(19) will be set to 19 by the time the character exits state 200 (the Varadd controller will never activate at time = 20 since the character will have already left the state by then. Note that there exists a bug in WinMugen where the Varadd controller will still be processed at time=20, even though the character will have already left the state by then.).
     
    This processing order applies to all states, including the negative states -1, -2, and -3. Now let's take a look at an AI code snippet with this in mind.
     

     
  11. Upvote
    Mugen4Anthony reacted to RicePigeon in State Tree-based AI method   
    Considering the identical conditions, we look at both controllers and see that when the conditions are right, and see that both have a 50% chance of sending the player into either state, at least thats what it looks like on the surface. Remember the top-down processing order I mentioned before? With that in mind, lets follow the code again. Lets assume the conditions are right. We see that Shoryuken has a 50% chance of occuring on the first possible tick. But what about that other 50%? That other 50%, we check for the Hard Punch, which itself has a 50% chance of occuring. This means that we have a 50% chance of using our Shoryuken, a 25% chance of the Hard Punch, or nothing at all.

    If we want the AI to give the illusion of a human player, we want those odds to be roughly equal, so as to keep our opponent guessing like they would against a human player, as opposed to a predictable scripted AI. While it's impossible to make an AI that performs exactly as a human player would, we can at least remove the above problem from the equation. To do this, we need to take advantage of State Trees.

    For those of you who aren't computer science geeks, a state tree is basically a graph of all states that a state machine, such as a mugen character can be in, and all possible outcomes or paths that machine can take. In our example, since we want to script our AI so as to not be so predictable, we want our AI to be able to perform several different options when conditions are right. For example, say the conditions are right for us to use an antiair attack, such as when an opponent is jumping in, we want to be able to do one of the following;
    Shoryuken Hard Punch Dash backward Roll forward Jump up If we followed the pattern of the AI code snippet above, these five different actions would each have a split of 50% - 25% - 12.5% - 6.25% - 3.125% in that respective order. Ideally, each of these should have a 20% chance. Thats where this code comes in;

    First, in your -2 state, make sure to add the following controller;
     
     


    This will spawn a helper that will make all AI based decisions for us. The idea is that we are going to have the helper look at all possible conditions, look at a list of all possible states our character can go in to, randomly choose one and pass it back to the player. Now, inside our helper, we'll have the following code. We'll go over each one step by step and explain what they do.
     
     

    This section contains the required Statedef for our helper state, and makes it so that the helper is always bound to the player and facing the player's direction. This way, we can simply call certain triggers without the need for redirection, such as p2dist x, pos y, and so forth.
     

    Our helper's RNG. Basically, our Helper will be producing a constant stream of random numbers each tick to be used for state selection. The reason we don't simply call random in each instance is because random reinitializes itself every time it is called. If you don't understand yet, don't worry, as this will make more sense later on.
     


    This is the meat of our AI decision making:
    <conditions>: refers to the set of triggers you would normally put in your AI's state controllers, such as p2dist x, statetype !=A, and so on. <number of outcomes>: refers to the total number of possible outcomes you want for your set of conditions. In our above example, we have a total of 5 outcomes, so this would be set to five. <stateno of outcome #X>: this is the stateno for each of your possible outcomes In this case, var(0) is the random number that we stored earlier. Var(1) stores the state number that we wish to pass back to the root. Var(2) is merely a flag for when we want our AI tree to decide which state to go to next, and dictates how long to hold that value for before we regenerate another outcome. We dont want to generate a stateno if we already have one generated. In this setup, higher AI levels generate outcomes more frequently, providing for quicker reaction times. Here is an example of this block of code in action;
     

     
     


    In this above example, we have five possible states that our AI controlled player can go into when the following conditions are true:

        player 2 is lying down
        player 1 is not attacking
        player 1 is not in the air

    For each set of conditions, such as antiair, a certain distance between p1 and p2 is reached, etc, you will repeat this process for each set of states. Let us continue.
     
     


    This piece of code is what allows the helper to pass the stateno back to player 1 once the meat of the work is done.
     
     


    This piece of code counts down Var(2), which doubles as a buffer. Once Var(2) reaches 0, we can generate another stateno for our root player. When this happens, we tell our root player that we do not currently have a state generated by setting the value to 0 (or any other sentinel value of your choosing).
     
     


    This destroys the helper if the player is not under the control of AI, since the helper is no longer necessary.

    We're almost done. Go back to your CMD file, and under each Changestate controller where you would normally add your AI code, change each one to include the following:
     
     


    Basically your global conditions, such as statetype, cancel ability, power requirements, etc should be moved to triggerall. Your trigger1s should be everything related to human control. For the AI control, remember Var(58), which we used to pass the stateno value back to player 1? This tells the player to change to that state ONLY when Var(58) is the same stateno value as the one in the controller here. In this case, this tells player 1 to only change to state 220 if the AI helper tells us to. You would repeat this for every single changestate in your CMD file.
  12. Upvote
    Mugen4Anthony reacted to Ryon in Custom Win and Intro   
    using your triggers.
     
    the basic idea is to change state to your winstate IF for instance
     
    trigger1 = prevstateno = 3000
     
    which is normally a super state, so if the previous state is a super state, then it will play THAT win.
  13. Upvote
    Mugen4Anthony reacted to Krypto 'SAM' saiyaN in The King Of Fighters XIV   
    I have a feeling that Japanese people try to make their games for PS4 now as much as possible.
  14. Upvote
    Mugen4Anthony reacted to Ryon in Regarding download links from a certain Mugen warehouse   
    @AxSeeker, The issue with adfly is, you don't really have control of what ad's are displayed, and unfortunately malware comes in the form of "new java update" or "your flash player is outdated" and thats when inexperienced people click on the adfly links and they get caught up.
     
    If anyone ever checks the guidelines I pretty much made a list of websites we recommend and such (2shared is there I guess we didn't get rid of it)
    FOR IMAGES  
    http://photobucket.com http://imageshack.us/ http://tinypic.com/ http://postimage.org/ http://imgur.com/ http://someimage.com/  
    FOR FILES  
    http://www.depositFiles.com http://www.filedropper.com/ http://www.2shared.com/ http://www.mediafire.com/ http://www.sendspace.com/ https://www.rapidshare.com/ https://www.mega.co.nz/  
    so there are ALOT of alternatives, but people try to use adfly to get back pennies for clicks. I considered it once to but it was so inconvenient for people that i decided it was not worth it.
     
  15. Upvote
    Mugen4Anthony got a reaction from Galvatron in Regarding download links from a certain Mugen warehouse   
    Also onedrive.com
×
×
  • Create New...