{"id":76,"date":"2021-07-21T14:08:48","date_gmt":"2021-07-21T19:08:48","guid":{"rendered":"https:\/\/chronocrash.com\/obor\/wiki\/?p=76"},"modified":"2024-01-08T22:41:10","modified_gmt":"2024-01-09T03:41:10","slug":"blocking","status":"publish","type":"post","link":"https:\/\/chronocrash.com\/obor\/wiki\/blocking\/","title":{"rendered":"Blocking"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">OpenBOR supports a robust native blocking system, utilizing the following animations and properties.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Animations<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Animations played in response to blocking commands and conditions. All blocking animations are optional unless noted otherwise.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Block<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"90\" height=\"111\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/07\/sf3_ken_block_0.png?resize=90%2C111&#038;ssl=1\" alt=\"\" class=\"wp-image-186\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Basic blocking animation. Required for blocking.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n anim block\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">By default, this animation enables blocking. AI controlled entities in idle state randomly block attacks on impact (see <a href=\"#block_odds\" data-type=\"internal\" data-id=\"#block_odds\">Block Odds<\/a>), and play the Block animation in response. Players assume the Block animation and a blocking state by pressing the Special key, and return to idle when the Block animation completes. Note this replaces the Special animation, but you may remap the Special animation to Attack + Jump (see <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/control_commands\/\" data-type=\"URL\" data-id=\"https:\/\/chronocrash.com\/obor\/wiki\/control_commands\/\">Controls<\/a>). <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While in blocking state, all frontal attacks are nullified. By default entities cannot block attacks from behind. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">See <a href=\"#Configuration\" data-type=\"internal\" data-id=\"#Configuration\">Configuration<\/a> to customize blocking behaviors.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">BlockPain<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"90\" height=\"111\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/07\/sf3_ken_block_impact_0.gif?resize=90%2C111&#038;ssl=1\" alt=\"\" class=\"wp-image-187\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Block impact animation.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nanim blockpain\n\nanim blockpain2\n\nanim blockpain3\n\n...\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">If available, Blockpain plays when an attack makes contact while blocking. If there is a Blockpain# to match the incoming attack#, that Blockpain will play. For example, if an entity with Blockpain3 blocks an attack with type 3, Blockpain3 plays. If there is no Blockpain# to match, Blockpain plays instead.<br><br>During any Blockpain animation, the entity is in a blocking state. If an attack hits while still in Blockpain, the entity will transition to another appropriate Blockpain, or restart the same Blockpain as necessary using the same logic as above.<br><br><strong>Tip:<\/strong> Don\u2019t let the name \u201cblockpain\u201d fool you, this is not a pain animation. These animations are designed to give a block more visual appeal by animating the entity absorbing the force of a blow with their guard.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Blockrelease<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"90\" height=\"114\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/07\/sf3_ken_block_inout_0.gif?resize=90%2C114&#038;ssl=1\" alt=\"\" class=\"wp-image-185\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Transition out of block.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nanim blockrelease\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Plays when blocking voluntarily ceases (Ex: Player releases the Block command) before the entity returns to idle. During Blockrelease the entity is in a blocking state. If an attack hits while still in Blockrelease the entity will instantly transition to Block animation, or an appropriate Blockpain if available, then back to Blockrelease.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Tip:<\/strong> Just like many one on one fighting games, a long enough Blockrelease and\/or fast enough string of attacks could potentially trap the entity in a blocking state until the string is complete or interrupted some way.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Blockstart<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"90\" height=\"114\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2023\/12\/sf3_ken_block_inout_0.gif?resize=90%2C114&#038;ssl=1\" alt=\"\" class=\"wp-image-1259\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Transition to block.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nanim blockstart\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Transition animation that plays when blocking is first initiated. When Blockstart completes, the Block animation plays. During Blockstart the entity is in a blocking state. If an attack hits while still in Blockstart the entity will instantly transition to Block animation, or an appropriate Blockpain if available.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Chipdeath<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"182\" height=\"122\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/07\/Chipdeath-01.gif?resize=182%2C122&#038;ssl=1\" alt=\"\" class=\"wp-image-77\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Death from chip damage.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nanim chipdeath\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Plays when entity loses its remaining hitpoints via block damage. By default entities do not take block damage, but you can enable block damage with various global and model properties.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Guardbreak<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"95\" height=\"131\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/07\/cvs2_ryu_block_break_0-1.gif?resize=95%2C131&#038;ssl=1\" alt=\"\" class=\"wp-image-189\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Optional guard break animation.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nanim guardbreak\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Optional guard break animation that works with blocking entity&#8217;s <a href=\"#Guard_Points\" data-type=\"internal\" data-id=\"#Guard_Points\">guard points<\/a> and incoming attack&#8217;s guard cost attack parameters. If a blocked attack&#8217;s guard cost exceeds blocking entity&#8217;s guard points, the blocking entity plays GUARDBREAK if available and loses its blocking state.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configuration<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Global<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">These properties are placed in Models.txt and affect the entire module. You may want to consider looking at Defense properties and other individual model settings if you want more nuanced control.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Block Ratio<\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nblockratio {int}\n\n# Default\nblockratio 0\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Enables chip damage when blocking attacks.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>0<\/code>: Use defense blockratio.<\/li>\n\n\n\n<li><code>1<\/code>: Blocked attacks cause 0.25 their normal damage.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">MP Block<\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nmpblock {int}\n\n# Default\nmpblock 0\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Controls which resource chip damage affects.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>0<\/code>: Damage affects Hitpoints only.<\/li>\n\n\n\n<li><code>1<\/code>: Damage affects MP first. If MP is insufficient, remainder applies to Hitpoints.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">No Chip Death<\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nnochipdeath {int}\n\n# Default\nnochipdeath 0\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Disable death from chip damage.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>0<\/code>: Chip damage is lethal. <\/li>\n\n\n\n<li><code>1<\/code>: Chip damage cannot reduce Hitpoints below 1.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Model<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">These properties are part of a single model&#8217;s text file.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Block Configuration<\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nblock_config &amp;lt;flags&gt;\n\n# Default (players)\nblock_config active\n\n# Default (all other types)\nblock_config none\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Basic blocking set up. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Accepts one or more of the following flags.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>none<\/code> &#8211; No blocking config. No effect if any other flags are included.<\/li>\n\n\n\n<li><code>active<\/code> &#8211; Enables more human like blocking behavior, meaning AI controlled entities can &#8220;anticipate&#8221; incoming attacks and also attempt to maintain a block across multiple successive hits. AI controlled entities without active blocking only block attacks on impact, and treat each impact separately when calculating odds to block. AI controlled entities with active blocking will block under the following conditions: \n<ul class=\"wp-block-list\">\n<li>There is a hostile target within range of entity&#8217;s Block animation. Current opponent is checked first. If entity doesn&#8217;t have an opponent or its current opponent is out of range, then the first hostile entity (if any) within range is used.<\/li>\n\n\n\n<li>Target is actively attacking.<\/li>\n\n\n\n<li>Blocking chance passes (same chances as passive blocking).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><code>back<\/code> &#8211; Entity can block attacks from behind.<\/li>\n\n\n\n<li><code>disabled<\/code> &#8211; Entity cannot block at all. <\/li>\n\n\n\n<li><code>hold_impact<\/code> &#8211; Players can hold block button to keep blocking until an attack impacts.<\/li>\n\n\n\n<li><code>hold_infinite<\/code> &#8211; Players can hold block button to keep blocking indefinitely.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Script<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Block configuration is an integer property with the following bitmask constants.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>openborconstant(\"BLOCK_CONFIG_NONE\")<\/code><\/li>\n\n\n\n<li><code>openborconstant(\"BLOCK_CONFIG_ACTIVE\")<\/code><\/li>\n\n\n\n<li><code>openborconstant(\"BLOCK_CONFIG_BACK\")<\/code><\/li>\n\n\n\n<li><code>openborconstant(\"BLOCK_CONFIG_DISABLED\")<\/code><\/li>\n\n\n\n<li><code>openborconstant(\"BLOCK_CONFIG_HOLD_IMPACT\")<\/code><\/li>\n\n\n\n<li><code>openborconstant(\"BLOCK_CONFIG_HOLD_INFINITE\")<\/code><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Blocking Odds <\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nblockoods {int}\n\n# Default\nblockodds 0\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Chance for AI controlled entity to block an attack. <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>0 &#8211; Entity will block 100% of incoming attacks.<\/li>\n\n\n\n<li>100+ &#8211; Entity blocks rarely, if at all.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Don&#8217;t be misled by &#8220;100%&#8221;. Without script, AI controlled entities still follow the same rules players do. In other words they can only block when in an idle state. This property has no effect on player controlled entities.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Block Pain<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nblockpain {int}\n\n# Default\nblockpain 0\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Threshold to use a Blockpain animation. Incoming attack damage must meet or exceed blockpain value, or the entity will not play a Blockpain animation on impact.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Guard Points<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nguardpoints {int}\n\n# Default\nguardpoints 0\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Guard crushing. If this is any non 0 value, the entity becomes susceptible to guard crushing. Each time the entity blocks an attack, its guard points are reduced by the attack&#8217;s guard cost property. If the attack&#8217;s guard cost exceeds current guard points, entity plays its <a href=\"#Guardbreak\" data-type=\"internal\" data-id=\"#Guardbreak\">Guard Break<\/a> animation (if available). During this time the entity is considered to be in a pain state.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Guard points recover over time. See Guard Rate.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Guard Rate<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nguardrate {int}\n\n# Default\nguardrate 2\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Guard points recovery. This amount (or * 0.5 amount when blocking) is added to guard points every 200 centiseconds.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Threshold<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nthold {int}\n\n# Default\nthold 0\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Added to entity&#8217;s <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/damage-mitigation\/#Defense\" data-type=\"URL\" data-id=\"https:\/\/chronocrash.com\/obor\/wiki\/damage-mitigation\/#Defense\">defense.block.threshold<\/a> (if any) when hit by an attack. If the combined result is any value other than <code>0<\/code> and less than final damage (after attacker&#8217;s offense and target&#8217;s defense factors apply), target cannot block attack.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Blocking animation and property basics.<\/p>\n","protected":false},"author":1,"featured_media":186,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[8,30,328],"tags":[51,61,52,58,53,54,55,56,57,59,60,62],"class_list":["post-76","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-animation","category-game-mechanics","category-openbor","tag-block","tag-blockodds","tag-blockpain","tag-blockratio","tag-blockrelease","tag-blockstart","tag-chipdeath","tag-guardbreak","tag-holdblock","tag-mpblock","tag-nochipdeath","tag-nopassiveblock"],"revision_note":"","jetpack_featured_media_url":"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/07\/sf3_ken_block_0.png?fit=90%2C111&ssl=1&wsr","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/posts\/76","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=76"}],"version-history":[{"count":5,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/posts\/76\/revisions"}],"predecessor-version":[{"id":1387,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/posts\/76\/revisions\/1387"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/media\/186"}],"wp:attachment":[{"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/media?parent=76"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/categories?post=76"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/tags?post=76"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}