In Progress A Tale of Vengeance Ver. 2.0

The project is currently under development.
Check the script file and you will have a clue of what is going on:

void slamstart(int iDrop)
{ // Slam Starter
- you use this only when you are grabbing something. The iDrop must be higher than the target knocodowncount, or the target won't change to FALL7 animation.
When I mean "grab", I mean the native GRAB.

void slamstart2()
{ // Slam Starter for nongrab slams
- Use this one on moves that aren't a grab, like someone executing a move where it runs and grab the enemy, like KOF Clark move for example.

void position(int Frame, float dx, float dy, float dz, int face)
{ // Modify grabbed entity's position relative to grabber
This is the main function - this places the target on the desired animation frame (and this is why I have one animation for all the throws), on the given position and facing.

void finish(int Damage, int Type, int x, int y, int z, int Face)
void throw(int Damage, int Type, int x, int y, int z, int Face)

{ // Damage as slam or throw finisher
- Both is used to make the same thing - to throw the enemy.
But there is a key difference between both functions: THROW() damages the target only when it touches the ground. So if you use THROW() on a target but any other player hits the same target while it's airborne, your initial damage won't trigger, as the function uses "damage_on_landing" to damage the target (it does 1 of damage when you execute it).

FINISH(), on the other hand, damages the target right when you use it, with no aditional damage when the target lands on the floor.
so on position, the first number is the frame from fall 7? like lets say i want to chose frame 5 on the fall7... the first number should be 5?
also see multiple positions on the throw... does that mean that each position you can use a different frame from fall 7? and is it nesesary to use multiple position cmd?
apologies i am trying to understand :/
also finish... first is the damage... but rest i have to add x/y values?... plus what is type?
Am assuming SLAMSTART have to be used for both grabackwards and grabforward?

thanks again :)
 
so on position, the first number is the frame from fall 7? like lets say i want to chose frame 5 on the fall7... the first number should be 5?
As its is stated on the manual, the frame numbering starts on 0, not on 1.
So if you wanna use the 5th frame, you need to use 4 as value.

also see multiple positions on the throw... does that mean that each position you can use a different frame from fall 7? and is it nesesary to use multiple position cmd?
Yes, you need to use multiple position() . Keep in mind something very important: when you bind a target by script, the only thing that will unbind it will be if the attacker dies (ut the target will get stuck on that animation forever). When you use script, you have full control of something. But we really mean full control: the engine will do only what you tell it to do and nothing more.

So if you position a target at X20 Y30, it will stay bound on that position forever until you tell the engine to let it go.

This is Axel's grabbacward, and an example. See how many position() i use, because I need to adjust the target to the exact position:
anim grabbackward
loop 0
offset 100 118
delay 10
@cmd slamstart 10
@cmd spawnAni "bflash" 19 16 0 "ANI_FOLLOW10" 0 0 0
@cmd position 0 16 1 -1 -1
frame data/chars/axel/grab01.gif
delay 5
@cmd position 0 14 3 0 -1
frame data/chars/Axel/grabat21.gif
@cmd position 4 10 31 -1 -1
frame data/chars/Axel/grabat22.gif
@cmd position 7 -10 29 -1 -1
frame data/chars/Axel/grabat23.gif
delay 15
@cmd position 14 -27 8 -1 -1
@cmd spawn01 "stompfxp" -30 0 1
frame data/chars/Axel/grabat24.gif
@cmd position 0 -29 3 -1 -1
@cmd depost 0
@cmd throw 25 2 4 0.5 0 0
frame data/chars/Axel/grabat24.gif
delay 10
@cmd clearL
frame data/chars/Axel/grabat25.gif
offset 100 118
frame data/chars/axel/rise02.gif
frame data/chars/axel/idle01.gif

also finish... first is the damage... but rest i have to add x/y values?... plus what is type?
X, Y and Z are the velocities of the thrown target. See on the example above:
@cmd throw 25 2 4 0.5 0 0

It will cause 25 of damage (when landing on the ground), with type 2 (which causes a damage based on ATTACK9 to trigger FALL9), with X velocity of 4, Y velocity of 0.5 (keep in mind that positive Y velocities makes the enemy goes upward, negative velocities makes the enemy goes towards the ground), with 0 as Z velocity and no face change.

About what TYPE you need to use, it depends on your script. This is the version I use - it's based on @Bloodbane codes, with some changes:

C-like:
void finish(int Damage, int Type, int x, int y, int z, int Face)
{ // Damage as slam or throw finisher
   void self = getlocalvar("self");
   //void target = getlocalvar("Target" + self);
   void target = getentityvar(self,"grabbed");
   int SDir = getentityproperty(target,"direction");
   int MDir;

   if(Face==0){ // Same facing?
       MDir = SDir;
   }

   if(Face==1){ // Opposite facing?

     if(SDir==0){ // Facing left?
       MDir = 1;
     } else { MDir = 0;}
   }

   if(target==NULL())
   {
     target = getentityproperty(self, "grabbing");
     setlocalvar("Target" + self, target);
   }
   if(target!=NULL())
   {
     int dir = getentityproperty(target,"direction"); //Get opponent's facing direction
     if(dir==0){ // Facing left?
       x = -x;
     }

     if(Type==1)
     {
       damageentity(target, self, Damage, 1, openborconstant("ATK_NORMAL")); // 1st Finisher
     }

     if(Type==2)
     {
       damageentity(target, self, Damage, 1, openborconstant("ATK_NORMAL9")); // 2nd Finisher
     }
    if(Type==4)
     {
       damageentity(target, self, 1, 1, openborconstant("ATK_SHOCK")); // 4rd throw type
     }
     if(Type==5)
     {
       damageentity(target, self, Damage, 1, openborconstant("ATK_NORMAL11")); // 5th throw type
     }
     if(Type==6)
     {
       damageentity(target, self, Damage, 1, openborconstant("ATK_BURN")); // 5th throw type
     }
     if(Type==7)
     {
       damageentity(target, self, 1, 1, openborconstant("ATK_NORMAL2")); // 5th throw type
     }
     antiWallG();
     tossentity(target, y, x, z); // Toss opponent ;)
       changeentityproperty(target,"subject_to_gravity",1);
     changeentityproperty(target, "direction", MDir);
     setentityvar(self, "grabbed", NULL()); //CLEAR ENTITYVAR
   }
}
As you can see, I can finish custom animations even with BURN or SHOCK animations if I want to :)
The only animations that are required is FALL7 (ATK_NORMAL7) and FALL9 (ATK_NORMAL9), but for throwing, we use FALL9 to make the enemy to flip over your character's head.
When I want no flip, I can use TYPE 1, which will trigger the normal FALL.
The other animations you see - FALL11 and FALL2 are for other things exclusive to my project - the first is a full looped vertical flip and the second one is the "wire damage" from KOF ( or Street Fighter Alpha counter attack damage), when a character flips over its axis but horizontally

One of the difference is that originally this codes uses "getlocalvar("Target" + self)" to aquire the target, while my version is based on @Kratus initial work and uses "getentityvar(self,"grabbed");" to aquire the traget, which works better to me.

WARNING: don't copy and paste my function on your project, as it won't work, since I its tied to another functions.
 
As its is stated on the manual, the frame numbering starts on 0, not on 1.
So if you wanna use the 5th frame, you need to use 4 as value.


Yes, you need to use multiple position() . Keep in mind something very important: when you bind a target by script, the only thing that will unbind it will be if the attacker dies (ut the target will get stuck on that animation forever). When you use script, you have full control of something. But we really mean full control: the engine will do only what you tell it to do and nothing more.

So if you position a target at X20 Y30, it will stay bound on that position forever until you tell the engine to let it go.

This is Axel's grabbacward, and an example. See how many position() i use, because I need to adjust the target to the exact position:



X, Y and Z are the velocities of the thrown target. See on the example above:
@cmd throw 25 2 4 0.5 0 0

It will cause 25 of damage (when landing on the ground), with type 2 (which causes a damage based on ATTACK9 to trigger FALL9), with X velocity of 4, Y velocity of 0.5 (keep in mind that positive Y velocities makes the enemy goes upward, negative velocities makes the enemy goes towards the ground), with 0 as Z velocity and no face change.

About what TYPE you need to use, it depends on your script. This is the version I use - it's based on @Bloodbane codes, with some changes:

C-like:
void finish(int Damage, int Type, int x, int y, int z, int Face)
{ // Damage as slam or throw finisher
   void self = getlocalvar("self");
   //void target = getlocalvar("Target" + self);
   void target = getentityvar(self,"grabbed");
   int SDir = getentityproperty(target,"direction");
   int MDir;

   if(Face==0){ // Same facing?
       MDir = SDir;
   }

   if(Face==1){ // Opposite facing?

     if(SDir==0){ // Facing left?
       MDir = 1;
     } else { MDir = 0;}
   }

   if(target==NULL())
   {
     target = getentityproperty(self, "grabbing");
     setlocalvar("Target" + self, target);
   }
   if(target!=NULL())
   {
     int dir = getentityproperty(target,"direction"); //Get opponent's facing direction
     if(dir==0){ // Facing left?
       x = -x;
     }

     if(Type==1)
     {
       damageentity(target, self, Damage, 1, openborconstant("ATK_NORMAL")); // 1st Finisher
     }

     if(Type==2)
     {
       damageentity(target, self, Damage, 1, openborconstant("ATK_NORMAL9")); // 2nd Finisher
     }
    if(Type==4)
     {
       damageentity(target, self, 1, 1, openborconstant("ATK_SHOCK")); // 4rd throw type
     }
     if(Type==5)
     {
       damageentity(target, self, Damage, 1, openborconstant("ATK_NORMAL11")); // 5th throw type
     }
     if(Type==6)
     {
       damageentity(target, self, Damage, 1, openborconstant("ATK_BURN")); // 5th throw type
     }
     if(Type==7)
     {
       damageentity(target, self, 1, 1, openborconstant("ATK_NORMAL2")); // 5th throw type
     }
     antiWallG();
     tossentity(target, y, x, z); // Toss opponent ;)
       changeentityproperty(target,"subject_to_gravity",1);
     changeentityproperty(target, "direction", MDir);
     setentityvar(self, "grabbed", NULL()); //CLEAR ENTITYVAR
   }
}
As you can see, I can finish custom animations even with BURN or SHOCK animations if I want to :)
The only animations that are required is FALL7 (ATK_NORMAL7) and FALL9 (ATK_NORMAL9), but for throwing, we use FALL9 to make the enemy to flip over your character's head.
When I want no flip, I can use TYPE 1, which will trigger the normal FALL.
The other animations you see - FALL11 and FALL2 are for other things exclusive to my project - the first is a full looped vertical flip and the second one is the "wire damage" from KOF ( or Street Fighter Alpha counter attack damage), when a character flips over its axis but horizontally

One of the difference is that originally this codes uses "getlocalvar("Target" + self)" to aquire the target, while my version is based on @Kratus initial work and uses "getentityvar(self,"grabbed");" to aquire the traget, which works better to me.

WARNING: don't copy and paste my function on your project, as it won't work, since I its tied to another functions.
this is exactly what i was waiting for thank you and yeah i know it starts at 0 tho i forget all the time lol... so yes i was using @cmd depost to unbind them when using finish.. thank you so much for the very clear explanation... really do appreciate the time you took to explain this :)
 
