<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>hugh &#8211; Spooky Action at a Distance Games</title>
	<atom:link href="https://saaadgames.com/author/stepsons_ocyqhp/feed/" rel="self" type="application/rss+xml" />
	<link>https://saaadgames.com</link>
	<description>devlog</description>
	<lastBuildDate>Sat, 14 Sep 2024 21:23:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Walk in a &#8220;forest&#8221;: good hunt!</title>
		<link>https://saaadgames.com/2024/09/14/walk-in-a-forest-good-hunt/</link>
		
		<dc:creator><![CDATA[hugh]]></dc:creator>
		<pubDate>Sat, 14 Sep 2024 21:23:06 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://saaadgames.com/?p=232</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="867" src="https://saaadgames.com/wp-content/uploads/2024/09/Screenshot-2024-09-14-at-14.07.36-1024x867.png" alt="" class="wp-image-233" srcset="https://saaadgames.com/wp-content/uploads/2024/09/Screenshot-2024-09-14-at-14.07.36-1024x867.png 1024w, https://saaadgames.com/wp-content/uploads/2024/09/Screenshot-2024-09-14-at-14.07.36-300x254.png 300w, https://saaadgames.com/wp-content/uploads/2024/09/Screenshot-2024-09-14-at-14.07.36-768x651.png 768w, https://saaadgames.com/wp-content/uploads/2024/09/Screenshot-2024-09-14-at-14.07.36-1536x1301.png 1536w, https://saaadgames.com/wp-content/uploads/2024/09/Screenshot-2024-09-14-at-14.07.36.png 1792w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Walls and y-order in Tiled maps</title>
		<link>https://saaadgames.com/2024/09/14/walls-and-y-order-in-tiled-maps/</link>
		
		<dc:creator><![CDATA[hugh]]></dc:creator>
		<pubDate>Sat, 14 Sep 2024 04:29:20 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://saaadgames.com/?p=225</guid>

					<description><![CDATA[This post talks about 2d maps created in Tiled, and how we implemented walls andY-order. You may think about it as Z-order, but as our maps are flat, we only need to arrange things by their Y coordinate. On thin walls in Tiled How do I know which tile in Tiled is passable, and which...<p class="more-link-wrap"><a href="https://saaadgames.com/2024/09/14/walls-and-y-order-in-tiled-maps/" class="more-link">Read More<span class="screen-reader-text"> &#8220;Walls and y-order in Tiled maps&#8221;</span> &#187;</a></p>]]></description>
										<content:encoded><![CDATA[
<p>This post talks about 2d maps created in Tiled, and how we implemented walls and<br>Y-order. You may think about it as Z-order, but as our maps are flat, we only need to arrange things by their Y coordinate.</p>



<h2 class="wp-block-heading has-medium-font-size">On thin walls in Tiled</h2>



<p>How do I know which tile in Tiled is passable, and which is not?</p>



<p>Especially that we have such a luxury as thin walls.</p>



<p>My answer is Tiled feature – Terrains (https://doc.mapeditor.org/en/stable/manual/terrain/),<br>AKA Wang tiles (a good article for gamedevs: https://dev.to/joestrout/wang-2-corner-tiles-544k).</p>



<p>If a side of a tile has a terrain named &#8220;wall&#8221;, it&#8217;s not passable – as simple as that.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="862" height="632" src="https://saaadgames.com/wp-content/uploads/2024/09/thin-walls-wangset.png" alt="" class="wp-image-226" srcset="https://saaadgames.com/wp-content/uploads/2024/09/thin-walls-wangset.png 862w, https://saaadgames.com/wp-content/uploads/2024/09/thin-walls-wangset-300x220.png 300w, https://saaadgames.com/wp-content/uploads/2024/09/thin-walls-wangset-768x563.png 768w" sizes="(max-width: 862px) 100vw, 862px" /></figure>



<p>This way, our level designers don&#8217;t have to mark up the map – the walls are already in the tileset.</p>



<h2 class="wp-block-heading has-medium-font-size">On Y-order</h2>



<p>So, our objects (and object layers in Tiled) do have Y coordinate, so we know in what order<br>to draw them.</p>



<p>But what about tiles on a map?</p>



<p>What if our maps have multiple complex layers, maybe even a tree of layers?</p>



<p>What if these layers have similar objects with different Y coordinates, like multiple trees<br>or pillars or whatever?</p>



<p>Shall the level designer split each object into a separate layer and assign it a Y-order property?<br>This sounds like too much manual work, prone to error.</p>



<p>Our answer is &#8211; automatically split layers into &#8220;island&#8221; segments, and internally set<br>each segment&#8217;s Y-order according to the lowest tile (with the highest Y).</p>



<figure class="wp-block-image size-full"><img decoding="async" width="696" height="492" src="https://saaadgames.com/wp-content/uploads/2024/09/layer-segmet-trees.png" alt="" class="wp-image-227" srcset="https://saaadgames.com/wp-content/uploads/2024/09/layer-segmet-trees.png 696w, https://saaadgames.com/wp-content/uploads/2024/09/layer-segmet-trees-300x212.png 300w" sizes="(max-width: 696px) 100vw, 696px" /></figure>



<p><em>3 segments for 3 trees on a single layer, with a different Y-order</em></p>



<p>The next step is to only assign Y-order to segments based on the <em>walls</em><br>assigned to tiles of that segment. The engine reasonably assumes that<br>a wall is on a floor level, and everything above it is fluff &#8211; tree top,<br>wall bottom, and so on.</p>



<p>Think of a door mat:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="756" height="350" src="https://saaadgames.com/wp-content/uploads/2024/09/segment-bottom-is-wall-1.png" alt="" class="wp-image-229" srcset="https://saaadgames.com/wp-content/uploads/2024/09/segment-bottom-is-wall-1.png 756w, https://saaadgames.com/wp-content/uploads/2024/09/segment-bottom-is-wall-1-300x139.png 300w" sizes="auto, (max-width: 756px) 100vw, 756px" /></figure>



<p>This is more precise, because sometimes our wall tiles have tiles<br>both above and below them. </p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>We have doors now</title>
		<link>https://saaadgames.com/2024/07/27/we-have-doors-now/</link>
		
		<dc:creator><![CDATA[hugh]]></dc:creator>
		<pubDate>Sat, 27 Jul 2024 06:09:12 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://saaadgames.com/?p=211</guid>

					<description><![CDATA[Made from this spritesheet:]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="496" height="534" src="https://saaadgames.com/wp-content/uploads/2024/07/walkie-doors.gif" alt="" class="wp-image-212"/></figure>



<p>Made from this spritesheet:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="510" height="696" src="https://saaadgames.com/wp-content/uploads/2024/07/Screenshot-2024-07-26-at-23.06.47.png" alt="" class="wp-image-213" srcset="https://saaadgames.com/wp-content/uploads/2024/07/Screenshot-2024-07-26-at-23.06.47.png 510w, https://saaadgames.com/wp-content/uploads/2024/07/Screenshot-2024-07-26-at-23.06.47-220x300.png 220w" sizes="auto, (max-width: 510px) 100vw, 510px" /></figure>



<p></p>



<details class="wp-block-details is-layout-flow wp-block-details-is-layout-flow"><summary>and JSON like this</summary>
<pre class="wp-block-code"><code>{
    "name": "Vertical door, 2-tile",
    "door": {
        "walls": &#91;
            {"offset": &#91;-1, 0], "wall": "east"},
            {"offset": &#91;-1, 1], "wall": "east"}
        ]
    },
    "multitile": {
        "tileset": "ArthurVista-dors-4export-v1.0",
        "static_tiles": &#91;
            {
                "name": "opened",
                "fragments": &#91;
                    {"offset": &#91;-1,-1], "id": 34},
                    {"offset": &#91;0,-1], "id": 35},
                    {"offset": &#91;-1,0], "id": 44},
                    {"offset": &#91;0,0], "id": 45},
                    {"offset": &#91;-1,0], "id": 96},
                    {"offset": &#91;0,0], "id": 97},
                    {"offset": &#91;-1,1], "id": 54},
                    {"offset": &#91;0,1], "id": 55},
                    {"offset": &#91;-1,2], "id": 64},
                    {"offset": &#91;0,2], "id": 65}
                ]
            },
            {
                "name": "closed",
                "fragments": &#91;
                    {"offset": &#91;-1,-1], "id": 34},
                    {"offset": &#91;0,-1], "id": 35},
                    {"offset": &#91;-1,0], "id": 44},
                    {"offset": &#91;0,0], "id": 45},
                    {"offset": &#91;-1,0], "id": 70},
                    {"offset": &#91;0,0], "id": 71},
                    {"offset": &#91;-1,1], "id": 54},
                    {"offset": &#91;0,1], "id": 55},
                    {"offset": &#91;-1,2], "id": 64},
                    {"offset": &#91;0,2], "id": 65},
                    {"offset": &#91;-1,1], "id": 74},
                    {"offset": &#91;0,1], "id": 75}
                ]
            }
            
        ],
        "animations": &#91;
            {
                "name": "open",
                "fragments": &#91;
                    {"offset": &#91;-1,0], "name": "door-v-open-upper-nw"},
                    {"offset": &#91;0,0], "name": "door-v-open-upper-ne"},
                    {"offset": &#91;-1,1], "name": "door-v-open-upper-sw"},
                    {"offset": &#91;0,1], "name": "door-v-open-upper-se"},
                    {"offset": &#91;-1,1], "name": "door-v-open-lower-w"},
                    {"offset": &#91;0,1], "name": "door-v-open-lower-e"}
                ]
            },
            {
                "name": "close",
                "fragments": &#91;
                    {"offset": &#91;-1,0], "name": "door-v-close-upper-nw"},
                    {"offset": &#91;0,0], "name": "door-v-close-upper-ne"},
                    {"offset": &#91;-1,1], "name": "door-v-close-upper-sw"},
                    {"offset": &#91;0,1], "name": "door-v-close-upper-se"},
                    {"offset": &#91;-1,1], "name": "door-v-close-lower-w"},
                    {"offset": &#91;0,1], "name": "door-v-close-lower-e"}
                ]
            }
        ]
    }
}</code></pre>
</details>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Thin walls and examples</title>
		<link>https://saaadgames.com/2024/03/16/thin-walls-and-examples/</link>
		
		<dc:creator><![CDATA[hugh]]></dc:creator>
		<pubDate>Sat, 16 Mar 2024 07:42:15 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://saaadgames.com/?p=198</guid>

					<description><![CDATA[My programming language of choice, Rust, allows you to write code in independent libraries of modules, called &#8220;crates&#8221;. Other languages do it too, it&#8217;s nothing new, but in Rust it&#8217;s seriously easier, and the benefits are immediately usable. This has this effect on our progress: a programmer can work on independent crate for months, without...<p class="more-link-wrap"><a href="https://saaadgames.com/2024/03/16/thin-walls-and-examples/" class="more-link">Read More<span class="screen-reader-text"> &#8220;Thin walls and examples&#8221;</span> &#187;</a></p>]]></description>
										<content:encoded><![CDATA[
<p>My programming language of choice, Rust, allows you to write code in independent libraries of modules, called &#8220;crates&#8221;. Other languages do it too, it&#8217;s nothing new, but in Rust it&#8217;s seriously easier, and the benefits are immediately usable.</p>



<p>This has this effect on our progress: a programmer can work on independent crate for months, without a visible effect on the main project. It happened when we worked on crates for:</p>



<ul class="wp-block-list">
<li>Shadowcasting (for visibility and projectiles) &#8211; credit to Maria;</li>



<li>Tiled (tile map editor) integration with graphics framework;</li>



<li>Animations engine &#8211; credit to Maria;</li>



<li>Talk (our dialogue engine);</li>



<li>UI &#8211; credit to Maria;</li>



<li>&#8220;Buff/debuff&#8221; &#8211; an engine for effects like &#8220;10% to speed, Speed gives extra +15% Dodge&#8221;; </li>



<li>and lately &#8211; Thin Walls.</li>
</ul>



<p>Now I can declare that Thin Walls are officially ready for beta testing.</p>



<p>Wait, what Thin Walls? </p>



<p>In short, this is one of my bad decisions that prolong development for months and lead to overengineering. It is a gimmick &#8211; I wanted to have not only traditional roguelike full-tile walls, but also walls between tiles.</p>



<p>This broke a cascade of things:</p>



<ul class="wp-block-list">
<li>Shadowcasting;</li>



<li>Pathfinding;</li>



<li>Map loader;</li>



<li>Tiled maps.</li>
</ul>



<p>But now it&#8217;s usable in the game engine. Thanks to this, I have the map from an <a href="https://saaadgames.com/2023/11/22/tiled-integration/" data-type="post" data-id="179">earlier post</a> running in the engine. Green lines are a debug tool for actual walls, red circles are tile visibility.</p>



<figure class="wp-block-video"><video height="1040" style="aspect-ratio: 1358 / 1040;" width="1358" controls loop muted src="https://saaadgames.com/wp-content/uploads/2024/03/2024-03-16-thin-walls.mov" playsinline></video></figure>



<h2 class="wp-block-heading">Now, next crate I&#8217;m creating is – finally – Combat</h2>



<p>I&#8217;m finally working on something that resembles a game. This something is an example for Combat crate. In Rust, again, there is an out-of-box mechanism with which you can create examples for each crate, for documentation, demonstration or learning purpose. I also use them to try out my code design for this crate.</p>



<p>In this crate, that depends on Thin Walls above, you actually control a character, and, tada! you have a team of enemies that can attack you with melee or ranged attacks. This crate is about creating the dumbest AI that I could think of.</p>



<p>It&#8217;s still blocked by the lack of pathfinding and some features in visibility on Thin Walls, but hey, I&#8217;m getting close to that.</p>



<p>Here is the Combat crate example. Looks a bit like LaserTag room, isn&#8217;t it?</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="669" src="https://saaadgames.com/wp-content/uploads/2024/03/2024-03-16-Combat-example1-1024x669.png" alt="" class="wp-image-201" srcset="https://saaadgames.com/wp-content/uploads/2024/03/2024-03-16-Combat-example1-1024x669.png 1024w, https://saaadgames.com/wp-content/uploads/2024/03/2024-03-16-Combat-example1-300x196.png 300w, https://saaadgames.com/wp-content/uploads/2024/03/2024-03-16-Combat-example1-768x502.png 768w, https://saaadgames.com/wp-content/uploads/2024/03/2024-03-16-Combat-example1-1536x1004.png 1536w, https://saaadgames.com/wp-content/uploads/2024/03/2024-03-16-Combat-example1.png 1916w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
]]></content:encoded>
					
		
		<enclosure url="https://saaadgames.com/wp-content/uploads/2024/03/2024-03-16-thin-walls.mov" length="11645700" type="video/quicktime" />

			</item>
		<item>
		<title>Art updates</title>
		<link>https://saaadgames.com/2023/11/25/art-updates/</link>
		
		<dc:creator><![CDATA[hugh]]></dc:creator>
		<pubDate>Sat, 25 Nov 2023 01:00:41 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://saaadgames.com/?p=184</guid>

					<description><![CDATA[Some of Snorri&#8217;s new animations and ArthurVista&#8217;s environment. Slightly NSFW&#8230; well, not really. We just need the naked base to start animating different clothes on top of it.]]></description>
										<content:encoded><![CDATA[
<p>Some of Snorri&#8217;s new animations and ArthurVista&#8217;s environment. Slightly NSFW&#8230; well, not really. We just need the naked base to start animating different clothes on top of it.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="234" height="234" data-id="187" src="https://saaadgames.com/wp-content/uploads/2023/11/Volot_Male_Naked_Idle_Back01-1.gif" alt="" class="wp-image-187"/></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="210" height="240" data-id="188" src="https://saaadgames.com/wp-content/uploads/2023/11/Volot_Male_Naked_Idle_Front01.gif" alt="" class="wp-image-188"/></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="960" height="960" data-id="192" src="https://saaadgames.com/wp-content/uploads/2023/11/Volot_Male_Naked_Punch_AllSides01.gif" alt="" class="wp-image-192"/></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="246" height="228" data-id="190" src="https://saaadgames.com/wp-content/uploads/2023/11/Volot_Male_Naked_Punch_Diagonal01.gif" alt="" class="wp-image-190"/></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="306" height="294" data-id="189" src="https://saaadgames.com/wp-content/uploads/2023/11/Volot_Male_Naked_Punch_Diagonal02.gif" alt="" class="wp-image-189"/></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="259" height="280" data-id="191" src="https://saaadgames.com/wp-content/uploads/2023/11/Volot_Male_Naked_Walk_Back01.gif" alt="" class="wp-image-191"/></figure>
</figure>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="634" data-id="194" src="https://saaadgames.com/wp-content/uploads/2023/11/house-interior-walls-1024x634.png" alt="" class="wp-image-194" srcset="https://saaadgames.com/wp-content/uploads/2023/11/house-interior-walls-1024x634.png 1024w, https://saaadgames.com/wp-content/uploads/2023/11/house-interior-walls-300x186.png 300w, https://saaadgames.com/wp-content/uploads/2023/11/house-interior-walls-768x476.png 768w, https://saaadgames.com/wp-content/uploads/2023/11/house-interior-walls-1536x952.png 1536w, https://saaadgames.com/wp-content/uploads/2023/11/house-interior-walls.png 1582w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="980" height="1024" data-id="193" src="https://saaadgames.com/wp-content/uploads/2023/11/house-980x1024.png" alt="" class="wp-image-193" srcset="https://saaadgames.com/wp-content/uploads/2023/11/house-980x1024.png 980w, https://saaadgames.com/wp-content/uploads/2023/11/house-287x300.png 287w, https://saaadgames.com/wp-content/uploads/2023/11/house-768x803.png 768w, https://saaadgames.com/wp-content/uploads/2023/11/house.png 1324w" sizes="auto, (max-width: 980px) 100vw, 980px" /></figure>
</figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tiled integration</title>
		<link>https://saaadgames.com/2023/11/22/tiled-integration/</link>
		
		<dc:creator><![CDATA[hugh]]></dc:creator>
		<pubDate>Wed, 22 Nov 2023 17:12:15 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://saaadgames.com/?p=179</guid>

					<description><![CDATA[A feature that was long due, integration with Tiled editor. It uses so called Wang tiles to mark up the walls on the map, so the editor can design not only visuals, but also a topology of the map. In future, we will expand the number of tile kinds that game engine &#8220;understands&#8221; in the...<p class="more-link-wrap"><a href="https://saaadgames.com/2023/11/22/tiled-integration/" class="more-link">Read More<span class="screen-reader-text"> &#8220;Tiled integration&#8221;</span> &#187;</a></p>]]></description>
										<content:encoded><![CDATA[
<p>A feature that was long due, integration with Tiled editor.</p>



<p>It uses so called <a href="http://www.cr31.co.uk/stagecast/wang/2edge.html">Wang tiles</a> to mark up the walls on the map, so the editor can design not only visuals, but also a topology of the map. In future, we will expand the number of tile kinds that game engine &#8220;understands&#8221; in the map.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Tiled Map Editor integration and a feature I call &quot;thin walls&quot;" width="650" height="488" src="https://www.youtube.com/embed/F2zmxpZpGOw?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>It&#8217;s still rough around the edges, rendering order needs to be improved, but it&#8217;s the beginning.</p>



<p>Temporary character credit: body/female/reptiles/red_winged.png: by Nila122, Johannes Sjölund (wulax), Stephen Challener (Redshrike) on OpenGameArt <a href="https://opengameart.org/content/liberated-pixel-cup-lpc-base-assets-sprites-map-tiles">one</a> <a href="https://opengameart.org/content/lpc-medieval-fantasy-character-sprites">two</a> <a href="https://opengameart.org/content/drakes-and-lizardfolk">three</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>First steps of the engine</title>
		<link>https://saaadgames.com/2022/08/23/first-steps-of-the-engine/</link>
		
		<dc:creator><![CDATA[hugh]]></dc:creator>
		<pubDate>Tue, 23 Aug 2022 06:20:54 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://saaadgames.com/?p=170</guid>

					<description><![CDATA[It has a long way to go, but the engine now has: Dialogue engine (see the first post in this blog); World state; Scripting in Lua; Rudimentary battle system. Our next goal is buff/debuff system, which is known to be a hard problem. Probably I&#8217;m going to overengineer it, even if I try not to&#8230;]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-video"><video height="796" style="aspect-ratio: 1022 / 796;" width="1022" controls muted src="https://saaadgames.com/wp-content/uploads/2022/08/rifrl34.mp4"></video></figure>



<p>It has a long way to go, but the engine now has:</p>



<ul class="wp-block-list"><li>Dialogue engine (see the first post in this blog);</li><li>World state;</li><li>Scripting in Lua;</li><li>Rudimentary battle system.</li></ul>



<p>Our next goal is buff/debuff system, which is <a href="https://gamedev.stackexchange.com/questions/29982/whats-a-way-to-implement-a-flexible-buff-debuff-system">known to be a hard problem</a>. Probably I&#8217;m going to overengineer it, even if I try not to&#8230;</p>
]]></content:encoded>
					
		
		<enclosure url="https://saaadgames.com/wp-content/uploads/2022/08/rifrl34.mp4" length="3589294" type="video/mp4" />

			</item>
		<item>
		<title>More tech</title>
		<link>https://saaadgames.com/2022/07/22/more-tech/</link>
		
		<dc:creator><![CDATA[hugh]]></dc:creator>
		<pubDate>Fri, 22 Jul 2022 04:18:43 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://saaadgames.com/?p=139</guid>

					<description><![CDATA[Second, shadowcasting (great job, Maria!), which will be used for: vision, lighting and ranged combat. Obstacles can have different permeability for light and projectiles. For example: smoke can be very thick but completely &#8220;transparent&#8221; for bullets, while armored glass is the opposite of it; smoke and glass both can be 50% translucent, and a wooden...<p class="more-link-wrap"><a href="https://saaadgames.com/2022/07/22/more-tech/" class="more-link">Read More<span class="screen-reader-text"> &#8220;More tech&#8221;</span> &#187;</a></p>]]></description>
										<content:encoded><![CDATA[
<p>Second, shadowcasting (great job, Maria!), which will be used for:</p>



<ul class="wp-block-list"><li>vision, </li><li>lighting</li><li>and ranged combat.</li></ul>



<p>Obstacles can have different permeability for light and projectiles. For example: </p>



<ul class="wp-block-list"><li>smoke can be very thick but completely &#8220;transparent&#8221; for bullets, </li><li>while armored glass is the opposite of it; </li><li>smoke and glass both can be 50% translucent, and a wooden wall can provide only 50% of cover.</li></ul>



<p>But enough words, here&#8217;s a picture of obstacle shadows and target visibility:</p>



<figure class="wp-block-video"><video height="620" style="aspect-ratio: 942 / 620;" width="942" autoplay loop muted src="https://saaadgames.com/wp-content/uploads/2022/08/Shadowcasting-demo3-cut.mp4" playsinline></video></figure>
]]></content:encoded>
					
		
		<enclosure url="https://saaadgames.com/wp-content/uploads/2022/08/Shadowcasting-demo3-cut.mp4" length="1181042" type="video/mp4" />

			</item>
		<item>
		<title>We haven&#8217;t been dead&#8230;</title>
		<link>https://saaadgames.com/2022/07/22/we-havent-been-dead/</link>
		
		<dc:creator><![CDATA[hugh]]></dc:creator>
		<pubDate>Fri, 22 Jul 2022 04:09:33 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://saaadgames.com/?p=135</guid>

					<description><![CDATA[Just lazy about the blog.Let me share a few new parts of our engine. First, animation engine (by Maria) and Tiled map editor integration (by hugh): Credits for art used: Map tiles: anonymous OpenGameArt contributor, character: body/female/reptiles/red_winged.png: by Nila122, Johannes Sjölund (wulax), Stephen Challener (Redshrike) on OpenGameArt one two three, clothes: ElizaWy, Marcel van de Steeg...<p class="more-link-wrap"><a href="https://saaadgames.com/2022/07/22/we-havent-been-dead/" class="more-link">Read More<span class="screen-reader-text"> &#8220;We haven&#8217;t been dead&#8230;&#8221;</span> &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<p>Just lazy about the blog.<br />Let me share a few new parts of our engine.</p>
<p>First, animation engine (by Maria) and <a href="https://www.mapeditor.org/">Tiled</a> map editor integration (by hugh):</p>


<figure class="wp-block-video"><video height="500" style="aspect-ratio: 600 / 500;" width="600" autoplay loop muted src="https://saaadgames.com/wp-content/uploads/2022/08/walkie.mp4" playsinline></video></figure>



<p>Credits for art used: </p>



<ul class="wp-block-list"><li>Map tiles: anonymous <a href="https://opengameart.org/content/overworld-grass-biome">OpenGameArt</a> contributor,</li><li>character: body/female/reptiles/red_winged.png: by Nila122, Johannes Sjölund (wulax), Stephen Challener (Redshrike) on OpenGameArt <a href="https://opengameart.org/content/liberated-pixel-cup-lpc-base-assets-sprites-map-tiles">one</a> <a href="https://opengameart.org/content/lpc-medieval-fantasy-character-sprites">two</a> <a href="https://opengameart.org/content/drakes-and-lizardfolk">three</a>, </li><li>clothes: ElizaWy, Marcel van de Steeg (MadMarcel) on OpenGame Art <a href="https://opengameart.org/content/lpc-female-orcogregoblintroll-base-walkcycle">one</a> <a href="https://opengameart.org/content/lpc-7-womens-shirts">two</a>.</li><li>clothes: bluecarrot16, David Conway Jr. (JaidynReiman), Joe White, Matthew Krohn (makrohn), Johannes Sjölund (wulax) on OpenGameArt <a href="https://opengameart.org/content/liberated-pixel-cup-lpc-base-assets-sprites-map-tiles">one</a> <a href="https://opengameart.org/content/lpc-medieval-fantasy-character-sprites">two</a></li><li>character sheet created in <a href="https://sanderfrenken.github.io/Universal-LPC-Spritesheet-Character-Generator/#?body=Humanlike_white&amp;sex=male">Universal-LPC-Spritesheet-Character-Generator</a>.</li></ul>
]]></content:encoded>
					
		
		<enclosure url="http://saaadgames.com/wp-content/uploads/2022/08/walkie.mp4" length="0" type="video/mp4" />

			</item>
		<item>
		<title>Firs half of August in Stepsons</title>
		<link>https://saaadgames.com/2021/08/15/firs-half-of-august-in-stepsons/</link>
		
		<dc:creator><![CDATA[hugh]]></dc:creator>
		<pubDate>Sun, 15 Aug 2021 06:45:22 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://stepsons.victorsergienko.com/?p=91</guid>

					<description><![CDATA[A lot of project have devlogs. It&#8217;s motivating, it may serve your promotion, but mainly it creates some connection with people who like your project. Legend, inspired me to continue blogging. In the last two weeks our prototype got: Shooting! You can: shoot volleys (the weapons are described in JSON and can be created arbitrarily);...<p class="more-link-wrap"><a href="https://saaadgames.com/2021/08/15/firs-half-of-august-in-stepsons/" class="more-link">Read More<span class="screen-reader-text"> &#8220;Firs half of August in Stepsons&#8221;</span> &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<p>A lot of project have devlogs. It&#8217;s motivating, it may serve your promotion, but mainly it creates some connection with people who like your project.</p>
<p><a href="https://legendrl.com/">Legend</a>, inspired me to continue blogging.</p>
<p>In the last two weeks our prototype got:</p>
<ul>
<li>Shooting! You can:
<ul>
<li>shoot volleys (the weapons are described in JSON and can be created arbitrarily);</li>
<li>kill mobs;</li>
<li>miss! (I invented an original weapon accuracy formula);</li>
<li>reload;</li>
<li>see the mob in focus, its HP and hit probability;</li>
</ul>
</li>
<li>Vision field (thanks to <a href="https://github.com/amethyst/bracket-lib">bracket-pathfinding</a>);</li>
</ul>
<p>An animated GIF is worth two thousand words, so here you go – a testing map, and then the data that defines it:</p>
<figure class="wp-block-image size-large is-style-default"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-92" src="https://saaadgames.com/wp-content/uploads/2021/08/rifrl-0.2.1.gif" alt="" width="1280" height="665"></figure>
<p></p>
<p>As some may notice, the demo is taking a bit of inspiration in my favorite roguelike, <a href="https://jupiterhell.com/">Jupiter Hell</a>. Go buy it. Yes, it is totally worth it. No, the price will not be lower.</p>
<hr>


<p>Our fantastic screenwriter has finished a scenario plan and is pushing me towards a minimal combat/plot demo. He&#8217;s absolutely correct, and it means I have to finalize the essential combat features like:</p>



<ul class="wp-block-list"><li>mob inventories;</li><li>simplistic monster AIs (wander, seek, shoot back);</li><li>time, (where each action may take a different amount of time, and this defines turn order);</li><li>shotguns;</li><li>melee;</li><li>cover;</li><li>(maybe) destructible environment;</li></ul>



<p>And non-combat plans for the demo:</p>



<ul class="wp-block-list"><li>redo the conversation UI – it&#8217;s supposed to be nonmodal;</li><li>and, very likely, migrate to graphics. With the tech I want (pixel graphics + lighting), it&#8217;s a huge task, but, er, I really want it.</li></ul>



<p></p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
