{"id":810,"date":"2023-12-31T09:36:13","date_gmt":"2023-12-31T14:36:13","guid":{"rendered":"https:\/\/chronocrash.com\/obor\/wiki\/?p=810"},"modified":"2025-12-23T21:10:50","modified_gmt":"2025-12-24T02:10:50","slug":"child","status":"publish","type":"post","link":"https:\/\/chronocrash.com\/obor\/wiki\/child\/","title":{"rendered":"Child"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In OpenBOR a child entity is an entity spawned for or by an existing entity. Child entities are used for a variety of in game functions including projectiles, NPCs, and particle effects.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"198\" height=\"112\" src=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/07\/Ryu_hadouken.png?resize=198%2C112&#038;ssl=1\" alt=\"\" class=\"wp-image-110\" srcset=\"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/07\/Ryu_hadouken.png?w=198&amp;ssl=1 198w, https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/07\/Ryu_hadouken.png?resize=150%2C85&amp;ssl=1 150w\" sizes=\"auto, (max-width: 198px) 100vw, 198px\" \/><figcaption class=\"wp-element-caption\">&#8220;Hadouken!&#8221; &#8211; Ryu&#8217;s classic projectile attack is one example of a child entity.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Model<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Following<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Behaviors to set up following a parent. Typically used for NPC helpers.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Follow Offset<\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nchild_follow_offset_x {int}\nchild_follow_offset_y {int}\nchild_follow_offset_z {int}\n\n#default\nchild_follow_offset_x 0\nchild_follow_offset_y 0\nchild_follow_offset_z 0\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">If following a parent, this adjusts the target position from parent. The X axis is relative to parent&#8217;s facing, meaning a negative number adjusts toward the parent&#8217;s back, while positive numbers adjust toward the front. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Follow Range<\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nchild_follow_range_base_max {int}\nchild_follow_range_base_min {int}\nchild_follow_range_x_max {int}\nchild_follow_range_x_min {int}\nchild_follow_range_y_max {int}\nchild_follow_range_y_max {int}\nchild_follow_range_z_max {int}\nchild_follow_range_z_min {int}\n\n#default\nchild_follow_range_base_max MAX_INT\nchild_follow_range_base_min MIN_INT\nchild_follow_range_x_max See description\nchild_follow_range_x_min See description\nchild_follow_range_y_max See description\nchild_follow_range_y_max See description\nchild_follow_range_z_max See description\nchild_follow_range_z_min See description\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Range entity uses to follow. If the target position falls outside of any range axis, the NPC will attempt to move toward the target position. X axis is relative to NPC&#8217;s facing. For legacy compatibility, default values are as follows:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Base value: If entity has a valid Idle with non 0 Minimum X range, default is Minimum X range. Otherwise, 100.<\/li>\n\n\n\n<li>Base value applied as negative default to Min X\/Y and positive default to Max X\/Y.<\/li>\n\n\n\n<li>Base value * 0.5 applied as negative default to Min Z and positive default to Max Z.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Follow Run Range<\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nchild_follow_range_run_base_max {int}\nchild_follow_range_run_base_min {int}\nchild_follow_range_run_x_max {int}\nchild_follow_range_run_x_min {int}\nchild_follow_range_run_y_max {int}\nchild_follow_range_run_y_max {int}\nchild_follow_range_run_z_max {int}\nchild_follow_range_run_z_min {int}\n\n#default\nchild_follow_range_run_base_max MAX_INT\nchild_follow_range_run_base_min MIN_INT\nchild_follow_range_run_x_max See description\nchild_follow_range_run_x_min See description\nchild_follow_range_run_y_max See description\nchild_follow_range_run_y_max See description\nchild_follow_range_run_z_max See description\nchild_follow_range_run_z_min See description\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Range entity uses to follow by running. Entity will run toward its parent target position if the the following criteria are met:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Entity is already following.<\/li>\n\n\n\n<li>Entity has running set up.<\/li>\n\n\n\n<li>The target position is outside of a range axis.<\/li>\n\n\n\n<li>Entity is facing toward the target position.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Default values for X, Y and Z axis use the base value of Follow Range X setting +100. For example, if the base value of Follow Range is 100, then the default is -200 for X, Y and Z minimums and 200 for X, Y and Z maximums.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Recall Range<\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nchild_follow_range_recall_base_max {int}\nchild_follow_range_recall_base_min {int}\nchild_follow_range_recall_x_max {int}\nchild_follow_range_recall_x_min {int}\nchild_follow_range_recall_y_max {int}\nchild_follow_range_recall_y_max {int}\nchild_follow_range_recall_z_max {int}\nchild_follow_range_recall_z_min {int}\n\n#default\nchild_follow_range_recall_base_max MAX_INT\nchild_follow_range_recall_base_min -MAX_INT\nchild_follow_range_recall_x_max Special, see description.\nchild_follow_range_recall_x_min Special, see description.\nchild_follow_range_recall_y_max MAX_INT\nchild_follow_range_recall_y_max -MAX_INT\nchild_follow_range_recall_z_max Special, see description.\nchild_follow_range_recall_z_min Special, see description.\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Range for auto recall. If the target position falls outside of any range axis, the NPC will instantly return to target position and play its recall animation. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Recall Offset<\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nchild_follow_recall_offset_x {int}\nchild_follow_recall_offset_y {int}\nchild_follow_recall_offset_z {int}\n\n#default\nchild_follow_recall_offset_x 0\nchild_follow_recall_offset_y 0\nchild_follow_recall_offset_z 0\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Adjust target position for instant recall. The X axis is relative to parent&#8217;s facing.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Recall Animation<\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nchild_follow_recall_animation {animation name}\n\n# default\nchild_follow_recall_animation respawn\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Animation to play during recall. Accepts any valid animation name, or <code>none<\/code> for no recall animation at all. If the provided (or default) animation is invalid, Spawn will play instead. If there is no valid Spawn animation, nothing plays. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Direction Adjust Config<\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nchild_follow_direction_adjust_config {direction}\n\n#default\nchild_follow_direction_adjust_config toward\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Facing behavior within direction adjust range and idle. Accepts one of the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>none<\/code> &#8211; No direction adjustment. <\/li>\n\n\n\n<li><code>same<\/code> &#8211; Face same direction as parent.<\/li>\n\n\n\n<li><code>opposite<\/code> &#8211; Face opposite direction as parent.<\/li>\n\n\n\n<li><code>left<\/code> &#8211; Face left.<\/li>\n\n\n\n<li><code>right<\/code> &#8211; Face right.<\/li>\n\n\n\n<li><code>away<\/code> &#8211; Face away from target.<\/li>\n\n\n\n<li><code>toward<\/code> &#8211; Face toward target.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If the entity is out of direction adjust range and idle, it will always face toward the parent.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Direction Adjust Range<\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nchild_follow_direction_adjust_range_base_max {int}\nchild_follow_direction_adjust_range_base_min {int}\nchild_follow_direction_adjust_range_x_max {int}\nchild_follow_direction_adjust_range_x_min {int}\nchild_follow_direction_adjust_range_y_max {int}\nchild_follow_direction_adjust_range_y_max {int}\nchild_follow_direction_adjust_range_z_max {int}\nchild_follow_direction_adjust_range_z_min {int}\n\n#default\nchild_follow_direction_adjust_range_base_max MAX_INT\nchild_follow_direction_adjust_range_base_min MIN_INT\nchild_follow_direction_adjust_range_x_max MAX_INT\nchild_follow_direction_adjust_range_x_min MIN_INT\nchild_follow_direction_adjust_range_y_max MAX_INT\nchild_follow_direction_adjust_range_y_max MIN_INT\nchild_follow_direction_adjust_range_z_max MAX_INT\nchild_follow_direction_adjust_range_z_min MIN_INT\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">If parent falls within this range, entity applies direction adjustment config. Note the default X\/Y\/Z axis values are intentionally backward by default to effectively disable direction adjustment range.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Setup<\/h1>\n\n\n\n<p class=\"has-vivid-red-color has-text-color has-link-color has-large-font-size wp-elements-d87bb519716a3f96ca3a9df451787f7c wp-block-paragraph\"><strong>UNDER CONSTRUCTION &#8211; Documentation and features below are in progress. Use at your own risk!<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Child spawn is a combination of commands on an animation frame. You may configure multiple child spawns on a single frame with the child_spawn_index.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">child_spawn_preset_shot<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">child_spawn_color<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Controls color of child spawn. Accepts one of the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>parent_index <\/code>&#8211; Assumes same color index as parent. <\/li>\n\n\n\n<li><code>parent_table<\/code> &#8211; Child uses same color table as parent. Make sure child sprites and parent sprites have matched color tables or this will produce weird looking results.<\/li>\n\n\n\n<li><code>0+<\/code> &#8211; Child spawn assumes supplied color index. If child spawn does not have the specified index, it instead uses index 0 (default).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Child_Spawn_Config<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Miscellaneous flags to configure behavior of the spawning process and child behavior. Accepts one or more of the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>none<\/li>\n\n\n\n<li>autokill_animation<\/li>\n\n\n\n<li>autokill_hit<\/li>\n\n\n\n<li>behavior_bomb &#8211; The spawn uses bomb behavior. See below for details.<\/li>\n\n\n\n<li>behavior_shot<\/li>\n\n\n\n<li>explode &#8211; <\/li>\n\n\n\n<li>faction_damage_parameter<\/li>\n\n\n\n<li>faction_damage_parent<\/li>\n\n\n\n<li>faction_hostile_parameter<\/li>\n\n\n\n<li>faction_hostile_parent<\/li>\n\n\n\n<li>faction_indirect_parameter<\/li>\n\n\n\n<li>faction_indirect_parent<\/li>\n\n\n\n<li>faction_member_parameter<\/li>\n\n\n\n<li>faction_member_parent<\/li>\n\n\n\n<li>gravity_off<\/li>\n\n\n\n<li>launch_throw<\/li>\n\n\n\n<li>launch_toss<\/li>\n\n\n\n<li>offense_parent<\/li>\n\n\n\n<li>position_level<\/li>\n\n\n\n<li>takedamage_parameter<\/li>\n\n\n\n<li>relationship_child<\/li>\n\n\n\n<li>relationship_owner<\/li>\n\n\n\n<li>relationship_parent<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Bomb<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bomb is a type of projectile.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Thrown in an arc determined by projectile model&#8217;s jump height. Affected by gravity.<\/li>\n\n\n\n<li>Apply the projectile velocity setting (see below, default X = 2, Y = projectile model jump height, Z = 0). When moving the projectile model&#8217;s X, and Z speed setting controls velocity. Y is used for initial vertical toss velocity.<\/li>\n\n\n\n<li>If a bomb touches ground without hitting a target, it will play its ATTACK1 animation if available.<\/li>\n\n\n\n<li>If a bomb hits any eligible target or gets hit by any attack, one of the following occurs (in order):\n<ul class=\"wp-block-list\">\n<li>It will play its ATTACK2 animation if available. <\/li>\n\n\n\n<li>If there&#8217;s no ATTACK2 animation, and the remove flag is set, the bomb <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/killed-and-dead\/\" data-type=\"post\" data-id=\"283\">disappears<\/a>.<\/li>\n\n\n\n<li>The bomb loses velocity and falls in place. It will remain on screen until its animation is complete.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>After a bomb hits or lands and current animation is complete (which animation doesn&#8217;t matter), the bomb <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/killed-and-dead\/\" data-type=\"post\" data-id=\"283\">disappears<\/a>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">direction_adjust<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Remove<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nremove {string}\n\n#default\nremove hit\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Triggers for removing an entity.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>None<\/code> &#8211; No removal trigger.<\/li>\n\n\n\n<li><code>Hit<\/code> &#8211; When entity is a projectile, <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/killed-and-dead\/\" data-type=\"post\" data-id=\"283\">kills self<\/a> on hit.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Available as a <a href=\"https:\/\/chronocrash.com\/obor\/wiki\/model-property\/\" data-type=\"post\" data-id=\"497\">model property<\/a> with following constants:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>openborconstant(&#8220;REMOVE_CONFIG_HIT&#8221;)<\/li>\n\n\n\n<li>openborconstant(&#8220;REMOVE_CONFIG_NONE&#8221;)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In OpenBOR a child entity is an entity spawned for or by an existing entity. Child entities are used for a variety of in game functions including projectiles, NPCs, and particle effects. Model Following Behaviors to set up following a parent. Typically used for NPC helpers. Follow Offset If following a parent, this adjusts the [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":110,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[329,328],"tags":[536,535,539,540,538,541,508,509,510,513,514,524,526,528,527,529,531,532,515,518,521,516,519,525,520,511,512,523,522,517,534,530,533],"class_list":["post-810","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-model","category-openbor","tag-child_follow_direction_adjust_range_base_min","tag-child_follow_direction_adjust_range_x_max","tag-child_follow_direction_adjust_range_x_min","tag-child_follow_direction_adjust_range_y_max","tag-child_follow_direction_adjust_range_z_max","tag-child_follow_direction_adjust_range_z_min","tag-child_follow_offset_x","tag-child_follow_offset_y","tag-child_follow_offset_z","tag-child_follow_range_base_max","tag-child_follow_range_base_min","tag-child_follow_range_recall_base_max","tag-child_follow_range_recall_base_min","tag-child_follow_range_recall_x_max","tag-child_follow_range_recall_x_min","tag-child_follow_range_recall_y_max","tag-child_follow_range_recall_z_max","tag-child_follow_range_recall_z_min","tag-child_follow_range_run_base_max","tag-child_follow_range_run_base_min","tag-child_follow_range_run_x_max","tag-child_follow_range_run_x_min","tag-child_follow_range_run_y_max","tag-child_follow_range_run_z_max","tag-child_follow_range_run_z_min","tag-child_follow_range_x_max","tag-child_follow_range_x_min","tag-child_follow_range_y_max","tag-child_follow_range_z_max","tag-child_follow_range_z_min","tag-child_follow_recall_offset_x","tag-child_follow_recall_offset_y","tag-child_follow_recall_offset_z"],"revision_note":"","jetpack_featured_media_url":"https:\/\/i0.wp.com\/chronocrash.com\/obor\/wiki\/wp-content\/uploads\/2021\/07\/Ryu_hadouken.png?fit=198%2C112&ssl=1&wsr","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/posts\/810","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=810"}],"version-history":[{"count":6,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/posts\/810\/revisions"}],"predecessor-version":[{"id":1456,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/posts\/810\/revisions\/1456"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/media\/110"}],"wp:attachment":[{"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/media?parent=810"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/categories?post=810"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/chronocrash.com\/obor\/wiki\/wp-json\/wp\/v2\/tags?post=810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}