After watching your video again, I finally understand better why you get your errors like that. Thanks to you for showing your codes, I can see your errors now. But let me ask you one question.

Does your anim idle have @cmd clearL or not? Look at these for example.

Code:
anim idle
    offset 140 188
    delay 13
    loop 1
    bbox 116 93 57 95
    @cmd clearL
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/0_0.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/0_1.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/0_2.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/0_3.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/0_4.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/0_5.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/0_6.png
    frame data/chars/heroes/KOF_2K3_Terry_Sprite.7z/0_7.png

Code:
anim    idle
@script
  void self = getlocalvar("self"); //Get calling entity
  void Fighter1 = getglobalvar("Fighter1");//Call Fighter 1
  void Fighter2 = getglobalvar("Fighter2");//Call Fighter 2

  void Fighter;
  float Fx;
  float x;
  int Dir;

  if(Fighter1 && Fighter2){ // For setting two fighters
    if(Fighter1 == self){
      Fighter = Fighter2;
    } else {
      Fighter = Fighter1;
    }

    Fx = getentityproperty(Fighter, "x");
    x = getentityproperty(self, "x");
    Dir = getentityproperty(self, "direction");

       if(Fx >= x){
       if(Dir == 0){//Direction: Left
     performattack(self, openborconstant("ANI_FOLLOW8"));
     }
    } else {
      if(Dir == 1){//Direction: Right
      performattack(self, openborconstant("ANI_FOLLOW8"));
      }
    }

}
    @end_script
    loop    1
    delay    11
    offset    337 291
    bbox 315 195 55 101
    @cmd    clearL
    frame    data/chars/zangief/idle01.png
    frame    data/chars/zangief/idle02.png
    frame    data/chars/zangief/idle03.png
    frame    data/chars/zangief/idle04.png
    frame    data/chars/zangief/idle05.png
    frame    data/chars/zangief/idle06.png
    frame    data/chars/zangief/idle07.png
    frame    data/chars/zangief/idle08.png

