{"id":366,"date":"2021-08-05T07:12:57","date_gmt":"2021-08-05T12:12:57","guid":{"rendered":"https:\/\/chronocrash.com\/obor\/wiki\/?p=366"},"modified":"2024-01-02T11:25:03","modified_gmt":"2024-01-02T16:25:03","slug":"collision","status":"publish","type":"post","link":"https:\/\/chronocrash.com\/obor\/wiki\/collision\/","title":{"rendered":"Collision"},"content":{"rendered":"\n<p>Collision boxes tell OpenBOR (or any other game engine) what portions of an entity are able to hit or get hit and what areas of a level are walls or platforms. In OpenBOR these boxes are geometric cubes the engine continuously compares to each other &#8211; whenever two or more cubes overlap, that&#8217;s a collision and the engine will react accordingly. <\/p>\n\n\n\n<p>Depending on the type of collision box, it will have other properties that tell the engine how to handle the collision event. This article focuses on Attack (hitting with attacks) and Body (Receiving attacks and taking up space). Walls and platforms work on a similar principal and are covered in level design.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Multiple Boxes<\/h2>\n\n\n\n<p>OpenBOR supports multiple collision boxes per frame. To define a second box of any type, add <code>collision.index {index}<\/code> with your desired index and then define a set of properties for the next box. You may use any integer value for <code>{index}<\/code>. All subsequent collision box properties below <code>collision.index {index}<\/code> now act on the new index. <\/p>\n\n\n\n<p>You can repeat this process to add a third box, a forth box, and so on. To adjust or disable the boxes, again use  <code>collision.index {index}<\/code> to define which box you wish to act on, then disable or adjust the box properties as you would a single occurrence.<\/p>\n\n\n\n<p>When two or more attack boxes overlap a body box or body boxes, OpenBOR will acknowledge a single collision with the earliest attack and body boxes in defined order taking priority.<\/p>\n\n\n\n<p><strong>Tip: <\/strong>There&#8217;s no hard code limit, but don&#8217;t get carried away with this feature. Even high precision vs. fighters like Street Fighter and King of Fighters typically use just two or three body boxes and one attack box. Most beat em&#8217; up games never need more than one of each except for special cases (ex. oddly shaped limbs).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Attack<\/h2>\n\n\n\n<p>Attacks hit and presumably cause damage to other entities. To define an attack, add the necessary attack commands from list below immediately before the frame. In most cases you only need the basic dimensions and damage value. The other attack properties are optional and most are disabled by default. <\/p>\n\n\n\n<p>Once defined, an attack remains active throughout remainder of the animation unless you redefine it. To disable an attack, add <code>attack 0<\/code>  or <code>attack none<\/code> before a frame. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Command List<\/h3>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th>Command<\/th><th>Default<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>attack.block.cost<\/td><td>0<\/td><td>Amount attack removes from target&#8217;s <em>guardpoints<\/em> when blocked.<\/td><\/tr><tr><td>attack.block.penetrate<\/td><td>0<\/td><td>If this meets or exceeds target&#8217;s block threshold, target cannot block attack.<\/td><\/tr><tr><td>attack.counter<\/td><td>0<\/td><td>If 1+, this attack treats target&#8217;s attack boxes as body boxes. If both attacks have counter value, highest value has priority.<\/td><\/tr><tr><td>attack.damage.force<\/td><td>0<\/td><td>Value deducted from target&#8217;s hit points.<\/td><\/tr><tr><td>attack.damage.land.force<\/td><td>0<\/td><td>If attack causes a fall, value deducted from target&#8217;s hit points on landing.<\/td><\/tr><tr><td>attack.damage.land.mode<\/td><td>0<\/td><td>If attack causes knockdown, target&#8217;s projectile status and landing ability. Projectile status has no effect if target&#8217;s fall animations do not have an attack box.<br><br>* 0 &#8211; Normal fall. Target&#8217;s attack boxes are disabled until landing.<br><br>* 1 &#8211; Target&#8217;s attack boxes are enabled in projectile mode until landing, meaning target will hit its allies.<br><br>* 2 &#8211; Same as 1. Additionally, if player controlled targets have LAND animation available, they may play it on landing and nullify land force by holding Up + Jump.<\/td><\/tr><tr><td>attack.damage.lethal.disable<\/td><td>0<\/td><td>If true, attack cannot reduce target&#8217;s hit points below 1. <\/td><\/tr><tr><td>attack.damage.recursive.force<\/td><td>0<\/td><td>Amount deducted from target&#8217;s hitpoints on each recursive tick. See <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/recursive-damage\/\" data-type=\"URL\" data-id=\"https:\/\/chronocrash.com\/obor\/wiki\/recursive-damage\/\">Recursive Damage<\/a>.<\/td><\/tr><tr><td>attack.damage.recursive.index<\/td><td>0<\/td><td>Index ID applied to recursive damage. See <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/recursive-damage\/\" data-type=\"URL\" data-id=\"https:\/\/chronocrash.com\/obor\/wiki\/recursive-damage\/\">Recursive Damage<\/a>. <\/td><\/tr><tr><td>attack.damage.recursive.mode<\/td><td>0<\/td><td> How recursive damage applies to target&#8217;s hit points or magic points. See <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/recursive-damage\/\" data-type=\"URL\" data-id=\"https:\/\/chronocrash.com\/obor\/wiki\/recursive-damage\/\">Recursive Damage<\/a>. <\/td><\/tr><tr><td>attack.damage.recursive.tag<\/td><td>0<\/td><td>Creator defined value ignored by native engine logic.  See <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/recursive-damage\/\" data-type=\"URL\" data-id=\"https:\/\/chronocrash.com\/obor\/wiki\/recursive-damage\/\">Recursive Damage<\/a>. <\/td><\/tr><tr><td>attack.damage.recursive.time<\/td><td>0<\/td><td>How long (in centiseconds) the recursive damage effect will last. See <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/recursive-damage\/\" data-type=\"URL\" data-id=\"https:\/\/chronocrash.com\/obor\/wiki\/recursive-damage\/\">Recursive Damage<\/a>. <\/td><\/tr><tr><td>attack.damage.recursive.rate<\/td><td>0<\/td><td>How long (in centiseconds) between each tick of recursive damage. See <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/recursive-damage\/\" data-type=\"URL\" data-id=\"https:\/\/chronocrash.com\/obor\/wiki\/recursive-damage\/\">Recursive Damage<\/a>. <\/td><\/tr><tr><td>attack.damage.steal<\/td><td>0<\/td><td>If true, <code> attack.damage.force <\/code> is added to attacking entity&#8217;s hit points.<\/td><\/tr><tr><td>attack.damage.type<\/td><td>1<\/td><td>Attacking type. Works with target&#8217;s defense values and reacting animations. Accepts following values:<br><br>* Any 1+ number. For legacy compatibility, attacks are NOT 0 indexed. If you provide a value of 0, 1 is used instead.<br><br>* Blast<br><br>* Burn<br><br>* Freeze<br><br>* Shock<br><br>* Steal<br><br>See <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/attack-types\/\" data-type=\"post\" data-id=\"49\">Attack Types<\/a> for details.<\/td><\/tr><tr><td>attack.effect.block.flash.model<\/td><td>None<\/td><td>Name of model to spawn when target blocks attack.<\/td><\/tr><tr><td>attack.effect.block.sound.path <\/td><td>None<\/td><td>Path to sound file that plays when target blocks attack.<\/td><\/tr><tr><td>attack.effect.hit.flash.layer.adjust<\/td><td>0<\/td><td>Added to global layer adjustment of flash spawn drawing layer. See <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/hit-effects-flash\/\" data-type=\"post\" data-id=\"833\">Hit Effects<\/a>.<\/td><\/tr><tr><td>attack.effect.hit.flash.layer.source<\/td><td>0<\/td><td>Added to global hit flash layer source value for controlling source of flash spawn drawing layer. See <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/hit-effects-flash\/\">Hit Effects<\/a>. <\/td><\/tr><tr><td>attack.effect.hit.flash.model<\/td><td>None<\/td><td>Name of model to spawn when attack hits target. If undefined, the global flash model spawns.<\/td><\/tr><tr><td>attack.effect.hit.flash.disable<\/td><td>0<\/td><td>If true, no model spawns when attack hits target.<\/td><\/tr><tr><td>attack.effect.hit.sound.path<\/td><td>None<\/td><td>Path to sound file that plays when attack hits target. <\/td><\/tr><tr><td>attack.ground.mode<\/td><td>0<\/td><td>Ability to hit fallen targets on the ground.<br><br>* 0 = Attack cannot hit lying targets.<br><br>* 1 = Attack can hit lying targets.<br><br>* 2 = Attack only hits lying targets.<\/td><\/tr><tr><td>collision.index<\/td><td>0<\/td><td>Used for multiple attack boxes on one animation frame. 0 is the first attack box. 1 is the second, and so on. Place this immediately before other properties to have them act on that index. See <em>multiple collision boxes<\/em> for details.<\/td><\/tr><tr><td>attack.map.index<\/td><td>0<\/td><td>If 1+, target entity switches to this palette index. For example, if hit by <code>attack.map.index 3<\/code>, the target switches to palette 3 if available. <br><br>If -1, target applies its freeze palette.<br><br>You can also use one of following named indexes. If the defending target has a matching named palette index defined, it will apply that palette index. <br><br><code>burn<\/code><br><code>freeze<\/code><br><code>ko<\/code><br><code>shock<\/code><\/td><\/tr><tr><td>attack.map.time<\/td><td>0<\/td><td>Time in centiseconds to maintain <code>attack.map.index<\/code> effect. Target reverts to previous palette afterward.<\/td><\/tr><tr><td>attack.position.x<\/td><td>0<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">X position<\/a> of attack box, starting from far left of image. Positive integers move right, negative moves left. <\/td><\/tr><tr><td>attack.position.y <\/td><td>0<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">Y position<\/a> of attack box, starting from far top image. Positive integers move down, negative moves up.  <\/td><\/tr><tr><td>attack.reaction.fall.force<\/td><td>0<\/td><td>Amount deducted from target&#8217;s <em>knockdowncount<\/em>. If this value is 1+ and target&#8217;s  <em>knockdowncount<\/em> is 0, target is knocked down. Note the knock down check is made immediately after deduction, so if the target has a knockdowncount of 1 and is hit attack with <code>attack.reaction.fall.force 1<\/code>, the target falls.<br><br><strong>Note:<\/strong> Default <em>knockdowncount<\/em> is 0, so unless the target is set up with a specific <em>knockdowncount<\/em> or some other means to resist falling, setting this value to any causes knockdown.<\/td><\/tr><tr><td>attack.reaction.fall.velocity.x<\/td><td>1.2<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">X axis<\/a> toss velocity applied to target if attack knocks it down.<\/td><\/tr><tr><td>attack.reaction.fall.velocity.y<\/td><td>3.0<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">Y axis<\/a> toss velocity applied to target if attack knocks it down.<\/td><\/tr><tr><td>attack.reaction.fall.velocity.z<\/td><td>0.0<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">Z axis<\/a> toss velocity applied to target if attack knocks it down. <\/td><\/tr><tr><td>attack.reaction.freeze.mode<\/td><td>0<\/td><td>Freeze effect.<br><br>* 0 &#8211; No freeze effect.<br><br>* 1 &#8211; Target freezes in place.<\/td><\/tr><tr><td>attack.reaction.freeze.time<\/td><td>0<\/td><td>Time in centiseconds to maintain <code>attack.reaction.freeze.mode<\/code> effect. <\/td><\/tr><tr><td>attack.reaction.invincible.time<\/td><td>0<\/td><td>Time in centiseconds target is invincible to subsequent hits.<br><br><strong>Note:<\/strong> 0 is allowed and is the default property value. However, the engine will substitute a 0 value with 40 when applying the invincibility time. The legacy <em>fastattack<\/em> command works by setting this property to 10.<\/td><\/tr><tr><td>attack.reaction.pain.disable<\/td><td>0<\/td><td>If true, target does not play a reaction animation when hit by attack.<\/td><\/tr><tr><td>attack.reaction.pause.time<\/td><td>0<\/td><td>Time in centiseconds target and attacker pause (freeze) when attack hits.<\/td><\/tr><tr><td>attack.reaction.reposition.direction<\/td><td>None<\/td><td>Force target to face specific direction when attack hits.<br><br>* Left &#8211; Target faces left.<br><br>* Opposite &#8211; Target faces opposite direction of attacker.<br><br>* None &#8211; No direction adjustment.<br><br>* Same &#8211; Target faces same direction as attacker.<br><br>* Right &#8211; Target faces right.<br><br>* Toward &#8211; Face toward attacker position.<br><br>* Away &#8211; Face away from attacker position.<\/td><\/tr><tr><td>attack.reaction.reposition.distance<\/td><td>0<\/td><td>Horizontal distance between attacker and target when applying <code>attack.reaction.reposition.mode<\/code>.<\/td><\/tr><tr><td>attack.reaction.reposition.mode<\/td><td>0<\/td><td>Horizontal position adjustment when attack hits and does not knock down.<br><br>* 0 &#8211; None.<br><br>* 1 = Target moves to attacker.<br><br>* 2 = Target and attacker move to each other, splitting distance.<\/td><\/tr><tr><td>attack.seal.cost<\/td><td>0<\/td><td>If 1+, this is maximum allowed MP cost target for target specials. For example, if target is hit with seal 10, the target may only use specials that cost 10 MP or less each.<\/td><\/tr><tr><td>attack.seal.time <\/td><td>0<\/td><td>Time in centiseconds to apply <code>attack.seal.cost<\/code>. <\/td><\/tr><tr><td>attack.size.x<\/td><td>0<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">X size<\/a> in pixels, moving right from <code>attack.position.x<\/code>.<\/td><\/tr><tr><td>attack.size.y<\/td><td>0<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">Y size<\/a> in pixels, moving down from <code>attack.position.y<\/code>.<\/td><\/tr><tr><td>attack.size.z.background<\/td><td><em>grabdistance<\/em> setting \/ 3 + 1<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">Z size<\/a> in pixels, moving further from player&#8217;s viewpoint from entity position.<br><br><strong>Note:<\/strong> For legacy compatibility, it is impossible to set a 0 value using native text. If you do, it is replaced with the default value.<\/td><\/tr><tr><td>attack.size.z.foreground<\/td><td><em>grabdistance<\/em> setting \/ 3 + 1<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">Z size<\/a> in pixels, moving toward player&#8217;s viewpoint from entity position. <br><br><strong>Note:<\/strong> For legacy compatibility, it is impossible to set a 0 value using native text. If you do, it is replaced with the default value. <\/td><\/tr><tr><td>attack.staydown.rise.time<\/td><td>0<\/td><td> Time in centiseconds added to target&#8217;s <em>risetime<\/em> if knocked down.<\/td><\/tr><tr><td>attack.staydown.attack.time<\/td><td>0<\/td><td> Time in centiseconds before target can use its RISEATTACK animation if knocked down. <br><br><strong>Note:<\/strong> Normally, RISEATTACK is available immediately after a knockdown.<\/td><\/tr><tr><td>attack.tag<\/td><td>0<\/td><td> Creator defined integer ignored by engine logic. <span class=\"has-inline-color has-vivid-red-color\">Note: Subject to removal on completion of meta_data feature.<\/span> <\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Example<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Single<\/h4>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"272\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_2.png?resize=480%2C272&#038;ssl=1\" alt=\"\" class=\"wp-image-388\" srcset=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_2.png?w=480&amp;ssl=1 480w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_2.png?resize=300%2C170&amp;ssl=1 300w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_2.png?resize=150%2C85&amp;ssl=1 150w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/figure>\n\n\n\n<p>This example defines a single attack box that knocks down and does 10 points of damage, then closes the box on the subsequent frame. Notice only the necessary properties are defined. Order is irrelevant.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\nattack.position.x 58\nattack.position.y 90\nattack.size.x 92\nattack.size.y 25\nattack.reaction.fall.force 1\nattack.reaction.pause.time 10\nattack.damage.force 15\nattack.effect.hit.flash.model flash_fatal_fury\n\nframe data\/chars\/terry\/atk_j_side_kick_c_1.png\n\nattack none\n\nframe data\/chars\/terry\/atk_j_side_kick_c_1.png\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-1 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"491\" data-id=\"386\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_0.png?resize=640%2C491&#038;ssl=1\" alt=\"\" class=\"wp-image-386\" srcset=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_0.png?w=668&amp;ssl=1 668w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_0.png?resize=300%2C230&amp;ssl=1 300w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_0.png?resize=150%2C115&amp;ssl=1 150w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption class=\"wp-element-caption\">Position X and Y<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"483\" data-id=\"387\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_1.png?resize=640%2C483&#038;ssl=1\" alt=\"\" class=\"wp-image-387\" srcset=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_1.png?w=651&amp;ssl=1 651w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_1.png?resize=300%2C226&amp;ssl=1 300w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_1.png?resize=150%2C113&amp;ssl=1 150w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption class=\"wp-element-caption\">Size X and Y<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"272\" data-id=\"388\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_2.png?resize=480%2C272&#038;ssl=1\" alt=\"\" class=\"wp-image-388\" srcset=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_2.png?w=480&amp;ssl=1 480w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_2.png?resize=300%2C170&amp;ssl=1 300w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_2.png?resize=150%2C85&amp;ssl=1 150w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"272\" data-id=\"389\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_3.png?resize=480%2C272&#038;ssl=1\" alt=\"\" class=\"wp-image-389\" srcset=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_3.png?w=480&amp;ssl=1 480w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_3.png?resize=300%2C170&amp;ssl=1 300w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_3.png?resize=150%2C85&amp;ssl=1 150w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/figure>\n<\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Multiple<\/h4>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"200\" height=\"200\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_ryu_collision_atk_0-2.png?resize=200%2C200&#038;ssl=1\" alt=\"\" class=\"wp-image-404\" srcset=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_ryu_collision_atk_0-2.png?w=200&amp;ssl=1 200w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_ryu_collision_atk_0-2.png?resize=150%2C150&amp;ssl=1 150w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><\/figure>\n\n\n\n<p>This example takes advantage of multiple boxes to place a more accurate attack area around Ryu&#8217;s leg. The second box has an index of 1. Since we didn&#8217;t bother to define an index for the first box, it gets a default index of 0. Unless the target is really close, we want the contact area (and thus flash spawns) to be around Ryu&#8217;s foot, so we place that box first in order to give it priority. The attack definitions are otherwise identical to single boxes. On the following frame, we close both the attack boxes.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\nattack.damage.force 12\nattack.effect.hit.flash.model flash_fatal_fury\nattack.reaction.fall.force 1\nattack.reaction.pause.time 12\nattack.position.x 138\nattack.position.y 44\nattack.size.x 32\nattack.size.y 26\n\t\ncollision.index 1\n\nattack.damage.force 12\nattack.effect.hit.flash.model flash_fatal_fury\nattack.reaction.fall.force 1\nattack.reaction.pause.time 12\nattack.position.x 112\nattack.position.y 61\nattack.size.x 33\nattack.size.y 25\n\nframe\tdata\/chars\/ryu\/20_3.png\n\ncollision.index 0\nattack none\n\ncollision.index 1\nattack none\n\nframe   data\/chars\/ryu\/20_4.png\n\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"200\" height=\"200\" data-id=\"404\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_ryu_collision_atk_0-2.png?resize=200%2C200&#038;ssl=1\" alt=\"\" class=\"wp-image-404\" srcset=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_ryu_collision_atk_0-2.png?w=200&amp;ssl=1 200w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_ryu_collision_atk_0-2.png?resize=150%2C150&amp;ssl=1 150w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"200\" height=\"200\" data-id=\"403\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_ryu_collision_atk_1-1.png?resize=200%2C200&#038;ssl=1\" alt=\"\" class=\"wp-image-403\" srcset=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_ryu_collision_atk_1-1.png?w=200&amp;ssl=1 200w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_ryu_collision_atk_1-1.png?resize=150%2C150&amp;ssl=1 150w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><\/figure>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Body<\/h2>\n\n\n\n<p>Body boxes detect incoming attacks. If an entity doesn&#8217;t have a body box on a given frame, it can&#8217;t detect attacks and is effectively invincible from conventional hits. Defining a body box is nearly identical to attack boxes, except body boxes are far simpler as they have fewer properties. <\/p>\n\n\n\n<p>To end a body box, add <code>bbox 0<\/code> or <code>bbox none<\/code> before a frame.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th>Command<\/th><th>Default<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>bbox.effect.hit.flash.layer.adjust<\/td><td>0<\/td><td>Added to global layer adjustment of flash spawn drawing layer. See <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/hit-effects-flash\/\" data-type=\"post\" data-id=\"833\">Hit Effects<\/a>.<\/td><\/tr><tr><td>bbox.effect.hit.flash.layer.source<\/td><td>0<\/td><td>Added to global hit flash layer source value for controlling source of flash spawn drawing layer. See <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/hit-effects-flash\/\">Hit Effects<\/a>. <\/td><\/tr><tr><td>bbox.defense<\/td><td>None<\/td><td>At time of writing, no function. This is a feature in progress that will allow setting up defense properties for individual body boxes.<\/td><\/tr><tr><td>bbox.meta_data<\/td><td>None<\/td><td>At time of writing, no function. This is an in progress feature to allow unlimited storage of creator defined data.<\/td><\/tr><tr><td>bbox.meta_tag<\/td><td>0<\/td><td>Creator defined integer ignored by engine logic. <span class=\"has-inline-color has-vivid-red-color\">Note: Subject to removal on completion of meta_data feature.<\/span><\/td><\/tr><tr><td>bbox.position.x<\/td><td>0<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">X position<\/a> of body box, starting from far left of image. Positive integers move right, negative moves left.  <\/td><\/tr><tr><td>bbox.position.y<\/td><td>0<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">Y position<\/a> of body box, starting from top of image.  Positive integers move down, negative moves up.<\/td><\/tr><tr><td>bbox.size.x<\/td><td>0<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">X size<\/a> in pixels, moving right from <code>body.position.x<\/code>. <\/td><\/tr><tr><td>bbox.size.y<\/td><td>0<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">Y size<\/a> in pixels, moving down from <code>body.position.y<\/code>  <\/td><\/tr><tr><td>bbox.size.z.background<\/td><td>0<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">Z size<\/a> in pixels, moving further from player&#8217;s viewpoint from entity position. <\/td><\/tr><tr><td>bbox.size.z.foreground <\/td><td>0<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">Z size<\/a> in pixels, moving toward player&#8217;s viewpoint from entity position. <\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Example<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Single<\/h4>\n\n\n\n<p>This example defines a single body box to detect hits.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\nbbox.position.x\t66\nbbox.position.y 49\nbbox.size.x\t38\nbbox.size.y\t98\n<\/pre><\/div>\n\n\n<h4 class=\"wp-block-heading\">Multiple<\/h4>\n\n\n\n<p>This example takes advantage of multiple boxes to place a more accurate hit area area area around Ryu. The second box has an index of 1, and the third an index of 2. Since we didn&#8217;t bother to define an index for the first box, it gets a default index of 0. Unless the target is really close, we want the contact area (and thus flash spawns) to be around Ryu&#8217;s head, then body, so we place the boxes in order from head to feet to give higher areas priority. The body definitions are otherwise identical to single boxes. <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\nbbox.position.x\t78\nbbox.position.y 48\nbbox.size.x\t25\nbbox.size.y\t21\n\ncollision.index 1\n\nbbox.position.x\t67\nbbox.position.y 57\nbbox.size.x\t35 \nbbox.size.y\t51\n\ncollision.index 2\n\nbbox.position.x\t62\nbbox.position.y 103\nbbox.size.x\t47 \nbbox.size.y\t46\n\nframe\tdata\/chars\/ryu\/idle_0.png\n\ncollision.index 0\nbbox none\n\ncollision.index 1\nbbox none\n\nframe\tdata\/chars\/ryu\/idle_1.png\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"OpenBOR - Testing Multiple Collision Boxes Per Frame\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/dhRgCBqd_RY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Advanced<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Hit Placement<\/h3>\n\n\n\n<p>Each time a collision occurs, OpenBOR records the location and several other data points into a structure called lasthit. This is then used for items like the native flash effects. Lasthit is available as a system variable and as local vars in didhit and takedamage scripts.<\/p>\n\n\n\n<p>Hit location is the calculated center point where the respective collision boxes overlap on each <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/axis\/\" data-type=\"post\" data-id=\"59\">Axis<\/a>. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"430\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2023\/02\/collision_example_3D_0.png?resize=640%2C430&#038;ssl=1\" alt=\"\" class=\"wp-image-853\" srcset=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2023\/02\/collision_example_3D_0.png?w=733&amp;ssl=1 733w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2023\/02\/collision_example_3D_0.png?resize=300%2C201&amp;ssl=1 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Legacy Attack<\/h3>\n\n\n\n<p>Legacy attack boxes use a single attack command with multiple parameters. Additional parameters are available through separate commands we call &#8220;Supplements&#8221;. <\/p>\n\n\n\n<p><strong>Note:<\/strong> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Legacy attack commands are depreciated and will not receive further updates.<\/mark>It is highly recommended any new projects utilize the current attack box commands.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Base commands<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">Attack<\/h5>\n\n\n\n<p>Default legacy attack box. Other than <strong>{#}<\/strong>, you cannot omit an optional parameter and use any other parameters rightward. For example, if you want to include a <strong>{pausetime}<\/strong> value, you must also include <strong>{power}<\/strong>, <strong>{block}<\/strong>, and <strong>{noflash}<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>attack{#} {x} {y} {right} {down} {damage} {power} {block} {noflash} {pausetime} {z}<\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>{#}<\/strong> &#8211; See <code>attack.damage.type<\/code> (numbers only). <strong>{#}<\/strong> is part of the command name, no spaces. As an example, if you wanted an attack type 2, you would write <code>attack2 {x} {y} ...<\/code>. Optional. If omitted, defaults to 1.<\/li>\n\n\n\n<li><strong>{x}<\/strong> &#8211; See <code>attack.position.x<\/code>.<\/li>\n\n\n\n<li><strong>{y}<\/strong> &#8211; See <code>attack.position.y<\/code>. <\/li>\n\n\n\n<li><strong>{right}<\/strong> &#8211; See <code>attack.size.x<\/code>.<\/li>\n\n\n\n<li><strong>{down}<\/strong> &#8211; See <code>attack.size.y<\/code>.<\/li>\n\n\n\n<li><strong>{damage}<\/strong> &#8211; See <code>attack.damage.force<\/code>.<\/li>\n\n\n\n<li><strong>{power}<\/strong> &#8211; Optional. See <code>attack.reaction.fall.force<\/code>.<\/li>\n\n\n\n<li><strong>{block}<\/strong> &#8211; Optional. See <code>attack.block.penetrate<\/code>.<\/li>\n\n\n\n<li><strong>{noflash}<\/strong> &#8211; Optional. See <code>attack.effect.hit.flash.disable<\/code>.<\/li>\n\n\n\n<li><strong>{pausetime}<\/strong> &#8211; Optional. See <code>attack.reaction.pause.time<\/code>.<\/li>\n\n\n\n<li><strong>{z}<\/strong> &#8211; Optional. See <code>attack.size.z.1<\/code> and  <code>attack.size.z.2<\/code>. Legacy Z affects both directions.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Blast<\/h5>\n\n\n\n<p>Same as <strong>Attack<\/strong> other than following:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>blast {x} {y} {right} {down} {damage} {block} {noflash} {pausetime} {z}<\/strong> <\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>attack.damage.type<\/code> = Blast. Note blast type does nothing on its own and defaults to type 1 reactions.<\/li>\n\n\n\n<li><code>attack.reaction.fall.force<\/code> = 1.<\/li>\n\n\n\n<li><code>attack.reaction.fall.velocity.x<\/code> = is 2.083.<\/li>\n\n\n\n<li><code>attack.damage.mode<\/code> = 1.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Burn<\/h5>\n\n\n\n<p>Same as <strong>Attack<\/strong> other than the following:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>Burn {x} {y} {right} {down} {damage} {knockdown} {block} {noflash} {pausetime} {z}<\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>attack.damage.type<\/code> = Burn.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">shock<\/h5>\n\n\n\n<p>Same as <strong>attack#<\/strong> other than the following:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>shock {x} {y} {right} {down} {damage} {knockdown} {block} {noflash} {pausettime} {z} <\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>attack.damage.type<\/code> = Shock.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Freeze<\/h5>\n\n\n\n<p>Same as <strong>Attack<\/strong> other than the following:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>freeze {x} {y} {right} {down} {damage} {time} {block} {noflash} {pausetime} {z} <\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>attack.damage.type<\/code> = Freeze. Note freeze type does nothing on its own and defaults to type 1 reactions.<\/li>\n\n\n\n<li><code>attack.reaction.freeze.mode<\/code> = 1.<\/li>\n\n\n\n<li><strong>{time}<\/strong> &#8211; See <code>attack.reaction.freeze.time<\/code>.<\/li>\n\n\n\n<li><code>attack.map.index<\/code> = 1.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Steal<\/h5>\n\n\n\n<p>Same as <strong>Attack<\/strong> other than the following:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>steal {x} {y} {right} {down} {damage} {knockdown} {block} {noflash} {pausetime} {z}<\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>attack.damage.type<\/code> = Steal. Note steal type does nothing on its own and defaults to type 1 reactions.<\/li>\n\n\n\n<li><code>attack.damage.steal<\/code> = 1.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Supplements<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">grabin<\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>grabin {type} {distance}<\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>{type}<\/strong> &#8211; See <code>attack.reposition.mode<\/code>.<\/li>\n\n\n\n<li><strong>{distance}<\/strong> &#8211; See <code>attack.reposition.distance<\/code>.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Fastattack 1<\/h5>\n\n\n\n<p>When enabled, applies a static value of <code>attack.reaction.invincible.time 10<\/code>.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Forcedirection<\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>forcedirection {dir}<\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>{dir}<\/strong> &#8211; See <code>attack.reposition.direction<\/code>.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Damageonlanding<\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>damageonlanding {value} {type} <\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>{value}<\/strong> &#8211;  See <code>attack.damage.land.force<\/code>.<\/li>\n\n\n\n<li><strong>{type}<\/strong> &#8211;  See <code>attack.damage.land.mode<\/code>.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Dropv<\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>dropv {height} {speedx} {speedz}<\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>{height}<\/strong> &#8211;  See <code>attack.reaction.fall.velocity.y<\/code>.<\/li>\n\n\n\n<li><strong>{speedx}<\/strong> &#8211;  See <code>attack.reaction.fall.velocity.x<\/code>. <\/li>\n\n\n\n<li><strong>{speedz}<\/strong> &#8211;  See <code>attack.reaction.fall.velocity.z<\/code>. <\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Nokill<\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>nokill {bool}<\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>{bool}<\/strong> &#8211; See <code>attack.damage.lethal.disable<\/code>.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">stun {int}<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>{<strong>int}<\/strong> &#8211; See <code>attack.reaction.freeze.mode<\/code>. <\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Seal<\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>seal {time} {energy} <\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>{time}<\/strong> &#8211; See <code>attack.seal.time<\/code>.<\/li>\n\n\n\n<li><strong>{energy}<\/strong> &#8211;  See <code>attack.seal.cost<\/code>. <\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Forcemap<\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>forcemap {map} {time} <\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>{map}<\/strong> &#8211; See <code>attack.map.index<\/code>.<\/li>\n\n\n\n<li><strong>{time}<\/strong> &#8211; See <code>attack.map.time<\/code>. <\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Noreflect<\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>noreflect {bi}<\/strong> <\/pre>\n\n\n\n<p><strong>{bi}<\/strong> &#8211; See <code>attack.reaction.pain.disable<\/code>.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Jugglecost<\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>jugglecost {int} <\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This command limits juggling ability of the attackbox.<\/li>\n\n\n\n<li>Juggling means attacking falling opponents (assuming they are vulnerable while falling). It doesn\u2019t matter if the attackbox knocks down or not cause juggling always knock down opponent.<\/li>\n\n\n\n<li>This command is used in conjunction with \u2018jugglepoints\u2019 (see Header Data above).<\/li>\n\n\n\n<li>The command works like this:\n<ul class=\"wp-block-list\">\n<li>If attackbox hits opponent whose \u2018jugglepoints\u2019 is higher than or equal with \u2018jugglecost\u2019, the attack will connect. At this condition, opponent\u2019s \u2018jugglepoints\u2019 will be subtracted by that \u2018jugglecost\u2019. This drops \u2018jugglepoints\u2019 which limits juggling ability. If attackbox hits opponent whose \u2018jugglepoints\u2019 is lower than \u2018jugglecost\u2019, the attack will not connect. At this condition, opponent\u2019s \u2018jugglepoints\u2019 will remain the same.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">OTG<\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>OTG {bi}<\/strong><\/pre>\n\n\n\n<p><strong>{bi}<\/strong> &#8211; See <code>attack.ground.mode<\/code>. <\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Guardcost<\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\"><code><strong>guardcost {int}<\/strong> <\/code><\/pre>\n\n\n\n<p><strong>{int}<\/strong> &#8211; See <code>attack.block.cost<\/code>. <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Defines how much \u2018guardpoints\u2019 will be subtracted from opponent if they block this attack.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">DOT<\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><code>DOT {Index} {Time} {Mode} {Force} {Rate} <\/code><\/strong><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>{index}<\/strong> &#8211; See <code>attack.damage.recursive.index<\/code>.<\/li>\n\n\n\n<li><strong>{time}<\/strong> &#8211; See <code>attack.damage.recursive.time<\/code>.<\/li>\n\n\n\n<li><strong>{mode}<\/strong> &#8211; See <code>attack.damage.recursive.mode<\/code>.<\/li>\n\n\n\n<li><strong>{force}<\/strong> &#8211; See <code>attack.damage.recursive.force<\/code>.<\/li>\n\n\n\n<li><strong>{rate}<\/strong> &#8211; See <code>attack.damage.recursive.rate<\/code>.  <\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Staydown<\/h5>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong><code>staydown {rise} {riseattack} <\/code><\/strong><\/pre>\n\n\n\n<p><strong>{rise}<\/strong> &#8211; See <code>attack.staydown.rise.time<\/code>. <\/p>\n\n\n\n<p><strong>{riseattack}<\/strong> &#8211; See <code>attack.staydown.attack.time<\/code>.  <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Legacy Body<\/h2>\n\n\n\n<p>Legacy body box commands are nearly identical to legacy attack box commands in format. <\/p>\n\n\n\n<p><strong>Note:<\/strong> As with legacy attack commands,<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">legacy body commands are depreciated and will not receive further updates.<\/mark>It is highly recommended any new projects utilize the current body box commands.<\/p>\n\n\n\n<p><strong>body {x} {y} {width} {height} {depth back} {depth front}<\/strong> <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>{x}<\/strong> &#8211; See <code>body.position.x<\/code>.<\/li>\n\n\n\n<li><strong>{y}<\/strong> &#8211; See <code>body.position.y<\/code>. <\/li>\n\n\n\n<li><strong>{width}<\/strong> &#8211; See <code>body.size.x<\/code>.<\/li>\n\n\n\n<li><strong>{height}<\/strong> &#8211; See <code>body.size.y<\/code>.<\/li>\n\n\n\n<li><strong>{depth back}<\/strong> &#8211; See <code>body.size.depth.back<\/code>.<\/li>\n\n\n\n<li><strong>{depth front}<\/strong> &#8211; See <code>body.size.depth.front<\/code>. If omitted, <strong>{depth back}<\/strong> sets depth in both directions.<\/li>\n<\/ul>\n\n\n\n<p><strong>bboxz<\/strong> <strong>{depth back} {depth front}<\/strong> &#8211; See <code>body.size.depth.back<\/code> and <code>body.size.depth.front<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Setting up hit detection.<\/p>\n","protected":false},"author":1,"featured_media":386,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[30,328,2],"tags":[246,244,247,245,5],"class_list":["post-366","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-game-mechanics","category-openbor","category-script","tag-attack-box","tag-attack-2","tag-body-box","tag-collision","tag-manual"],"revision_note":"","jetpack_featured_media_url":"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/08\/fatal_fury_terry_collision_atk_0.png?fit=668%2C513&ssl=1&wsr","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/posts\/366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/comments?post=366"}],"version-history":[{"count":5,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/posts\/366\/revisions"}],"predecessor-version":[{"id":1360,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/posts\/366\/revisions\/1360"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/media\/386"}],"wp:attachment":[{"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/media?parent=366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/categories?post=366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/tags?post=366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}