{"id":1018,"date":"2024-12-15T22:10:16","date_gmt":"2024-12-15T22:10:16","guid":{"rendered":"https:\/\/abdoubouam.com\/?p=1018"},"modified":"2024-12-15T22:10:16","modified_gmt":"2024-12-15T22:10:16","slug":"devlog-week-51-52","status":"publish","type":"post","link":"https:\/\/abdoubouam.com\/index.php\/2024\/12\/15\/devlog-week-51-52\/","title":{"rendered":"Devlog Week 51-52"},"content":{"rendered":"\n<p>This week I experimented a bit on character clothing, added some character AI behaviors, and improved the greetings\/chatter system. Here&#8217;s a detailed explanation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Character Clothing<\/h2>\n\n\n\n<p>I experimented more with Marvelous designer and made a &#8220;real&#8221; scenario. I made the entire thing in Marvelous designer (so no manual sculpting), and got a lot more familiar with sewing patterns and styling. I textured it quickly in Substance Painter and rendered it in Blender. I skipped the retopology because this won&#8217;t be a game asset, also I&#8217;ve done that a million times and there&#8217;s nothing new to learn anyway.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-2 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure data-wp-context=\"{&quot;uploadedSrc&quot;:&quot;https:\\\/\\\/abdoubouam.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/F1.jpg&quot;,&quot;figureClassNames&quot;:&quot;wp-block-image size-large&quot;,&quot;figureStyles&quot;:null,&quot;imgClassNames&quot;:&quot;wp-image-1006&quot;,&quot;imgStyles&quot;:null,&quot;targetWidth&quot;:1920,&quot;targetHeight&quot;:1080,&quot;scaleAttr&quot;:false,&quot;ariaLabel&quot;:&quot;Enlarge image&quot;,&quot;alt&quot;:&quot;&quot;}\" data-wp-interactive=\"core\/image\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1080\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"1006\" src=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F1.jpg\" alt=\"\" class=\"wp-image-1006\" srcset=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F1.jpg 1920w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F1-300x169.jpg 300w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F1-768x432.jpg 768w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F1-1536x864.jpg 1536w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F1-1000x563.jpg 1000w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F1-230x129.jpg 230w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F1-350x197.jpg 350w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F1-480x270.jpg 480w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge image\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"context.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"context.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;uploadedSrc&quot;:&quot;https:\\\/\\\/abdoubouam.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/F3.jpg&quot;,&quot;figureClassNames&quot;:&quot;wp-block-image size-large&quot;,&quot;figureStyles&quot;:null,&quot;imgClassNames&quot;:&quot;wp-image-1003&quot;,&quot;imgStyles&quot;:null,&quot;targetWidth&quot;:1280,&quot;targetHeight&quot;:1280,&quot;scaleAttr&quot;:false,&quot;ariaLabel&quot;:&quot;Enlarge image&quot;,&quot;alt&quot;:&quot;&quot;}\" data-wp-interactive=\"core\/image\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"1280\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"1003\" src=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F3.jpg\" alt=\"\" class=\"wp-image-1003\" srcset=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F3.jpg 1280w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F3-300x300.jpg 300w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F3-150x150.jpg 150w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F3-768x768.jpg 768w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F3-1000x1000.jpg 1000w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F3-230x230.jpg 230w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F3-350x350.jpg 350w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F3-480x480.jpg 480w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge image\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"context.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"context.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;uploadedSrc&quot;:&quot;https:\\\/\\\/abdoubouam.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/F2.jpg&quot;,&quot;figureClassNames&quot;:&quot;wp-block-image size-large&quot;,&quot;figureStyles&quot;:null,&quot;imgClassNames&quot;:&quot;wp-image-1002&quot;,&quot;imgStyles&quot;:null,&quot;targetWidth&quot;:1280,&quot;targetHeight&quot;:1280,&quot;scaleAttr&quot;:false,&quot;ariaLabel&quot;:&quot;Enlarge image&quot;,&quot;alt&quot;:&quot;&quot;}\" data-wp-interactive=\"core\/image\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"1280\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"1002\" src=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F2.jpg\" alt=\"\" class=\"wp-image-1002\" srcset=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F2.jpg 1280w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F2-300x300.jpg 300w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F2-150x150.jpg 150w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F2-768x768.jpg 768w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F2-1000x1000.jpg 1000w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F2-230x230.jpg 230w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F2-350x350.jpg 350w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/F2-480x480.jpg 480w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge image\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"context.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"context.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;uploadedSrc&quot;:&quot;https:\\\/\\\/abdoubouam.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/MD.jpg&quot;,&quot;figureClassNames&quot;:&quot;wp-block-image size-large&quot;,&quot;figureStyles&quot;:null,&quot;imgClassNames&quot;:&quot;wp-image-1005&quot;,&quot;imgStyles&quot;:null,&quot;targetWidth&quot;:1808,&quot;targetHeight&quot;:892,&quot;scaleAttr&quot;:false,&quot;ariaLabel&quot;:&quot;Enlarge image&quot;,&quot;alt&quot;:&quot;&quot;}\" data-wp-interactive=\"core\/image\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1808\" height=\"892\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"1005\" src=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/MD.jpg\" alt=\"\" class=\"wp-image-1005\" srcset=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/MD.jpg 1808w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/MD-300x148.jpg 300w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/MD-768x379.jpg 768w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/MD-1536x758.jpg 1536w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/MD-1000x493.jpg 1000w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/MD-230x113.jpg 230w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/MD-350x173.jpg 350w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/MD-480x237.jpg 480w\" sizes=\"(max-width: 1808px) 100vw, 1808px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge image\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"context.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"context.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<figcaption class=\"blocks-gallery-caption wp-element-caption\">Tactical Pants<\/figcaption><\/figure>\n\n\n\n<p>In addition to that, I did some performance tests with real-time cloth sims, because I need it to deform some parts of long dresses and such. It started as a skirt, but then it reminded me of the whirling dervishes (it probably has something to do with my recent visit to Turkey), so I made the NPCs spin just to be a little bit extra lol<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video controls src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/cloth_sim_steamdeck.mp4\"><\/video><figcaption class=\"wp-element-caption\">Cloth Sim Performance tests running on the Steam Deck<\/figcaption><\/figure>\n\n\n\n<p>The results are far better than I expected, especially because there are 11 NPCs with &#8220;player quality&#8221; cloth sims. I can reduce the polygon count and simulation quality significantly for most use cases (walking, small movements&#8230;etc) so I&#8217;m not too concerned about it.<\/p>\n\n\n\n<p>I was also worried about the player&#8217;s clothes shoulder deformation, because of the double joint and the twisting, but it looks good enough on the player.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">NPC AI<\/h2>\n\n\n\n<p>I implemented a new behavior : Leading. It&#8217;s basically the same as &#8220;Patrol&#8221;, but the player has to be close enough before the NPC navigates to the next waypoint, otherwise the NPC waits.<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video controls src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/leadAI.mp4\"><\/video><figcaption class=\"wp-element-caption\">AI Behavior : Lead<\/figcaption><\/figure>\n\n\n\n<p>I also implemented several improvements, which are the following :<\/p>\n\n\n\n<p>Target Visualization : a line between the NPC and the target, to show where they&#8217;re attempting to navigate.<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video controls src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/followAI.mp4\"><\/video><figcaption class=\"wp-element-caption\">AI Navigation Target Visualization<\/figcaption><\/figure>\n\n\n\n<p>Run\/walk toggle : if the NPCs are too far behind the target\/player then they will run until they reach a distance threshold, at which point they&#8217;ll start walking again.<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video controls src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/walk-run.mp4\"><\/video><figcaption class=\"wp-element-caption\">Walk\/Run toggle<\/figcaption><\/figure>\n\n\n\n<p>Chatter\/greeting variables : I added variable support for chatter and greeting lines. Now the NPCs can call the player (or other NPC) by their name. There&#8217;s also now a separate $PlayerName$ and $Name$ variable, the latter refers to the NPC\/Object you&#8217;re currently interacting with. I also added a $time$ variable just for testing custom variables.<br>I reworked the function and made it part of a Blueprint Function Library, which means the code can be shared by many other blueprints and work consistently.<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video controls src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/variables.mp4\"><\/video><figcaption class=\"wp-element-caption\">Variables<\/figcaption><\/figure>\n\n\n\n<p>And lastly, a funny interaction. I placed NPCs to move randomly around the world, and they had the greeting component enabled. I forgot one of them when I added a building and it appeared on top of a wall, so I went back to record the interaction, and it just happened that the NPC randomly picked the funniest greeting line possible for the scenario lol<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video controls src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2024\/12\/whatsup.mp4\"><\/video><figcaption class=\"wp-element-caption\">&#8220;What&#8217;s up&#8221;<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Misc<\/h2>\n\n\n\n<p>Additional stuff not worth talking too long about :<\/p>\n\n\n\n<ul>\n<li>I attempted to add physics movement to the ears, but I am so far unsuccessful.<\/li>\n\n\n\n<li>More blockouts, expanded the starting area a little bit more.<\/li>\n\n\n\n<li>Story writing and some more interactions<\/li>\n\n\n\n<li>Configured another Backup option, bringing the total up to 4 (local, external, external and in a different physical location, and cloud)<\/li>\n\n\n\n<li>I started playing some old RPG games like Earthbound and Zelda: a Link to the Past. I&#8217;m not having a lot of fun so far (especially with Zelda), so hopefully things will get more exciting soon, but even if they don&#8217;t I am doing it to study them.<\/li>\n\n\n\n<li><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p>This marks over a year of development now and it feels surreal! It feels both like I have accomplished very little and also I&#8217;ve done so much at the same time.<br>The game is going slower than anticipated (especially because I never used Unreal Engine before this, and never worked on any serious game project), but I&#8217;m happy with all the mechanics I implemented, especially the entire interaction system I&#8217;ve built from scratch. I wrote 90% of the main story, detailed some characters stories, started working on the world environment, and I learned about all the workflow I need (character animation, , AI, optimization, cutscenes). Hopefully I will keep the same pace in 2025, if not better.<\/p>\n\n\n\n<p>That&#8217;s all for this devlog, thanks for reading!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This week I experimented a bit on character clothing, added some character AI behaviors, and improved the greetings\/chatter system. Here&#8217;s a detailed explanation. Character Clothing I experimented more with Marvelous designer and made a &#8220;real&#8221; scenario. I made the entire thing in Marvelous designer (so no manual sculpting), and got a lot more familiar with sewing patterns and styling. I textured it quickly in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1006,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"_links":{"self":[{"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/posts\/1018"}],"collection":[{"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/comments?post=1018"}],"version-history":[{"count":2,"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/posts\/1018\/revisions"}],"predecessor-version":[{"id":1021,"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/posts\/1018\/revisions\/1021"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/media\/1006"}],"wp:attachment":[{"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/media?parent=1018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/categories?post=1018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/tags?post=1018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}