like how you select the frame from fall 7 and how you get those x/y values from? facing left to right or uo and down?
also i see 2 or 3 positions in characters animation grabforward..is that a diff agled sprite each?
@cmd position 0 -28 31 0 1 # position {target's frame} {target's x} {target's y} {target's z} {target's facing}

this one i know damage bout it.
@cmd throw 10 1 3 2.2 0 -1 #throw {damage}{type} {x} {y} {z} {direction}

this no clue, i know is needed at the end but numbers?
@cmd finish 8 1 1 1 0 -1

Do you know how to read notes? Because that's what I put there for people to understand how each used part works. (Please read notes that are labelled with this #.) I think the facing part is what's confusing you, but will discuss this as soon as I put some insights.
anim grabforward
@cmd slamstart
@cmd position 0 0 0 -1 -1
Delay 7 # delay {time value of each frame within a current animation}
sound data/sounds/terthw.wav #sound {path}
# position {target's frame} {target's x} {target's y} {target's z} {target's facing}
offset 34 101 # offset {x} {y}
@cmd position 1 0 0 -1 -1
frame data/chars/ryu/thr100.png # frame {path}
@cmd position 2 0 0 -1 -1
offset 33 100
frame data/chars/ryu/thr101.png
@cmd position 3 0 0 -1 -1
offset 33 94
frame data/chars/ryu/thr102.png
@cmd position 4 0 0 -1 -1
offset 33 95
frame data/chars/ryu/thr103.png
@cmd position 5 0 0 -1 -1
offset 50 95
frame data/chars/ryu/thr104.png
offset 35 97
frame data/chars/ryu/thr105.png
offset 23 97
frame data/chars/ryu/thr106.png
offset 20 100
frame data/chars/ryu/thr107.png
offset 8 89
@cmd finish 24 -2.5 2.6 0 -1
frame data/chars/ryu/thr108.png
offset 10 79
frame data/chars/ryu/thr109.png
offset 12 74
frame data/chars/ryu/thr110.png
offset 32 72
frame data/chars/ryu/thr111.png
offset 32 95
@cmd depost 0
frame data/chars/ryu/thr112.png
Error 1: 😲 Why is depost separated from finish? Why not put it in the same line as finish is? You don't have to put depost as the last frame of the animation. There's a good reason to put them together. I remember separating both in different frames, but I didn't know how to do it. But don't worry. I had it like that before. ;)

