{"id":44,"date":"2021-07-20T23:24:28","date_gmt":"2021-07-21T04:24:28","guid":{"rendered":"https:\/\/chronocrash.com\/obor\/wiki\/?p=44"},"modified":"2023-12-27T23:33:25","modified_gmt":"2023-12-28T04:33:25","slug":"animations-overview","status":"publish","type":"post","link":"https:\/\/chronocrash.com\/obor\/wiki\/animations-overview\/","title":{"rendered":"Animations"},"content":{"rendered":"\n<p>Animations are predefined sequences of frames played with timing to produce the illusion of motion or action. OpenBOR uses animations as the basic framework of a model. Most in game actions are part of or require an animation.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Syntax<\/h1>\n\n\n\n<p>Unless otherwise noted defining an animation always consists of <code>anim<\/code> followed by the animation name. Individual frames are defined with the <code>frame<\/code> command followed by path to an image file. <code>Offset<\/code> controls the image placement in relation to entity position for a frame, and <code>delay<\/code> determines how long (in centiseconds) a frame stays on-screen. See the following example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">anim idle\n\n     offset 100 200\n\n     delay 10\n\n     frame data\/chars\/some_guy\/idle_0.png\n     frame data\/chars\/some_guy\/idle_1.png\n     frame data\/chars\/some_guy\/idle_2.png\n\n<\/pre>\n\n\n\n<p><strong>Tip:<\/strong> You can use a different offset for each frame, but you should avoid doing so. OpenBOR auto trims images on load, so it&#8217;s beneficial to select a uniform image size and use one offset. Don&#8217;t ever use offsets to simulate movement, there are specific functions and settings for that elsewhere.<\/p>\n\n\n\n<p>From this foundation, OpenBOR supports dozens of properties and commands to manipulate the behavior of a given animation, determine when it will play, and so on. One example might be an attack box to hit and damage other entities, and a body box that detects the incoming hits.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Script Access<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">IDs<\/h2>\n\n\n\n<p>Each animation has a unique identifier acessible through openborconstant(). Unless noted otherwise, the animation constant is always ANI_&lt;ANIMATION_NAME&gt;. See the following example script:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; highlight: [3]; title: ; notranslate\" title=\"\">\nint current_animation = get_entity_property(&quot;animation_id&quot;);\n\nif(current_animation == openborconstant(&quot;ANI_JUMP&quot;))\n{\n     log(&quot;\\n I&#039;m jumping!&quot;);\n}\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Properties<\/h2>\n\n\n\n<p>Animation properties are attributes possessed by animations, such as number of frames, collision boxes, cancel points, and so on. Animation properties are accessible through the <code>get_animation_property()<\/code> and <code>set_animation_property()<\/code> functions.<\/p>\n\n\n\n<p><strong>Animations Vs. Frames:<\/strong> It would be logical to assume each animation has a set of frames with associated frame properties, but in actuality there is no such thing as a distinct frame collection in OpenBOR. Instead, any animation property specific to individual frames has an array of its own.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Use Cases<\/h3>\n\n\n\n<p>Get a property value. Properties and their behavior can vary wildly &#8211; see the property list for details.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n mixed x = get_animation_property(void &lt;animation handle&gt;, char &lt;identifier&gt;);\n<\/pre><\/div>\n\n\n<p>Modify a property value. Some properties are read only &#8211; see the property list for details.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\nmixed x = &lt;value&gt;\n\nset_animation_property(void &lt;animation handle&gt;, char &lt;identifier&gt;, x);\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">List<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Name: The identifier used to access property through script.<\/li><li>Type: The property value&#8217;s variable type.<\/li><li>Description: A short description of what the property is and does.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><th>Name<\/th><th><a href=\"http:\/\/www.chronocrash.com\/apps\/wiki\/obor\/index.php?title=Variables#Type\">Type<\/a><\/th><th>Read Only<\/th><th>Description<\/th><\/tr><tr><td>attack_one<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Binary<\/a><\/td><td><\/td><td>When TRUE, attack boxes only act on the first detected collision. Default TRUE for grab attacks, FALSE for all others.<\/td><\/tr><tr><td>bounce_factor<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Float<\/a><\/td><td><\/td><td>When entity lands from knockdown effect, its falling Y velocity is divided by this value, then applied as a new Y velocity to give a bounce effect. Default is <code>openborconstant(\"ANIMATION_BOUNCE_FACTOR_DEFAULT\")<\/code> (4 as of 2019-11-18).<\/td><\/tr><tr><td>cancel<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Enable canceling the animation with a special command. This flag is only modified by the engine as a model loads, so you can freely use it to enable or disable cancel ability on a given animation. <code>openborconstant(\"ANIMATION_CANCEL_DISABLED\")<\/code> &#8211; Default value. Cancels are not available. <code>openborconstant(\"ANIMATION_CANCEL_ENABLED\")<\/code> &#8211; Cancels are enabled. This value is set when a cancel command is encountered while the model loads.<\/td><\/tr><tr><td>charge_time<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Value (in approximate real time seconds) player must hold attack command button before releasing it will trigger this animation. By default this property only affects <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/attack-animation\/\" data-type=\"post\" data-id=\"23\">CHARGEATTACK<\/a> (or the final series attack if <a href=\"http:\/\/www.chronocrash.com\/apps\/wiki\/obor\/index.php?title=ANI_CHARGEATTACK&amp;action=edit&amp;redlink=1\">CHARGEATTACK<\/a> is not available) since those are the only animations natively mapped to a hold and release command. Its default value is <code>openborconstant(\"ANIMATION_CHARGE_TIME_DEFAULT\")<\/code><\/td><\/tr><tr><td>counter_action_condition<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>If entity takes a hit during this animation, the following conditions are verified. If all conditions are met, the entity will immediately switch to a follow animation (see follow_up_animation_select). Logic is bitwise. It is possible to set contradictory flags if you aren&#8217;t careful, so pay attention when setting up conditions. If a condition is not specifically flagged, it simply isn&#8217;t evaluated. For example, if you don&#8217;t set a condition for freeze, then a counter can take place whether or not the attack has a freeze effect. <code>openborconstant(\"COUNTER_ACTION_CONDITION_NONE\")<\/code> &#8211; Blank condition. If there are no conditions at all, counters are not executed. <code>openborconstant(\"COUNTER_ACTION_CONDITION_ANY\")<\/code> &#8211; Always execute counter. Overrides all other conditions. <code>openborconstant(\"COUNTER_ACTION_CONDITION_BACK_FALSE\")<\/code> &#8211; Attack must hit entity head on. <code>openborconstant(\"COUNTER_ACTION_CONDITION_BACK_TRUE\")<\/code> &#8211; Attack must hit entity from behind. <code>openborconstant(\"COUNTER_ACTION_CONDITION_BLOCK_FALSE\")<\/code> &#8211; Attack must be unblockable. <code>openborconstant(\"COUNTER_ACTION_CONDITION_BLOCK_TRUE\")<\/code> &#8211; Attack must be blockable. <code>openborconstant(\"COUNTER_ACTION_CONDITION_DAMAGE_LETHAL_FALSE\")<\/code> &#8211; Attack force must be insufficient to KO entity. <code>openborconstant(\"COUNTER_ACTION_CONDITION_DAMAGE_LETHAL_TRUE\")<\/code> &#8211; Attack force must be sufficient to KO entity (note entity will not be KO&#8217;d if the counter triggers). <code>openborconstant(\"COUNTER_ACTION_CONDITION_FREEZE_FALSE\")<\/code> &#8211; Attack does not have freeze effect. <code>openborconstant(\"COUNTER_ACTION_CONDITION_FREEZE_TRUE\")<\/code> &#8211; Attack does have freeze effect. <code>openborconstant(\"COUNTER_ACTION_CONDITION_HOSTILE_ATTACKER_FALSE\")<\/code> &#8211; Attacker must be benign toward entity. <code>openborconstant(\"COUNTER_ACTION_CONDITION_HOSTILE_ATTACKER_TRUE\")<\/code> &#8211; Attacker must be hostile toward entity. <code>openborconstant(\"COUNTER_ACTION_CONDITION_HOSTILE_TARGET_FALSE\")<\/code> &#8211; Entity must be benign toward attacker. <code>openborconstant(\"COUNTER_ACTION_CONDITION_HOSTILE_TARGET_TRUE\")<\/code> &#8211; Entity must be hostile toward attacker.<\/td><\/tr><tr><td>counter_action_frame_max<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>The last frame of an animation when the entity can perform a counter action.<\/td><\/tr><tr><td>counter_action_frame_min<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>The first frame of an animation when the entity can perform a counter action.<\/td><\/tr><tr><td>counter_action_take_damage<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Controls how entity takes damage when a counter action is performed. <code>openborconstant(\"COUNTER_ACTION_TAKE_DAMAGE_NONE\")<\/code> &#8211; Incoming damage is fully negated. <code>openborconstant(\"COUNTER_ACTION_TAKE_DAMAGE_NORMAL\")<\/code> &#8211; Entity takes damage (normal damage mitigations still apply), but cannot be reduced below 1 hit-point.<\/td><\/tr><tr><td>drop_frame<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>If set, when entity reaches apex of jump or fall, the animation will skip forward to this frame. If already at or passed this frame, no action is taken. Use <code>openborconstant(\"FRAME_NONE\")<\/code> to disable.<\/td><\/tr><tr><td>drop_model_index<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>If set, when entity drop_frame triggers, the model with this index is spawned into play as a dust effect. Use <code>openborconstant(\"MODEL_INDEX_NONE\")<\/code> to disable.<\/td><\/tr><tr><td>energy_cost_amount<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Amount of energy resource required to use animation.<\/td><\/tr><tr><td>energy_cost_disable<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Entity type(s) that are unable to use animation. Uses bitwise logic.<\/td><\/tr><tr><td>energy_cost_type<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Which energy resource is used and required. <code>openborconstant(\"COST_TYPE_HP_ONLY\")<\/code> &#8211; Can only use hit points. <code>openborconstant(\"COST_TYPE_MP_ONLY\")<\/code> &#8211; Can only use magic points. <code>openborconstant(\"COST_TYPE_MP_THEN_HP\")<\/code> &#8211; Use magic points unless they are insufficient to cover the amount, then use hit points.<\/td><\/tr><tr><td>flip_frame<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>When animation reaches this frame, the entity will switch its facing to the opposite direction.<\/td><\/tr><tr><td>follow_up_animation_select<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>When animation satisfies any existing follow up conditions and this property has a value of 1+, the entity will immediately switch animations to follow&lt;this value&gt;. For instance, if this value is 3, the entity will assume animation follow3, assuming it has that animation available.<\/td><\/tr><tr><td>follow_up_condition<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>If this animation&#8217;s attack boxes register a hit, the following conditions are verified. If all conditions are met, the entity will immediately switch to a follow animation (see follow_up_animation_select). Logic is bitwise. It is possible to set contradictory flags if you aren&#8217;t careful, so pay attention when setting up conditions. <code>openborconstant(\"FOLLOW_CONDITION_NONE\")<\/code> &#8211; Blank condition. If there are no conditions at all, follow ups are not executed. <code>openborconstant(\"FOLLOW_CONDITION_ANY\")<\/code> &#8211; Always execute follow up. Overrides all other conditions. <code>openborconstant(\"FOLLOW_CONDITION_BLOCK_FALSE\")<\/code> &#8211; Target must not block the attack. <code>openborconstant(\"FOLLOW_CONDITION_BLOCK_TRUE\")<\/code> &#8211; Target must block the attack. <code>openborconstant(\"FOLLOW_CONDITION_HOSTILE_ATTACKER_FALSE\")<\/code> &#8211; Entity must be benign toward target. <code>openborconstant(\"FOLLOW_CONDITION_HOSTILE_ATTACKER_TRUE\")<\/code> &#8211; Entity must be hostile toward target. <code>openborconstant(\"FOLLOW_CONDITION_HOSTILE_TARGET_FALSE\")<\/code> &#8211; Target must be benign toward entity. <code>openborconstant(\"FOLLOW_CONDITION_HOSTILE_TARGET_TRUE\")<\/code> &#8211; Target must be hostile toward entity. Note the &#8220;hostile&#8221; options in followcond text command work by toggling this attribute. <code>openborconstant(\"FOLLOW_CONDITION_LETHAL_FALSE\")<\/code> &#8211; Attack will not reduce target&#8217;s hit points to 0. <code>openborconstant(\"FOLLOW_CONDITION_LETHAL_TRUE\")<\/code> &#8211; Attack will reduce target&#8217;s hit points to 0.<\/td><\/tr><tr><td>frame_count<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Number of frames in animation.<\/td><\/tr><tr><td>hit_count<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Number of attack hits by this animation. Used to determine cancel availability and resets each time animation changes. Note blocked hits still count toward this value.<\/td><\/tr><tr><td>index<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Sequential index assigned to each animation when loaded into memory. This is NOT the animation ID (Idle, Walk, etc.) &#8211; it is a specific integer value that is unique to all animations across all models.<\/td><\/tr><tr><td>jump_frame<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>If set, upon reaching this frame the entity will toss itself into the air as if in a jump. Use the jump velocity settings to control how fast\/far. Use <code>openborconstant(\"FRAME_NONE\")<\/code> to disable.<\/td><\/tr><tr><td>jump_model_index<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>If set, when entity jump_frame triggers, the model with this index is spawned into play as a dust effect. Use <code>openborconstant(\"MODEL_INDEX_NONE\")<\/code> to disable.<\/td><\/tr><tr><td>jump_velocity_x<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Float<\/a><\/td><td><\/td><td>X axis velocity applied on jump_frame.<\/td><\/tr><tr><td>jump_velocity_y<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Float<\/a><\/td><td><\/td><td>Y axis velocity applied on jump_frame.<\/td><\/tr><tr><td>jump_velocity_z<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Float<\/a><\/td><td><\/td><td>Z axis velocity applied on jump_frame.<\/td><\/tr><tr><td>land_frame<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>If set, when entity touches ground (base) during jump or fall, the animation will skip forward to this frame. If already at or passed this frame, no action is taken. Use <code>openborconstant(\"FRAME_NONE\")<\/code> to disable.<\/td><\/tr><tr><td>land_model_index<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>If set, when entity land_frame triggers, the model with this index is spawned into play as a dust effect. Use <code>openborconstant(\"MODEL_INDEX_NONE\")<\/code> to disable.<br><\/td><\/tr><tr><td>loop_frame_end<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>When looping is enabled, the animation loops immediately upon reaching this frame (in other words, this frame is not seen). If not set or 0, the animation loops after playing last frame.<\/td><\/tr><tr><td>loop_frame_start<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>When looping is enabled, the animation loops loops back to this frame. If not set, the animation loops to first frame.<\/td><\/tr><tr><td>loop_state<\/td><td>  <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Binary<\/a><\/td><td><\/td><td>If TRUE, animation loops.<\/td><\/tr><tr><td>model_index<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Model index this animation attached to at load.<\/td><\/tr><tr><td>projectile<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Pointer<\/a><\/td><td><\/td><td>Handle for animation&#8217;s projectile properties.<\/td><\/tr><tr><td>quake_frame_start<\/td><td><a href=\"http:\/\/www.chronocrash.com\/apps\/wiki\/obor\/index.php?title=Variables#integer\">Integer<\/a><\/td><td><\/td><td>When animation with quake effect reaches this frame, the quake effect begins.<\/td><\/tr><tr><td>quake_move_y<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Number of pixels screen elements are adjusted along Y axis on each quake frame to produce a visual shake effect.<\/td><\/tr><tr><td>quake_repeat_count<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Number of &#8220;shakes&#8221; applied by current quake effect.<\/td><\/tr><tr><td>quake_repeat_max<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Maximum number of &#8220;shakes&#8221; before quake effect ends.<\/td><\/tr><tr><td>range_base_max<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Maximum range detection for base axis.<\/td><\/tr><tr><td>range_base_min<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Minimum range detection for base axis.<\/td><\/tr><tr><td>range_x_max<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Maximum range detection for X axis.<\/td><\/tr><tr><td>range_x_min<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Minimum range detection for X axis.<\/td><\/tr><tr><td>range_y_max<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Maximum range detection for Y axis.<\/td><\/tr><tr><td>range_y_min<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Minimum range detection for Y axis.<\/td><\/tr><tr><td>range_z_max<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Maximum range detection for Z axis.<\/td><\/tr><tr><td>range_z_min<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Minimum range detection for Z axis.<\/td><\/tr><tr><td>size_x<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Entity&#8217;s size (for interacting with terrain like walls, platforms, obstacles, etc.) along the X axis.<\/td><\/tr><tr><td>size_y<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Entity&#8217;s size (for interacting with terrain like walls, platforms, obstacles, etc.) along the Y axis.<\/td><\/tr><tr><td>sub_entity_model_index<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Model index spawned into play by either sub_entity_spawn, or sub_entity_summon properties.<\/td><\/tr><tr><td>sub_entity_spawn<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Pointer to sub entity properties controlling the frame and location of a sub entity spawn. If spawned with this property, the sub entity&#8217;s parent value is the entity that spawned it, but there is otherwise no default relationship. Spawns are unlimited.<\/td><\/tr><tr><td>sub_entity_summon<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>Pointer to sub entity properties controlling the frame and location of a sub entity summon. If spawned with this property sub entity&#8217;s parent value is the entity that spawned it, and the parent&#8217;s child value is the spawned entity. The parent may unsummon its child entity at any time. One summon is allowed per parent &#8211; if a second entity is summoned, the new summon replaces previous summon in parent&#8217;s child property. Effectively, the previous summoned entity is now a spawn.<\/td><\/tr><tr><td>sub_entity_unsummon<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Integer<\/a><\/td><td><\/td><td>When entity reaches this frame, its child dies. Specifically, the child will damage itself with type <code>openborconstant(\"ATK_SUB_ENTITY_UNSUMMON\")<\/code>.<\/td><\/tr><tr><td>subject_to_gravity<\/td><td><a href=\"https:\/\/chronocrash.com\/obor\/wiki\/variables#type\">Binary<\/a><\/td><td><\/td><td>If TRUE, gravity does not apply to entity during animation. Same as model subject_to_gravity.<\/td><\/tr><\/tbody><\/table><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Animation basics and script access.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[8,328,2],"tags":[28,29,4,3],"class_list":["post-44","post","type-post","status-publish","format-standard","hentry","category-animation","category-openbor","category-script","tag-obor_func_get_animation_property","tag-obor_func_set_animation_property","tag-openbor-script","tag-variables"],"revision_note":"","jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/posts\/44","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=44"}],"version-history":[{"count":5,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/posts\/44\/revisions"}],"predecessor-version":[{"id":1309,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/posts\/44\/revisions\/1309"}],"wp:attachment":[{"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/media?parent=44"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/categories?post=44"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/tags?post=44"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}