How do I build a 1v1 game mode in Openbor?

Grit

Well-known member
I came across a versus template but the player are still able to walk up like in any other beat em up.
I want to create a 1 vs 1 mode like in STF or KOF.
Some guidance would be welcome.
 
It is completely possible to do a 1 vs 1 game in OpenBOR, like we do in Mugen. Just keep in mind that each engine was created with a specific type of game in mind, so certain things are possible, but they can be much more difficult to do on a certain engine.

I'll give you some examples:

Easy things in OpenBOR but can be a nightmare in Mugen

- Z axis (Mugen only has X and Y axes)
- Damage over Time
- Items
- Platforms (you can do it, but it's a big hassle)
- Transformations (are a real problem outside of full games)

Easy things in Mugen but can be a nightmare in OpenBOR

- Friction - physics in OpenBOR is limited to the Y axis, gravity. So either you're in the air (either jumping or falling into a hole), or you're on the ground. If you apply a speed while you are on the ground, it will remain active until you either change it or go to some animation that forces this change.

In Mugen, each state can have 3 Types (Stand, Air, Crouched) and 5 physics configurations (Stand, Air, Crouched, None, Unchanged). Each physics has its own values of vertical acceleration and friction with the ground, see:

yaccel = .44 ;Vertical acceleration
stand.friction = .85 ;Friction coefficient when standing
crouch.friction = .82 ;Friction coefficient when crouching

So, if you apply a speed of 6px to a character, this speed will be multiplied by .85 every tick, which will make him stop after a while (and will stop more quickly if you are crouched). It doesn't happen that way in OpenBOR.

And it can be much more complex than that in Mugen:
Code:
[Movement]
airjump.num = 1       ;Number of air jumps allowed (opt)
airjump.height = 35   ;Minimum distance from ground before you can air jump (opt)
yaccel = .44          ;Vertical acceleration
stand.friction = .85  ;Friction coefficient when standing
crouch.friction = .82 ;Friction coefficient when crouching
stand.friction.threshold = 2          ;If player's speed drops below this threshold while standing, stop his movement **MUGEN 1.0**
crouch.friction.threshold = .05       ;If player's speed drops below this threshold while crouching, stop his movement **MUGEN 1.0**
air.gethit.groundlevel = 25           ;Y-position at which a falling player is considered to hit the ground **MUGEN 1.0**
air.gethit.groundrecover.ground.threshold = -20 ;Y-position below which falling player can use the recovery command **MUGEN 1.0**
air.gethit.groundrecover.groundlevel = 10   ;Y-position at which player in the ground recovery state touches the ground **MUGEN 1.0**
air.gethit.airrecover.threshold = -1  ;Y-velocity above which player may use the air recovery command **MUGEN 1.0**
air.gethit.airrecover.yaccel = .35    ;Vertical acceleration for player in the air recovery state **MUGEN 1.0**
air.gethit.trip.groundlevel = 15      ;Y-position at which player in the tripped state touches the ground **MUGEN 1.0**
down.bounce.offset = 0, 20            ;Offset for player bouncing off the ground (x, y) **MUGEN 1.0**
down.bounce.yaccel = .4               ;Vertical acceleration for player bouncing off the ground **MUGEN 1.0**
down.bounce.groundlevel = 12          ;Y-position at which player bouncing off the ground touches the ground again **MUGEN 1.0**
down.friction.threshold = .05         ;If the player's speed drops below this threshold while lying down, stop his movement **MUGEN 1.0**

- Falling animation. OpenBOR treats the fall animation as a single thing, which ends in the RISE animation. In Mugen, you have much more control
5030Stand/Air Hit backLooptime around 10-20
5035 optStand/Air Hit transitionLooptime around 5-15 (See Note 3)
5040Air RecoverNo loop
5050Air FallNo loop
5060 optAir Fall (coming down)No loop
5070Tripped
5080LieDown Hit (stay down)(See Note 4)
5090LieDown Hit (hit up into air)
5100Hitting ground from fallLooptime around 3
5160Bounce into air
5170Hit ground from bounceLooptime around 3 or 4
5110LieDown
5120Get up from LieDown
5140 optLieDead (first rounds)
5150 optLieDead (final round)
5200Fall-recovery near ground
5210Fall-recovery in mid-air

- Damage animation - Mugen natively has animations for when your character receives damage while crouched, including transition animations between damage and idle, something that does not exist in OpenBOR for example

5000Stand/Air Hit high (light)Looptime around 10-20
5001Stand/Air Hit high (medium)" (See Note 2)
5002Stand/Air Hit high (hard)"
5005Stand Recover high (light)No loop (See Note 3)
5006Stand Recover high (medium)"
5007Stand Recover high (hard)"
5010Stand/Air Hit low (light)Looptime around 10-20
5011Stand/Air Hit low (medium)"
5012Stand/Air Hit low (hard)"
5015Stand Recover low (light)No loop
5016Stand Recover low (medium)"
5017Stand Recover low (hard)"
5020Crouch Hit (light)Looptime around 10-20
5021Crouch Hit (medium)"
5022Crouch Hit (hard)"
5025Crouch Recover (light)No loop
5026Crouch Recover (medium)"
5027Crouch Recover (hard)"

And so on.

I am not here saying that engine A is better than engine B. They have different usages.
Both can be used to do the same thing, but each case could have specific usage.
 
@Grit

As @O Ilusionista outlined, OpenBOR's native functionality is meant for scrolling action and beat em' ups, not vs. fighters. You can script any or all of those things yourself, but it's going to take effort and knowhow on your part.

That said, the removal of 3D movement is supported natively. All you have to do is set identical values for Z min and Z max. In addition to X and Y only movement, this will also enable Duck and Duck attack.

DC
 
It is completely possible to do a 1 vs 1 game in OpenBOR, like we do in Mugen. Just keep in mind that each engine was created with a specific type of game in mind, so certain things are possible, but they can be much more difficult to do on a certain engine.

I'll give you some examples:

Easy things in OpenBOR but can be a nightmare in Mugen

- Z axis (Mugen only has X and Y axes)
- Damage over Time
- Items
- Platforms (you can do it, but it's a big hassle)
- Transformations (are a real problem outside of full games)

Easy things in Mugen but can be a nightmare in OpenBOR

- Friction - physics in OpenBOR is limited to the Y axis, gravity. So either you're in the air (either jumping or falling into a hole), or you're on the ground. If you apply a speed while you are on the ground, it will remain active until you either change it or go to some animation that forces this change.

In Mugen, each state can have 3 Types (Stand, Air, Crouched) and 5 physics configurations (Stand, Air, Crouched, None, Unchanged). Each physics has its own values of vertical acceleration and friction with the ground, see:



So, if you apply a speed of 6px to a character, this speed will be multiplied by .85 every tick, which will make him stop after a while (and will stop more quickly if you are crouched). It doesn't happen that way in OpenBOR.

And it can be much more complex than that in Mugen:
Code:
[Movement]
airjump.num = 1       ;Number of air jumps allowed (opt)
airjump.height = 35   ;Minimum distance from ground before you can air jump (opt)
yaccel = .44          ;Vertical acceleration
stand.friction = .85  ;Friction coefficient when standing
crouch.friction = .82 ;Friction coefficient when crouching
stand.friction.threshold = 2          ;If player's speed drops below this threshold while standing, stop his movement **MUGEN 1.0**
crouch.friction.threshold = .05       ;If player's speed drops below this threshold while crouching, stop his movement **MUGEN 1.0**
air.gethit.groundlevel = 25           ;Y-position at which a falling player is considered to hit the ground **MUGEN 1.0**
air.gethit.groundrecover.ground.threshold = -20 ;Y-position below which falling player can use the recovery command **MUGEN 1.0**
air.gethit.groundrecover.groundlevel = 10   ;Y-position at which player in the ground recovery state touches the ground **MUGEN 1.0**
air.gethit.airrecover.threshold = -1  ;Y-velocity above which player may use the air recovery command **MUGEN 1.0**
air.gethit.airrecover.yaccel = .35    ;Vertical acceleration for player in the air recovery state **MUGEN 1.0**
air.gethit.trip.groundlevel = 15      ;Y-position at which player in the tripped state touches the ground **MUGEN 1.0**
down.bounce.offset = 0, 20            ;Offset for player bouncing off the ground (x, y) **MUGEN 1.0**
down.bounce.yaccel = .4               ;Vertical acceleration for player bouncing off the ground **MUGEN 1.0**
down.bounce.groundlevel = 12          ;Y-position at which player bouncing off the ground touches the ground again **MUGEN 1.0**
down.friction.threshold = .05         ;If the player's speed drops below this threshold while lying down, stop his movement **MUGEN 1.0**

- Falling animation. OpenBOR treats the fall animation as a single thing, which ends in the RISE animation. In Mugen, you have much more control
5030Stand/Air Hit backLooptime around 10-20
5035 optStand/Air Hit transitionLooptime around 5-15 (See Note 3)
5040Air RecoverNo loop
5050Air FallNo loop
5060 optAir Fall (coming down)No loop
5070Tripped
5080LieDown Hit (stay down)(See Note 4)
5090LieDown Hit (hit up into air)
5100Hitting ground from fallLooptime around 3
5160Bounce into air
5170Hit ground from bounceLooptime around 3 or 4
5110LieDown
5120Get up from LieDown
5140 optLieDead (first rounds)
5150 optLieDead (final round)
5200Fall-recovery near ground
5210Fall-recovery in mid-air

- Damage animation - Mugen natively has animations for when your character receives damage while crouched, including transition animations between damage and idle, something that does not exist in OpenBOR for example

5000Stand/Air Hit high (light)Looptime around 10-20
5001Stand/Air Hit high (medium)" (See Note 2)
5002Stand/Air Hit high (hard)"
5005Stand Recover high (light)No loop (See Note 3)
5006Stand Recover high (medium)"
5007Stand Recover high (hard)"
5010Stand/Air Hit low (light)Looptime around 10-20
5011Stand/Air Hit low (medium)"
5012Stand/Air Hit low (hard)"
5015Stand Recover low (light)No loop
5016Stand Recover low (medium)"
5017Stand Recover low (hard)"
5020Crouch Hit (light)Looptime around 10-20
5021Crouch Hit (medium)"
5022Crouch Hit (hard)"
5025Crouch Recover (light)No loop
5026Crouch Recover (medium)"
5027Crouch Recover (hard)"

And so on.

I am not here saying that engine A is better than engine B. They have different usages.
Both can be used to do the same thing, but each case could have specific usage.
It's as you say, they have their own uses.
Openbor filled with beat em ups and Mugen with vs games.
I'm glad ChronoCrash cover both engines and I'm able to learn a thing or 2.
I think I'm test the water with Mugen.
I initially wanted to add a vs mode along with the beat em up but I guess I could do em separately.
I been looking for a vs game like what @maxman is busy with and I found none in OpenBOR which makes sense based on what it does.
Thanks for clearing things up.
@Grit

As @O Ilusionista outlined, OpenBOR's native functionality is meant for scrolling action and beat em' ups, not vs. fighters. You can script any or all of those things yourself, but it's going to take effort and knowhow on your part.

That said, the removal of 3D movement is supported natively. All you have to do is set identical values for Z min and Z max. In addition to X and Y only movement, this will also enable Duck and Duck attack.

DC
I think I'll focus on the beat em up in Openbor.
Move to Mugen afterwards for my tornament fighter since the fights will be more technical and Mugen got that covered.
Thanks.
 
It's as you say, they have their own uses.
@Grit Just my two cents. If you are considering only the native functionalities from both engines, it's really better to make a VS fighting game in Mugen.
However, I don't know how much power/freedom Mugen has in the scripting area, once I'm a complete noob in this engine (Ilu can speak a lot more than me), but I would consider putting the OpenBOR's scripting power/freedom in the table once it's really huge.
 
Just my two cents. If you are considering only the native functionalities from both engines, it's really better to make a VS fighting game in Mugen.
Your opinion means alot and you right with regards to me only considering natively functionalities.
I will give it a try since I'm only aiming to make a demo.
I have 3 sprite sheets of 2 characters and a stage.
That said, the removal of 3D movement is supported natively. All you have to do is set identical values for Z min and Z max. In addition to X and Y only movement, this will also enable Duck and Duck attack.
@Kratus this is first step.
The goal is to recreate this
 
The one with traditionally Street Fighter style which include projectiles, high jumps, and such, would be tough. I know it's not what you want. But with that Karate Tournament example like you talked to me about and you showed there, I think it would be doable without worrying about advanced stuff like unleashing projectiles and doing high jump-attacks. However, there may be some stuff you'd need to worry about. Since OpenBOR was updated with some features around in 2018, you can use anim duckrise and anim ducking for getting up from crouching and sitting down to crouch from standing respectively. That way, with anim duck, you can use it as just... remaining to crouch. You can have transitional ducking animations already with those. However, I do not know if the bug exists in both animations since I don't use them, but you can try using them. Sure, you can use duckattack only if you use the same numbers in Z min and Z max in its Z limit of the level as DC said.


I remember trying this out as a kid, but never knew how to play it. LOL

If you played Double Dragon Reloaded (Alternate), as well as Final Fight & Cadillacs and Vendetta Super Recargado, you can imagine how something automatically controls players to exit the stage after clearing one stage or one part from that level.

Don't worry about having fighters always facing each other as your first priority. That will come later. As for the referee part, that will need to be in script as I pointed out to you on the VS template demo from Bloodbane but that comes later as well. You'll have 2 fighters, 1 stage, and 1 referee (visible or not, but still existent).
 
I assume you're planning to go for Mugen, but just in case you think of starting one with some basics first using OpenBOR. This is something I forgot about how I did with non-scripts as a beginner.

Before you start your new OpenBOR game project for a 1v1 style, pick which module you want to use as a base. I recommend you start with a module that has no (complex) scripts at all. For myself, I picked the original Neo Edit Pack as a base for working on a different system. Any of the OpenBOR templates from @Bloodbane is also okay (though there are simple scripts). Even though I don't recommend going for complex scripts such as @bWWd's He-Man, @O Ilusionista's AUBF, @Kratus's SORX games, my SF game project (though it's not released hehe), @White Dragon's TMNT: SS, @magggas's WHSJ/DDRA, or any module that has very complex scripts to start with as a base to work with/on, Bloodbane's scripts are simplified. But I don't know what your opinion is about his simple scripts.

Change your levels with the same values of both zmin and zmax for it to be straightly linear like platformers. Only if you like to.

Code:
z 200 200
file data/levels/fight000.txt

Create an enemy and make his anim attack as a non-attack animation first before you give him any specific attack so he acts like a dummy.

If you don't want to activate your player to jump with jump button, you don't have to have anim jump, so you can use something like com j freespecial in the header for pressing a jump button to do a certain move (instead of jumping).

If you want to allow only 4 buttons to be pressed for your game ala KOF style, you can use menu.txt in the data folder.

Example:
Code:
renamekey   moveup    Up
renamekey   movedown  Down
renamekey   moveleft  Left
renamekey   moveright Right
renamekey attack Light_Punch
renamekey attack2 Heavy_Punch
disablekey attack3
disablekey attack4
renamekey jump Light_Kick
renamekey special Heavy_Kick

#fontmonospace 1 1 0 0 0 0 0 0 0 0 0
#fontmonospace {font} {font2} {font3} {font4} {font5} {font6} {font7} {font8}
#fontmbs {font1} {font2} {font3} {font4} {font5} {font6} {font7} {font8}

There are several scripts you need to learn, but I can give you one simple script, which is the jumping script. However, mine is more complex than @kimono's jumping system for his characters. His Way of the Martial Arts module has the up button active for jumping as a freespecial. It's simpler than what I have. Plus, there is keyint to change animation every time a player jumps forward. Just pay attention to their parameters of their functions (e.g. keyint) like you follow and do leaper, degravity, and some of them you're familiar with. Look at this here.

Code:
com    a2    freespecial
com     U       freespecial6
com     a + a2  freespecial9

Code:
anim    forwardjump 
    cancel    0 5 0 a2 freespecial4
    delay    12
    offset    38 114
    bbox.position.x    12
    bbox.position.y    14
    bbox.size.x    53
    bbox.size.y    40
    delay    8
    frame    data/chars/karatedo/jumpf1.gif
    frame    data/chars/karatedo/jumpf2.gif
    frame    data/chars/karatedo/jumpf3.gif
    frame    data/chars/karatedo/jumpf4.gif
    frame    data/chars/karatedo/jumpf5.gif

anim    freespecial6 #Jump
@script
  if(frame==1){
    void self = getlocalvar("self");

    changeentityproperty(self, "aiflag", "jumping", 1);
    changeentityproperty(self, "takeaction", "common_jump");   
  }
@end_script
    delay    1
    cancel    0 5 0 a2 freespecial3
    offset    86 104
    bbox.position.x 68
    bbox.position.y 0
    bbox.size.x 29
    bbox.size.y 57
    @cmd    keyint "ANI_FOLLOW6" 0 "F" 0    
    jumpframe 0 3 0 0
    frame    data/chars/karatedo/jump.gif
    frame    data/chars/karatedo/jump.gif
    @cmd    keyint "ANI_FOLLOW6" 0 "F" 0
    frame    data/chars/karatedo/jump.gif
    delay    12
    frame    data/chars/karatedo/jump.gif
    delay    8
    frame    data/chars/karatedo/jump.gif

anim    follow6 #Jump Forward
    cancel    0 5 0 a2 freespecial4
    delay    12
    offset    38 114
    bbox.position.x    12
    bbox.position.y    14
    bbox.size.x    53
    bbox.size.y    40
    delay    12
    jumpframe 0 3 1.5 0
    frame    data/chars/karatedo/jumpf1.gif
    frame    data/chars/karatedo/jumpf2.gif
    frame    data/chars/karatedo/jumpf3.gif
    frame    data/chars/karatedo/jumpf4.gif
    frame    data/chars/karatedo/jumpf5.gif

anim    jumpforward #Front Jump Punch
    delay    12
    offset    86 104
    bbox.position.x 68
    bbox.position.y 0
    bbox.size.x 29
    bbox.size.y 57
    sound    data/sounds/jumppunch.wav
    frame    data/chars/karatedo/jump.gif
    attack 108 38 46 34 10 1 0 0
    frame    data/chars/karatedo/jumpfpunch.gif
    attack 108 38 46 34 10 1 0 0
    frame    data/chars/karatedo/jumpfpunch.gif
    attack 0 0 0 0 0 0
    frame    data/chars/karatedo/jump.gif

anim freespecial4 #Jump Front Kick
    jumpframe 0 0 2
    fastattack    1
    jugglecost    5
    forcedirection    -1
    loop    0
    delay    8
    offset    86 104
    bbox.position.x 68
    bbox.position.y 0
    bbox.size.x 29
    bbox.size.y 57
    sound    data/sounds/jumpkick.wav    
    frame    data/chars/karatedo/Jump.gif
    frame    data/chars/karatedo/Jump.gif
    delay    24
    attack 80 42 89 30 10 1 15 1 2
    bbox.position.x 72
    bbox.position.y 0
    bbox.size.x 26
    bbox.size.y 48
    frame    data/chars/karatedo/Jumpfkick.gif
    delay    8
    attack 80 42 89 30 10 1 15 1 2
    bbox.position.x 69
    bbox.position.y 0
    bbox.size.x 26
    bbox.size.y 48
    frame    data/chars/karatedo/Jumpfkick.gif
    attack 0 0 0 0 0 0
    bbox.position.x 69
    bbox.position.y 0
    bbox.size.x 29
    bbox.size.y 67
    frame    data/chars/karatedo/Jump.gif

C:
void keyint(void Ani, int Frame, void Key, int Hflag)
{// Change current animation if proper key is pressed or released
// Animation is changed to attack mode

    void self = getlocalvar("self");
    int Dir = getentityproperty(self, "direction");
    int iPIndex = getentityproperty(self,"playerindex"); //Get player index
    void iRKey;

      if (Key=="U"){ //Up Required?
        iRKey = playerkeys(iPIndex, 0, "moveup"); // "Up"
      } else if (Key=="D"){ //Down Required?
        iRKey = playerkeys(iPIndex, 0, "movedown"); // "Down"
      } else if (Key=="L"){ //Left Required?
        iRKey = playerkeys(iPIndex, 0, "moveleft"); // "Left"
      } else if (Key=="R"){ //Right Required?
        iRKey = playerkeys(iPIndex, 0, "moveright"); // "Right"
      } else if (Key=="F"){ //Forward Required?
        if (Dir == 0){ // Facing Left?
          iRKey = playerkeys(iPIndex, 0, "moveleft"); // "Left"
        } else { // Facing Right
          iRKey = playerkeys(iPIndex, 0, "moveright"); // "Right"
        }
      } else if (Key=="B"){ //Backward Required?
        if (Dir == 1){ // Facing Right?
          iRKey = playerkeys(iPIndex, 0, "moveleft"); // "Left"
        } else { // Facing Left
          iRKey = playerkeys(iPIndex, 0, "moveright"); // "Right"
        }
      } else if (Key=="J"){ //Jump Required?
        iRKey = playerkeys(iPIndex, 0, "jump"); // "Jump"
      } else if (Key=="A"){ //Attack Required?
        iRKey = playerkeys(iPIndex, 0, "attack"); // "Attack"
      } else if (Key=="S"){ //Special Required?
        iRKey = playerkeys(iPIndex, 0, "special"); // "Special"
      }

      if (Hflag==1){ //Not holding the button case?
        iRKey = !iRKey; //Take the opposite condition
      }

      if (iRKey){
        if (Ani=="ANI_IDLE"){ // Going idle?
          setidle(self, openborconstant("ANI_IDLE")); //Be idle!
        } else {
          performattack(self, openborconstant(Ani)); //Change the animation
        }
        updateframe(self, Frame); //Change frame
      }
}

This way, you don't have to do something complex like what I did. But you get some ideas of how they can be done in different modules with scripts (both from simple and complex ones).

Despite the two names being similar, jumpforward and forwardjump are different in animations. anim forwardjump is an animation which you just hold forward and then jump to perform a forward jump. But anim jumpforward is when you jump forward, you perform a jumping attack as a jumping forward attack instead of just jumpattack, leaving jumpattack as a normal straight jump attack. I should've used that method/trick years ago (before WOMA was released) because at that time, I knew a little how to use animation scripts, as well as editing some values.

I already have fighters always facing each other all the time, but that's got to be done in script. However, if you want to know how it's done, I can share it here. Please let me know if you want to see it.

- Falling animation. OpenBOR treats the fall animation as a single thing, which ends in the RISE animation. In Mugen, you have much more control
5030Stand/Air Hit backLooptime around 10-20
5035 optStand/Air Hit transitionLooptime around 5-15 (See Note 3)
5040Air RecoverNo loop
5050Air FallNo loop
5060 optAir Fall (coming down)No loop
5070Tripped
5080LieDown Hit (stay down)(See Note 4)
5090LieDown Hit (hit up into air)
5100Hitting ground from fallLooptime around 3
5160Bounce into air
5170Hit ground from bounceLooptime around 3 or 4
5110LieDown
5120Get up from LieDown
5140 optLieDead (first rounds)
5150 optLieDead (final round)
5200Fall-recovery near ground
5210Fall-recovery in mid-air
There are some parts in the list that I don't know what they mean such as Fall-recover mid-air, FR near ground, Tripped, Air Fall, LieDown Hit (hit up into air). But what I do with those is that I translate them into OpenBOR codes such as anim rise, anim fall, anim fall20 (sweep), etc. I use anim fall20 for the sweep, but I don't use anim rise20 after fall20. Just a normal/default anim rise is enough as a character's get up animation unless you want a different pose of getting up from a given attack.

When it comes to knockdowns, I use different fall animations other than anim fall itself, coming from other special/super moves and some crouch attacks. Since I use the default anim fall as a default air recovery with player's health script active, it simulates the event where a standing fighter hits a jumping fighter. When the jumping fighter gets hit on air before falling to the ground, s/he starts to flip back for recovery to land safely. Dunno if I'm saying it right, but you get what I'm saying about getting knocked down and then land. It's like the old SF2 games and their installments. For instance, Ryu stands on the floor and punches Ken who's on the air, but Ken flips back after getting hit because Ken's health is active. But when a player is knocked down/out with health point 0, that's when s/he plays the default fall animation, skipping the script due to no active health point.

C:
void FallSafe2(void Ani){
    //Change animation while being alive but with desired animation change
    void self = getlocalvar("self");
    int health = getentityproperty(self, "health");
    
    if(health > 0){
        changeentityproperty(self, "animation", Ani);
    }
}

Example:
C:
anim    fall
    delay    7
    offset    336 292
    landframe    3
    frame    data/chars/ken/cvs2_ken_575.png # 0 3
    @cmd FallSafe2 openborconstant("ANI_FOLLOW73")
    delay 13
    frame    data/chars/ken/cvs2_ken_575.png # 1 16
    delay    1000
    frame    data/chars/ken/cvs2_ken_576.png # 2 1016
    delay    7
    @cmd spawn01 "Dust" 0 0 0
    frame    data/chars/ken/cvs2_ken_579.png # 3 1023
    frame    data/chars/ken/cvs2_ken_580.png # 4 1030
    frame    data/chars/ken/cvs2_ken_583.png # 5 1037
    frame    data/chars/ken/cvs2_ken_584.png # 6 1042

Code:
anim follow73 #Safe fall
    offset    336 292
    delay    8
    jumpframe 0 1.2 -1.6 0
    landframe 7
    bbox 314 182 43 105
    frame    data/chars/ken/cvs2_ken_104.png
    bbox 313 194 61 47
    frame    data/chars/ken/cvs2_ken_103.png
    bbox 313 199 48 47
    frame    data/chars/ken/cvs2_ken_102.png
    frame    data/chars/ken/cvs2_ken_101.png
    bbox 319 199 48 41
    frame    data/chars/ken/cvs2_ken_100.png
    bbox 319 192 45 77
    frame    data/chars/ken/cvs2_ken_99.png
    delay    1000
    bbox 318 184 47 108
    frame    data/chars/ken/cvs2_ken_98.png
    @cmd attack0 "ANI_JUMPLAND"
    frame    data/chars/ken/cvs2_ken_98.png

Thanks to @Kratus for the multiple landframe script, I was able to make Chun-Li's land to work, but it's close to what I want.

Code:
anim    fall
@script
if(frame == 1){
    void actress = getlocalvar("self");
    int hp = getentityproperty(actress, "health");

    if(hp>0){
        changeentityproperty(actress, "animation", openborconstant("ANI_FOLLOW73"));
    }
}
@end_script
    delay    7
    offset    336 293
    landframe    4
    frame    data/chars/chun-li/cvs2_chunli_888.png
    frame    data/chars/chun-li/cvs2_chunli_888.png
    frame    data/chars/chun-li/cvs2_chunli_889.png
    delay    1000
    frame    data/chars/chun-li/cvs2_chunli_890.png
    delay    4
    #Straight land for bouncing
    frame    data/chars/chun-li/cvs2_chunli_892.png
    @cmd leaper -1 1.5 0 #Start bouncing
    frame    data/chars/chun-li/cvs2_chunli_892.png
    frame    data/chars/chun-li/cvs2_chunli_893.png
    @cmd landFrame
    @cmd spawn01 "Dust" 0 0 0
    frame    data/chars/chun-li/cvs2_chunli_894.png
    @cmd leaper -1 0.8 0
    frame    data/chars/chun-li/cvs2_chunli_894.png
    frame    data/chars/chun-li/cvs2_chunli_895.png
    @cmd landFrame
    frame    data/chars/chun-li/cvs2_chunli_896.png
    delay    6
    frame    data/chars/chun-li/cvs2_chunli_177.png

Thanks to Bloodbane for his scripts for CountMonte's Rise of Warduke and his own VS template demo, it's possible to make an event for the target entity's death anim to trigger the next round or stage.

- Damage animation - Mugen natively has animations for when your character receives damage while crouched, including transition animations between damage and idle, something that does not exist in OpenBOR for example

5000Stand/Air Hit high (light)Looptime around 10-20
5001Stand/Air Hit high (medium)" (See Note 2)
5002Stand/Air Hit high (hard)"
5005Stand Recover high (light)No loop (See Note 3)
5006Stand Recover high (medium)"
5007Stand Recover high (hard)"
5010Stand/Air Hit low (light)Looptime around 10-20
5011Stand/Air Hit low (medium)"
5012Stand/Air Hit low (hard)"
5015Stand Recover low (light)No loop
5016Stand Recover low (medium)"
5017Stand Recover low (hard)"
5020Crouch Hit (light)Looptime around 10-20
5021Crouch Hit (medium)"
5022Crouch Hit (hard)"
5025Crouch Recover (light)No loop
5026Crouch Recover (medium)"
5027Crouch Recover (hard)"
I'm not sure about how crouch/stand recover work and how they play like. But I do know about crouch hit which I made it with doattack and pain scripts (kudos to @Piccolo for the force pain script).
 
Create an enemy and make his anim attack as a non-attack animation first before you give him any specific attack so he acts like a dummy.
I usually use:
aiattack none
I can share it here. Please let me know if you want to see it.
I'm open to seeing it, I always revisit the notes and the wiki for a good read when I'm busy with the game but I had to put this 1v1 game on pause since I decide to focus fully on the beat em up with the spare time I have.
So now I'm busy with all the characters.
I appreciate all the notes you provided throughout my time here.
 
Back
Top Bottom