Error 2: You left the numbers to 0 so that means you haven't started placing him to a specific position yet.


Let's recap your issues.

Position is all about binding the placement of your target (e.g. Playa). But your base of its offset/position with a given frame comes from that particular fall animation which you use for starting to slam (specifically anim fall7). Not only them, but also with forcedirection value. I highlighted the first ones so you get the idea, but I couldn't highlight the rest of the frames and offsets because it's too much to highlight.

anim fall7
loop 0
delay 1000
offset 92 20
frame data/chars/playa/fall03.png
offset 59 44
frame data/chars/playa/fall03.png
offset 28 42
frame data/chars/playa/fall03.png
offset 94 72
frame data/chars/playa/RF_8.png
offset 56 70
frame data/chars/playa/RF_8.png
offset 34 50
frame data/chars/playa/RF_8.png
offset 51 88
frame data/chars/playa/RF_7.png
offset 21 61
frame data/chars/playa/RF_7.png
offset 21 35
frame data/chars/playa/RF_7.png
offset 44 93
frame data/chars/playa/RF_6.png
offset 37 52
frame data/chars/playa/RF_6.png
offset 54 31
frame data/chars/playa/RF_6.png
offset 41 65
frame data/chars/playa/RF_5.png
offset 61 34
frame data/chars/playa/RF_5.png
offset 85 24
frame data/chars/playa/RF_5.png
offset 36 41
frame data/chars/playa/RF_4.png
offset 72 29
frame data/chars/playa/RF_4.png
offset 96 39
frame data/chars/playa/RF_4.png
offset 40 44
frame data/chars/playa/RF_3.png
offset 72 54
frame data/chars/playa/RF_3.png
offset 86 80
frame data/chars/playa/RF_3.png
offset 33 33
frame data/chars/playa/RF_2.png
offset 51 62
frame data/chars/playa/RF_2.png
offset 48 90
frame data/chars/playa/RF_2.png
offset 78 32
frame data/chars/playa/RF_1.png
offset 65 72
frame data/chars/playa/RF_1.png
offset 49 89
frame data/chars/playa/RF_1.png
offset 114 24
frame data/chars/playa/fall04.png
offset 65 22
frame data/chars/playa/fall04.png
offset 30 23
frame data/chars/playa/fall04.png
offset 92 115
frame data/chars/misc/empty.gif

