anim block
counterrange 0 1 1 10
followanim 3
loop 0
delay 5
offset 31 99
bbox 39 7 2 81
frame data/chars/ryu/block1.gif
@cmd keyint "ANI_FOLLOW3" 0 "S" 0 200
offset 33 102
bbox 39 7 2 81
delay 5
frame data/chars/ryu/block2.gif
counterrange {start} {end} {condition} {damage}
- Animation header. If all conditions are met, entity will perform animation set by followanim.
- This command is to make entity performs FOLLOW{#} if the entity is hit in set frame.
- frame determines at which frame if entity is hit , FOLLOW{#} would be played.
- Which FOLLOW animation played is determined by 'followanim'.
- {start} Start of frame range when counter may trigger.
- {end} End of frame range when counter may trigger.
- cond determines the condition requirements before FOLLOW{#} is played.
- 1: The counter will always be used.
- 2: The counter will be used as long as the attacker was an enemy (Or a player if an enemy uses it).
- 3: The counter will be used as long as the attacker was an enemy, the attack was not unblockable, hits the user from the front, and was not a FREEZE attack.
- 4: The counter will always be used and if health - attack damage <= your health will be 1 (rage).
- damaged determines whether the entity will receive damage from the hit or not.
- 0, the damage won't be taken
- 1, the damage will be taken
anim block
counterrange 0 2 1 0 #counterrange {start} {end} {condition} {damage}
followanim 4 # Counter between these starting and ending frames for anim follow4 (same as anim freespecial2) to play if counterrange is used
loop 0
delay 5
offset 31 99
bbox 39 7 2 81
frame data/chars/ryu/block1.gif
delay 15
offset 33 102
frame data/chars/ryu/block2.gif
delay 5
@cmd keyint "ANI_FOLLOW3" 0 "S" 0 200 # HOLD SPECIAL button to change to FIRST frame of anim FOLLOW3
frame data/chars/ryu/block2.gif
anim follow3 #Still blocking
counterrange 0 2 1 0 #counterrange {start} {end} {condition} {damage}
followanim 6 #Dash back after counter
loop 0
delay 5
offset 33 102
bbox 39 7 2 81
frame data/chars/ryu/block2.gif
frame data/chars/ryu/block2.gif
delay 5
@cmd keyint "ANI_FOLLOW5" 0 "S" 0 200 # Switching to another animation but with same block frames as anim follow3
frame data/chars/ryu/block2.gif
anim follow5 #Still blocking 2
counterframe 0 2 1 0
followanim 6
loop 0
delay 1
offset 33 102
bbox 39 7 2 81
frame data/chars/ryu/block2.gif
frame data/chars/ryu/block2.gif
@cmd keyint "ANI_FOLLOW3" 0 "S" 0 200 #Going back to anim follow3 and forth so it'll end up as a looping block animation
frame data/chars/ryu/block2.gif
anim follow6 #Dash back after counter
loop 0
delay 5
offset 33 102
frame data/chars/ryu/block2.gif
frame data/chars/ryu/block2.gif
frame data/chars/ryu/block2.gif
frame data/chars/ryu/block2.gif
frame data/chars/ryu/block2.gif
@cmd velo001 -1.6 0 0 # Move back more
frame data/chars/ryu/block2.gif
frame data/chars/ryu/block2.gif
@cmd velo001 -1.2 0 0 # Move back a little more
frame data/chars/ryu/block2.gif
frame data/chars/ryu/block2.gif
@cmd velo001 -0.8 0 0 # Move back a little bit
frame data/chars/ryu/block2.gif
frame data/chars/ryu/block2.gif
@cmd velo001 -0.4 0 0 # Move back a little closer
frame data/chars/ryu/block2.gif
frame data/chars/ryu/block2.gif
@cmd velo001 0 0 0 # Stop
frame data/chars/ryu/block2.gif
@cmd keyint "ANI_FOLLOW3" 0 "S" 0 200 #Go back to anim follow3 if special button is held
frame data/chars/ryu/block2.gif
anim follow4 #Same frames as ANIM FREESPECIAL2
@script
void self = getlocalvar("self");
changeentityproperty(self, "aiflag", "idling", 0);
changeentityproperty(self, "aiflag", "walking", 0);
changeentityproperty(self, "aiflag", "blocking", 0);
changeentityproperty(self, "takeaction", "common_pain");
@end_script
loop 0
delay 5
offset 24 87
bbox 0 0 0 0
fastattack 1
followanim 2
followcond 1
move 5
sound data/sounds/ryuratk.wav
frame data/chars/ryu/frsp00.gif
offset 24 93
frame data/chars/ryu/frsp01.gif
offset 23 97
frame data/chars/ryu/frsp02.gif
offset 25 118
attack 30 0 36 72 8
frame data/chars/ryu/frsp03.gif
offset 24 113
attack 0 0 0 0 0
frame data/chars/ryu/frsp04.gif
offset 24 113
frame data/chars/ryu/frsp05.gif
offset 24 108
frame data/chars/ryu/frsp06.gif
offset 24 98
frame data/chars/ryu/frsp07.gif
offset 24 98
frame data/chars/ryu/frsp08.gif
loop {bi} {start} {end}
- Determines how loop effect is applied in current animation
- {bi} toggles looping on or off.
- 0 = looping off
- 1 = looping on
- {start} determines the number of frame the animation loops to. Defaults to 0 or 1st frame.
- {end} determines the number of frame which starts the loop. If left blank, the animation will loop at the end of animation.
- Some animations should NOT be set to loop (loop temporary at least). Examples include most attacks and injured animations.
but i cant unpack to get any of the scripts to adapt from NSX tho
thold {int}
- {int} is the threshold for an entity's blocking ability.
- If the entity tries to block an attack with an attack power higher than {int}, they will not be able to do so and will get hit anyway.
- If {int} is 0, an entity will have infinite threshold. In other words, they can block any attacks.
- Regardless of threshold, if an attack is set to be unblockable, it can't be blocked.
no worries my brother, it happensAlex, I'm so sorry that I forgot to show you here to try thold 1 instead of holdblock 1. That's the one I missed pointing out and I'm using it (thold 1). That's what BonusJZ used for his NSX mod.
but you lose blocking ability as holding the button down does nothing...but as a counter alone works great..
anim freespecial
delay 8
counterrange 1 1 1 0
followanim 1
offset 54 159
bbox 35 55 34 106
frame data/chars/ken/block.gif
delay 15
frame data/chars/ken/block.gif
delay 5
@cmd block 1
frame data/chars/ken/block.gif
@cmd keyflip
@cmd keyint "ANI_FREESPECIAL" 2 "A2" 0 -1
frame data/chars/ken/block.gif
delay 8
@cmd block 0
frame data/chars/ken/block.gif
attack{#} {x} {y} {right} {down} {damage} {power} {block} {noflash} {pausetime} {z}
attack{#} {x} {y} {right} {down} {damage} {power} {block} {noflash} {pausetime} {z}
There are two ways to set an attack box, since build 4183: the old method, with multiple parameters on the same line (above) and the new method, where all the parameters were broken in several lines, which makes easier to read.
The new method: Commands with multiple parameters are being broken down into single line items. This will make text files more readable and easier to debug. It will also help to "future proof" commands and avoid conflicts as we go forward.
- An attack box which can hit bboxes
- OpenBoR supports 10 different attack boxes by default and {#} determines which one the frame is using. There's no space between 'attack' and {#} though.
- You can only have one type of attack box per frame (that is, you can't have two attack boxes or an attack and an attack4 box in the same frame). You can 'fake' an extra box or two by adding in extra frames with different boxes and changing the delay accordingly, but this takes up more memory (for the extra frames) and doesn't work perfectly, so try to do so sparingly.
- {x}, {y}, {right}, and {down} work exactly like in a bbox.
- {damage} determines how much damage the attack does. Setting it to 0 also works. Great for making launchers, slams and paralyze attacks.
- {power} is an integer value that determines how strong the knockdown effect of this attack. 0 means no knockdown, 1 means knockdown level 1, etc. This is used in conjunction with 'knockdowncount' (see above).
- {block} is a binary value which determines if an attack is unblockable.
- {noflash} is a binary value which controls whether the flash is displayed. 0 means flash, 1 means no flash.
- {pausetime} is an integer which will cause the attacker and attackee to be paused for {pausetime} if the attack hits something.
- {z} determines attackbox' width in z axis.
- If you change or repeat an attack box's declaration later in the animation, you can create combos in same animation. However, a certain amount of time must pass before targets can be hit again (This can be avoided with 'fastattack'). Also, you must have at least one frame with a blank attack box (One set to 'attack 0') between the two frames or sets of frames which combo.
- You can use negative numbers or numbers outside of the frame's edges.
- Can be used multiple times in one animation to change hit areas mid-animation
- When the attacking part of the animation is over, use 'attack 0'. Otherwise, the attack box will remain and can continue hitting people for the rest of the animation!
- Each 'attack{#}' has respective PAIN, FALL and DEATH animation. For instance, if attacker hits opponent with attack2, the latter will play PAIN2 (if attack2 doesn't knock him/her down) or FALL2 (if attack2 knocks him/her down) or DEATH2 (if attack2 kills him/her).
- attack.block.cost - See guardcost.
- attack.block.penetrate - See attack{#} {block}.
- attack.counter - See counterattack.
- attack.damage.force - The attack's standard damage output.
- attack.damage.land.force - damageonlanding {value}
- attack.damage.land.mode - damageonlanding {type}
- attack.damage.lethal.disable - This attack cannot finish off the target - only reduce it to 1 HP.
- attack.damage.recursive.force - See DOT {force}.
- attack.damage.recursive.index - See DOT {index}.
- attack.damage.recursive.mode - See DOT {mode}.
- attack.damage.recursive.rate - See DOT {rate}.
- attack.damage.recursive.time - See DOT {time}.
- attack.damage.steal - Damage done by this attack will be added to attackers HP.
- attack.damage.type - Sets attack type. Same as {#} in attack{#}
- attack.effect.block.flash.model - See blockflash.
- attack.effect.block.sound.path - Path to sound that will play when this attack is blocked.
- attack.effect.hit.flash.disable - See noflash.
- attack.effect.hit.flash.model - See hitflash.
- attack.effect.hit.flash.sound - See hitfx.
- attack.index - Currently no effect. This is for future support of multiple attack boxes.
- attack.ground.mode - See otg.
- attack.map.index - See forcemap {map}.
- attack.map.time - See forcemap {time}.
- attack.position.x - See attack{#} {x}.
- attack.position.y - See attack{#} {y}.
- attack.reaction.fall.force - See attack{#} {power}.
- attack.reaction.fall.velocity.x - See dropv {speedx}.
- attack.reaction.fall.velocity.y - See dropv {speedy}.
- attack.reaction.fall.velocity.z - See dropv {speedz}.
- attack.reaction.freeze.mode - Freeze target (requires freezetime). Set forcemap = -1 to apply target's fmap.
- attack.reaction.freeze.time - Time target remains frozen.
- attack.reaction.invincible.time - Time to remain invincible after hit.
- attack.reaction.reposition.direction - See forcedirection.
- attack.reaction.reposition.distance - See grabin {distance}.
- attack.reaction.reposition.mode - See grabin {mode}.
- attack.reaction.pain.disable - See noreflect.
- attack.reaction.pause.time - See attack{#} {pausetime}.
- attack.seal.cost - See seal {energy}.
- attack.seal.time- See seal {time}.
- attack.size.x - See attack{#} {width}.
- attack.size.y - See attack{#} {height}.
- attack.size.z.1 - See attack{#} {z}.
- attack.size.z.2 - Depth of bbox toward player. When this is defined, z.1 becomes depth into screen.
- attack.staydown.rise.time - See staydown {rise}.
- attack.staydown.attack.time - See staydown {riseattack}.
- attack.tag - Neutral integer value not utilized by engine in any way. Use this to add your own custom tags or flags to an attack box for scripting. Protip: OpenBOR script supports bitwise logic - you can store a LOT of information in a single integer if you are careful and plan ahead.
attack11,attack12,...
- These attacks are only usable if you have increased attacktype limit. To increase the limit use 'maxattacktypes' (see details above in Models.txt section).
- After they are available, they work just like other attacks. That also means respective PAIN,FALL and DEATH animations are also available.
attack 60 12 64 41 6 0 1 0 0 0
sadly no effect...same thing happensDid you try using 1 in {block} in attack{#}? It's unblockable.
Code:attack 60 12 64 41 6 0 1 0 0 0
anim grab
@script
if(frame==0){
void self = getlocalvar("self");
void target = getentityproperty(self, "opponent");
if(target){
changeentityproperty(target, "seal",-10);
}
}
@end_script
...
thanks that did fix it YAY!!!Hmm.... you're using special key to access BLOCK animation, that's why it's possible to break free from grab by pressing that key.
To solve this, try adding this script in Alex's GRAB animation:
C:anim grab @script if(frame==0){ void self = getlocalvar("self"); void target = getentityproperty(self, "opponent"); if(target){ changeentityproperty(target, "seal",-10); } } @end_script ...