{"id":250,"date":"2026-04-29T13:37:23","date_gmt":"2026-04-29T20:37:23","guid":{"rendered":"https:\/\/secondhandcarrot.com\/blog\/?p=250"},"modified":"2026-04-29T13:39:01","modified_gmt":"2026-04-29T20:39:01","slug":"virtually-virtual-simulated-simulants","status":"publish","type":"post","link":"https:\/\/secondhandcarrot.com\/blog\/dev\/virtually-virtual-simulated-simulants\/","title":{"rendered":"Virtually Virtual Simulated Simulants"},"content":{"rendered":"\n<p>Abstraction.  It&#8217;s what makes a big game feasible.  Things aren&#8217;t always &#8220;real&#8221;.  They get processed in various degrees of fidelity depending on relevance.  In many games the world outside the local space just pauses when the player isn&#8217;t around.   But for Feylight Bay, we want the characters and world to seem more alive.  We want you to be able to witness their walking commutes to work, their morning jog, their walk to the local coffee shop, etc.  <br><br>To that end we have integrated Mass to run ECS simulation of our NPCs, their schedules, travel, and underlying state updates.<\/p>\n\n\n\n<pre class=\"wp-block-code has-ast-global-color-1-color has-ast-global-color-5-background-color has-text-color has-background has-link-color wp-elements-9e4e1d51a1e999e03ebe4666f7d96e7a\"><code>    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n    \u2502        Narrative State       \u2502\n    \u2502       (Articy Globals)       \u2502\n    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                   \u2502  (read-only for Mass)\n                   \u25bc\n    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n    \u2502       Mass Simulation        \u2502\n    \u2502   (Virtual NPC Intelligence) \u2502\n    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                   \u2502  (intent \u2192 reality)\n                   \u25bc\n    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n    \u2502        Game World            \u2502\n    \u2502 (Actors, Interiors, Physics) \u2502\n    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                   \u2502  (events \u2192 narrative)\n                   \u25bc\n    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n    \u2502       Narrative State        \u2502\n    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><\/pre>\n\n\n\n<p>What that means for us is we have some work to do to get characters implemented in this new model.  But, it also means that we won&#8217;t need to code specialized logic to populate interior scenes for different narrative branches, times of day, etc.   Instead, the virtual simulation will be able to provide up-to -date data to the game world and our NPCs will be able to pop in to the grocery store when you&#8217;re already there just because that&#8217;s what they were already doing.  <br><br>So it simplifies continuity but adds a layer of logical complexity to the data processing.  In the end it will be worth it.  <br><br><br><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Abstraction. It&#8217;s what makes a big game feasible. Things aren&#8217;t always &#8220;real&#8221;. They get processed in various degrees of fidelity [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"give_campaign_id":0,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"advanced_seo_description":"Discover how Feylight Bay breathes life into NPCs with innovative Mass simulation, enhancing realism and continuity in gameplay.","jetpack_seo_html_title":"Enhancing Game Realism with NPC Simulation in Feylight Bay","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_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":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"dois","default_image_id":27,"font":"","enabled":true,"token":"eyJpbWciOiJodHRwczpcL1wvc2Vjb25kaGFuZGNhcnJvdC5jb21cL2Jsb2dcL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA0XC9GZXlsaWdodEJheUljb25AMngtMS5wbmciLCJ0eHQiOiJWaXJ0dWFsbHkgVmlydHVhbCBTaW11bGF0ZWQgU2ltdWxhbnRzIiwidGVtcGxhdGUiOiJkb2lzIiwiZm9udCI6IiIsImJsb2dfaWQiOjI1NDEzODg1N30.G0-7Z0UduXBvYR9VJ_Kv9KBV9N2gDudR4v-OM0XVSpwMQ","image_type":"custom","image_id":62,"custom_text":""},"version":2,"media_source":"sig","attached_media":[{"id":0,"url":"https:\/\/jetpack.com\/redirect\/?source=sigenerate&query=t%3DeyJpbWciOiJodHRwczpcL1wvc2Vjb25kaGFuZGNhcnJvdC5jb21cL2Jsb2dcL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA0XC9GZXlsaWdodEJheUljb24ucG5nIiwidHh0IjoiVmlydHVhbGx5IFZpcnR1YWwgU2ltdWxhdGVkIFNpbXVsYW50cyIsInRlbXBsYXRlIjoiZWRnZSIsImZvbnQiOiIiLCJibG9nX2lkIjoyNTQxMzg4NTd9.jFKAc5t0-CjAfcCoTiVDUYkJhdmYbvLWzW3X-SLoLKYMQ","type":"image\/jpeg"}]},"_wpas_customize_per_network":false},"categories":[9],"tags":[31,32,14],"class_list":["post-250","post","type-post","status-publish","format-standard","hentry","category-dev","tag-code","tag-simulation","tag-tech"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/secondhandcarrot.com\/blog\/wp-json\/wp\/v2\/posts\/250","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/secondhandcarrot.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/secondhandcarrot.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/secondhandcarrot.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/secondhandcarrot.com\/blog\/wp-json\/wp\/v2\/comments?post=250"}],"version-history":[{"count":2,"href":"https:\/\/secondhandcarrot.com\/blog\/wp-json\/wp\/v2\/posts\/250\/revisions"}],"predecessor-version":[{"id":252,"href":"https:\/\/secondhandcarrot.com\/blog\/wp-json\/wp\/v2\/posts\/250\/revisions\/252"}],"wp:attachment":[{"href":"https:\/\/secondhandcarrot.com\/blog\/wp-json\/wp\/v2\/media?parent=250"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/secondhandcarrot.com\/blog\/wp-json\/wp\/v2\/categories?post=250"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/secondhandcarrot.com\/blog\/wp-json\/wp\/v2\/tags?post=250"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}