void slamstart()
{ // Slam Starter
// Use finish after using this
void self = getlocalvar("self"); //Get self
void target = getlocalvar("Target" + self); //Get calling target/enemy/opponent and player

if(target==NULL())
{
target = getentityproperty(self, "grabbing");
setlocalvar("Target" + self, target);
}
if(target!=NULL())
{
damageentity(target, self, 0, 1, openborconstant("ATK_NORMAL7")); // Slam Starter
}
}
void position(int Frame, float dx, float dy, float dz, int face)
{ // Modify grabbed entity's position relative to grabber
void self = getlocalvar("self"); //Get calling entity
void target = getlocalvar("Target" + self); //Get calling target and self

if(target==NULL()) //If target equal to NULL?
{
target = getentityproperty(self, "grabbing"); //Get calling grabbing entity
setlocalvar("Target" + self, target); //Set target and self together
}
if(target!=NULL()) //If target NOT equal to NULL?
{
updateframe(target, Frame);
bindentity(target, self, dx, dz, dy, face, 0);
}
}

anim grabbackward
loop 0
delay 8
bbox 0 0 0 0
@cmd position 0 -30 0 -1 0
@cmd slamstart2
sound data/sounds/terthw.wav
offset 23 96
frame data/chars/ryu/bthrow0.png
offset 52 81
frame data/chars/ryu/bthrow1.png
offset 54 66
frame data/chars/ryu/bthrow2.png
offset 86 60
frame data/chars/ryu/bthrow3.png
offset 81 63
delay 20
frame data/chars/ryu/bthrow4.png
offset 67 50
delay 8
frame data/chars/ryu/bthrow5.png
offset 66 46
frame data/chars/ryu/bthrow6.png
offset 54 62
@cmd throw 20 1 3 0.8 0 0
@cmd depost 0
frame data/chars/ryu/bthrow7.png
Mmm? Why no bind in other frames after slamstart/slamstart2 and before using throw?

Depost and throw/finish should come together in one frame for starting to throw.

The last parameter for position and throw/finish has the same value as forcedirection.
forcedirection {dir}

  • If this command is declared, opponents hit by attackbox will face specific direction instead of facing entity.
    • 0 = no effect (used to turn off forcedirection).
    • -2 = Left. It means always left no matter where opponent is hit.
    • -1 = opposite of entity.
    • 1 = same direction of entity.
    • 2 = Right. It means always right no matter where opponent is hit.
  • Use this command with an attackbox of course.
 
