{"id":4909,"date":"2021-01-23T09:47:32","date_gmt":"2021-01-23T16:47:32","guid":{"rendered":"http:\/\/mattfife.com\/?p=4909"},"modified":"2021-01-26T09:38:37","modified_gmt":"2021-01-26T16:38:37","slug":"beyond-ecs-for-game-design","status":"publish","type":"post","link":"https:\/\/mattfife.com\/?p=4909","title":{"rendered":"Beyond ECS for game design"},"content":{"rendered":"\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Entity_component_system\">ECS <\/a>(Entity-Component-System) has been the staple of game design since the 90&#8217;s. Unfortunately, it isn&#8217;t great in some ways &#8211; especially for the na\u00efve implementations. While it sounds very object oriented to create objects for all the monsters, characters, rooms, and so forth &#8211; it turns out that the object classes usually become unmanageably huge, become overly complex when adding new functionality (duplicating functionality across types, start having multiple inheritance problems, etc), and often perform poorly once you get large numbers of assets.<\/p>\n\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<span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe loading=\"lazy\" class=\"youtube-player\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/JxI3Eu5DPwE?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en-US&#038;autohide=2&#038;wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\"><\/iframe><\/span>\n<\/div><\/figure>\n\n\n\n<p>Text roguelike games are great microcosms of game design. Because they don&#8217;t have fancy graphics &#8211; you can quickly learn good and bad patterns of game engine design.<\/p>\n\n\n\n<p>Here Bob Nystrom, the author of <a rel=\"noreferrer noopener\" href=\"https:\/\/gameprogrammingpatterns.com\/\" target=\"_blank\">Game Programming Patterns<\/a> (<a rel=\"noreferrer noopener\" href=\"https:\/\/gameprogrammingpatterns.com\/contents.html\" target=\"_blank\">free and worth checking out<\/a>), describes some of the classic ECS issues he ran into when he built his roguelike game and how he used design patterns to solve some of them. Definitely worth the 20 minute listen as a good introduction to game engine issues.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ECS (Entity-Component-System) has been the staple of game design since the 90&#8217;s. Unfortunately, it isn&#8217;t great in some ways &#8211; especially for the na\u00efve implementations. While it sounds very object oriented to create objects for all the monsters, characters, rooms, and so forth &#8211; it turns out that the object classes usually become unmanageably huge, become overly complex when adding new functionality (duplicating functionality across types, start having multiple inheritance problems, etc), and often perform poorly once you get large&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/mattfife.com\/?p=4909\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"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":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-4909","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4WECr-1hb","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/mattfife.com\/index.php?rest_route=\/wp\/v2\/posts\/4909","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mattfife.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mattfife.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mattfife.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mattfife.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4909"}],"version-history":[{"count":4,"href":"https:\/\/mattfife.com\/index.php?rest_route=\/wp\/v2\/posts\/4909\/revisions"}],"predecessor-version":[{"id":4921,"href":"https:\/\/mattfife.com\/index.php?rest_route=\/wp\/v2\/posts\/4909\/revisions\/4921"}],"wp:attachment":[{"href":"https:\/\/mattfife.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4909"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mattfife.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4909"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mattfife.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4909"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}