ok think i got it... thanks to you good folks :)
please feedback is important to me on this :)
only 1 character done and only 2 throws for now... but i have a feeling that number will grow..but now i have to keep on levels.. special thanks to these folks :)
@O Ilusionista @DCurrent @maxman @Bloodbane
Didn't see your post here. LOL

Bravo. 👏👏👏👏👏

fist-pump-yeah.gif

sean-william-scott-fist-pump.gif
 
On cell phone so cant see much here lol...but yes i do have that on my idle animation as thats what younsaid to do in your help tread you linked me to.
Also those where left ton 0 on cus i didnt understand them untilningot cmt working.

The trouble i have in other videos was due to the throw/finish function..i needed to go negative on x value..that started to get stuff fixed...

Now as far as having depost separated from throw/finish is because if there is more positions after them i have to put it last or it wont get rid of the last binding and that breaks stuff...so far onlynway to get stuff working properly i have to have them separated.

And yes i can read notes...but sadly on those i didnt understand the meaning of the numbers and hence why i asked cus i did not understand it...i do now tho.
But if i dont understand i have to ask :/

In any case is all good now 😁
 
Does your anim idle have @cmd clearL or not? Look at these for example.
He doesn't need to add clearL in the idle animation. In fact, it's a terrible idea, as it will clear all the local variables (even the ones you want to keep) plus this code will run very often, wasting memory for no reason, since you placed it on the first frame.

You can have weird behaviors too if you put it in the same frame you use depost, for example.

What I do is to place clearL on the next frame after I use throw() or finish(), and it works fine.

---

@AlexDC22 the throws looks ok, but I noted an issue with grabs: you are using the pain animation (where the enemy "shakes") for that and it looks very weird. I suggest you to create the grabbed animation, which will play once the enemy is grabbed, with just one frame. Because if you don't have that animation, OpenBOR will use the normal pain animation instead.

Also, you pain animation is a bit too slow, which make it to look a bit weird. Compare with pain animations from the original game and will see.

I can post a video here later to show you what o am talking about
 
He doesn't need to add clearL in the idle animation. In fact, it's a terrible idea, as it will clear all the local variables (even the ones you want to keep) plus this code will run very often, wasting memory for no reason, since you placed it on the first frame.

You can have weird behaviors too if you put it in the same frame you use depost, for example.

What I do is to place clearL on the next frame after I use throw() or finish(), and it works fine.
Ahh... I didn't know about that. I thought using clearL is a must in anim idle when it comes to binding for throws. If I don't use clearL in anim idle, does this mean I have to add clearL in one frame after the previous frame with throw() and depost() as you said like this?

Code:
anim    follow9 #Forward punch throw
    offset    48 94
    delay    25
    @cmd    slamstart2
    @cmd    position 0 -36 3 -4 1
    @cmd    camFocus 1
    frame    data/chars/ryu/376.gif
    delay 8
    offset    24 95
    @cmd    position 1 -20 21 -1 1
    frame    data/chars/ryu/377.gif
    offset    15 98
    @cmd    position 2 12 26 1 1
    frame    data/chars/ryu/378.gif
    offset    14 87
    @cmd    position 3 47 77 -1 1
    frame    data/chars/ryu/379.gif
    offset    8 77
    @cmd    position 4 67 76 0 1
    @cmd    camFocus 0
    frame    data/chars/ryu/380.gif
    @cmd    position 4 67 76 0 1
    @cmd    depost 0
    @cmd    throw 5 1 4.2 2.5 0 0
    frame    data/chars/ryu/380.gif
    offset    11 72
    @cmd    clearL
    frame    data/chars/ryu/381.gif
    offset    12 70
    frame    data/chars/ryu/382.gif
    offset    30 78
    frame    data/chars/ryu/383.gif

I'll give it a try. I forgot that I added clearL in the same frame as throw and depost. Thanks for the info, O. I do care about memory optimization or less memory resource for faster load, but I still do not know which ones do waste memory or how.

@AlexDC22 the throws looks ok, but I noted an issue with grabs: you are using the pain animation (where the enemy "shakes") for that and it looks very weird. I suggest you to create the grabbed animation, which will play once the enemy is grabbed, with just one frame. Because if you don't have that animation, OpenBOR will use the normal pain animation instead.
As in anim grabbed.
 
yeah i never added anim grabbed to the og one...i will switch that frame and or create the animation... i didnt even noticed lmfao... getting old haha
thanks again folks
 
He doesn't need to add clearL in the idle animation. In fact, it's a terrible idea, as it will clear all the local variables (even the ones you want to keep) plus this code will run very often, wasting memory for no reason, since you placed it on the first frame.

You can have weird behaviors too if you put it in the same frame you use depost, for example.

What I do is to place clearL on the next frame after I use throw() or finish(), and it works fine.

---

@AlexDC22 the throws looks ok, but I noted an issue with grabs: you are using the pain animation (where the enemy "shakes") for that and it looks very weird. I suggest you to create the grabbed animation, which will play once the enemy is grabbed, with just one frame. Because if you don't have that animation, OpenBOR will use the normal pain animation instead.

Also, you pain animation is a bit too slow, which make it to look a bit weird. Compare with pain animations from the original game and will see.

I can post a video here later to show you what o am talking about
moving @cmd clearL anywhere in the throw animations will make the next frame being tossed stop on its place... so really dont know where to put it now ... thanks
EDIT: can i put it in anim grab? being is one frame and is not a constant like idle.
 
Last edited:
nevermind i guess it does work but has to be after depost... anyways if anyone see anything wrong with this 2 animations when it comes to where the @cmd are placed... let me know cus i was advised to keep keep depost and throw together but thats not feasible as there is more positions after throw and depost is needed after the last position or it wont get rid of the last position binding...
Code:
anim grabforward
@cmd slamstart
Delay  7
sound  data/sounds/terthw.wav
offset 50 95
@cmd position 2 -49 79 0 1
frame  data/chars/Players/ryu/thr104.png
offset 35 97
@cmd position 17 -13 96 1 1
frame  data/chars/Players/ryu/thr105.png
offset 23 97
@cmd position 20 23 80 1 1
frame  data/chars/Players/ryu/thr106.png
offset 20 100
@cmd throw 25 -2.5 4.6 0 0
@cmd position 23 55 82 1 1
frame  data/chars/Players/ryu/thr107.png
offset 8 89
@cmd position 26 100 54 1 1
frame  data/chars/Players/ryu/thr108.png
offset 10 79
@cmd position 8 117 16 1 1
frame  data/chars/Players/ryu/thr109.png
offset 12 74
@cmd position 11 139 10 1 1
frame  data/chars/Players/ryu/thr110.png
offset 32 72
@cmd position 14 148 6 1 1
frame  data/chars/Players/ryu/thr111.png
offset 32 95
@cmd depost 0  
@cmd clearL
frame  data/chars/Players/ryu/thr112.png

anim grabbackward
loop    0
delay    7
bbox    0 0 0 0
@cmd slamstart
sound   data/sounds/terthw.wav
offset  23 96
@cmd position 0 -4 25 0 -1
frame    data/chars/Players/ryu/bthrow0.png
offset  52 81
@cmd position 17 -23 85 1 -1
frame    data/chars/Players/ryu/bthrow1.png
offset  54 66
@cmd throw 25 -2.5 4.6 0 0
@cmd position 18 9 56 1 -1
frame    data/chars/Players/ryu/bthrow2.png
offset  86 60
@cmd position 23 -124 44 1 -1
frame    data/chars/Players/ryu/bthrow3.png
offset  81 63
@cmd position 24 -121 95 1 -1
frame    data/chars/Players/ryu/bthrow4.png
offset  67 50
@cmd position 8 -145 9 1 -1
frame    data/chars/Players/ryu/bthrow5.png
offset  66 46
@cmd position 11 -141 8 1 -1
frame    data/chars/Players/ryu/bthrow6.png
offset  54 62
@cmd position 14 -150 9 1 -1
@cmd depost 0  
@cmd clearL
frame    data/chars/Players/ryu/bthrow7.png
 
You should declare @cmd depost right before @cmd throw or @cmd finish cause that's when opponent is released. And you shouldn't declare @cmd depost at the same frame as @cmd position cause it makes the latter redundant.
And although it might be okay but I suggest declared @cmd clearL at another frame after frame in which @cmd depost is declared.
 
You should declare @cmd depost right before @cmd throw or @cmd finish cause that's when opponent is released. And you shouldn't declare @cmd depost at the same frame as @cmd position cause it makes the latter redundant.
And although it might be okay but I suggest declared @cmd clearL at another frame after frame in which @cmd depost is declared.
yeah i dont know how... even if i deleted a position to be able to put depost on it, it still breaks it...what i posted is the only way i could get it to work as it should.
cus deleting a position, isnt that what breaks the animation since theres more positions after that?
same with clearl...anywhere else in the animation would break it so am at a loss..as it is it works but apparently is wrong?
this is so confusing

EDIT: ok i think i finally understand how this is supposed to be... smfh slow learner here... on throw type thats when anim fall 9 comes into play and supplying the rest of the frames.. problem i see on that is like ryu, he has 2 throws that are different...so just fall9 on both will not work...then you have the rest of the players throws and the enemies fall7... i just dont see how 2 fall animations can cover all those... i think am gonna put this on the back burner for now if not for good... thanks for all you folks that tried to help.
 
Last edited:
moving @cmd clearL anywhere in the throw animations will make the next frame being tossed stop on its place... so really dont know where to put it now ... thanks
clearL() should go right after the depost()

@cmd depost 0
@cmd clearL
frame data/chars/Players/ryu/thr112.png

You should declare @cmd depost right before @cmd throw or @cmd finish cause that's when opponent is released. And you shouldn't declare @cmd depost at the same frame as @cmd position cause it makes the latter redundant.
There is an advantage of using position togheter with depost: when you want to release the binded target on a different position rather than where it was on the previous frame. For example, I do this to ensure I am releasing a binded target on the spot that my player is, to not release them inside walls for example.
 
so just fall9 on both will not work...then you have the rest of the players throws and the enemies fall7...

That's why throw and finish function have parameter to choose which FALL animation to play for the thrown or slammed opponent. You just need to choose which one which suits the throw or slam animation.
 
i think am gonna put this on the back burner for now if not for good
Yo, I feel the same about slams, it's more work then anything if you ask me but the pay off is well worth it.
I used World heroes supreme justice as a reference when doing slams, to the point where I just swopped out sprites, I'll upload an example later.
 
so just fall9 on both will not work...then you have the rest of the players throws and the enemies fall7
If you are following my tutorial, FALL9 will be enough to pretty much all Ryu's throw. Both throws - Seoi Nage and and Tome Nage - could be done using FALL9.

You should NEVER make them to revert to FALL7, as that animation has a delay 1000 on each frame (on my method). Doing this will make them to get stuck on the same frame.
In cases where you don't make the target to flip - for example, when Andore grabs someone by the neck and throws them forward (simply pushing the person back), you change the TYPE to use the normal FALL.
 
If you are following my tutorial, FALL9 will be enough to pretty much all Ryu's throw. Both throws - Seoi Nage and and Tome Nage - could be done using FALL9.

You should NEVER make them to revert to FALL7, as that animation has a delay 1000 on each frame (on my method). Doing this will make them to get stuck on the same frame.
In cases where you don't make the target to flip - for example, when Andore grabs someone by the neck and throws them forward (simply pushing the person back), you change the TYPE to use the normal FALL.
so basically use the fall9 to immediately start after throw cmd...and it will work for all characters as long as they all are angled de same way right?
still gonna leave this for later as it will take me a bit with all the stuff i have to get done.. is best if i do this when only a few things are left, i work better that way xD
 
so basically use the fall9 to immediately start after throw cmd...and it will work for all characters as long as they all are angled de same way right?
still gonna leave this for later as it will take me a bit with all the stuff i have to get done.. is best if i do this when only a few things are left, i work better that way xD
Im not sure buddy but @O Ilusionista knows his stuff :) Just take your time with the game buddy there is no need to rush it. Release it when you happy with it :) @AlexDC22

 
Back
Top Bottom