<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Indie Gamedev by Johan Steen</title>
        <link>https://blog.bitbebop.com</link>
        <description>Game development with Unity, C#, and related technologies to build amazing games as a solodev or small team.</description>
        <lastBuildDate>Tue, 07 Apr 2026 16:37:28 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Indie Gamedev by Johan Steen</title>
            <url>https://blog.bitbebop.com/favicon.svg</url>
            <link>https://blog.bitbebop.com</link>
        </image>
        <copyright>Copyright 2026, Johan Steen</copyright>
        <category>Technology</category>
        <category>Game Development</category>
        <category>Programming</category>
        <atom:link href="https://blog.bitbebop.com/rss.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Unity Test Runner with TeamCity]]></title>
            <link>https://blog.bitbebop.com/unity-test-runner-teamcity/</link>
            <guid isPermaLink="false">https://blog.bitbebop.com/unity-test-runner-teamcity/</guid>
            <pubDate>Fri, 12 Apr 2024 02:25:00 GMT</pubDate>
            <description><![CDATA[Run Unity tests from a TeamCity build configuration in a DevOps pipeline.]]></description>
            <content:encoded><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/unity-test-runner-teamcity.nrC-bwoz_1vx94K.jpg" /></p><p>Run Unity tests from a TeamCity build configuration in a DevOps pipeline.</p><p>Read the <a href="https://blog.bitbebop.com/unity-test-runner-teamcity/">full article on bitbebop.com</a></p>]]></content:encoded>
            <author>Johan Steen</author>
            <enclosure url="https://blog.bitbebop.com/_astro/unity-test-runner-teamcity.nrC-bwoz_1vx94K.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Gitea Status Checks with TeamCity]]></title>
            <link>https://blog.bitbebop.com/gitea-teamcity-status-checks/</link>
            <guid isPermaLink="false">https://blog.bitbebop.com/gitea-teamcity-status-checks/</guid>
            <pubDate>Wed, 20 Mar 2024 08:17:00 GMT</pubDate>
            <description><![CDATA[Setup TeamCity to publish Gitea Status Checks in a DevOps pipeline.]]></description>
            <content:encoded><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/gitea-teamcity-status-checks.Cn6MPMWg_uK6V2.jpg" /></p><p>Setup TeamCity to publish Gitea Status Checks in a DevOps pipeline.</p><p>Read the <a href="https://blog.bitbebop.com/gitea-teamcity-status-checks/">full article on bitbebop.com</a></p>]]></content:encoded>
            <author>Johan Steen</author>
            <enclosure url="https://blog.bitbebop.com/_astro/gitea-teamcity-status-checks.Cn6MPMWg_uK6V2.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Blitloop Devlog #1: Introduction]]></title>
            <link>https://blog.bitbebop.com/blitloop-devlog-1-intro/</link>
            <guid isPermaLink="false">https://blog.bitbebop.com/blitloop-devlog-1-intro/</guid>
            <pubDate>Sun, 03 Dec 2023 07:19:00 GMT</pubDate>
            <description><![CDATA[The first devlog episode documenting the making of Blitloop, a next-gen retro game built with Unity.]]></description>
            <content:encoded><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/blitloop-devlog-1.D7bNWOS6_ZVJOfa.jpg" /></p><p>The first devlog episode documenting the making of Blitloop, a next-gen retro game built with Unity.</p><p>Read the <a href="https://blog.bitbebop.com/blitloop-devlog-1-intro/">full article on bitbebop.com</a></p>]]></content:encoded>
            <author>Johan Steen</author>
            <enclosure url="https://blog.bitbebop.com/_astro/blitloop-devlog-1.D7bNWOS6_ZVJOfa.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[SpriteKit Safe Area]]></title>
            <link>https://blog.bitbebop.com/spritekit-safe-area/</link>
            <guid isPermaLink="false">https://blog.bitbebop.com/spritekit-safe-area/</guid>
            <pubDate>Fri, 24 Mar 2023 09:43:00 GMT</pubDate>
            <description><![CDATA[Handle the screen's safe areas with collapsing margins in a SpriteKit SKScene.]]></description>
            <content:encoded><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/spritekit-safearea.DwzqsUTJ_1TrSKt.jpg" /></p><p>Handle the screen's safe areas with collapsing margins in a SpriteKit SKScene.</p><p>Read the <a href="https://blog.bitbebop.com/spritekit-safe-area/">full article on bitbebop.com</a></p>]]></content:encoded>
            <author>Johan Steen</author>
            <enclosure url="https://blog.bitbebop.com/_astro/spritekit-safearea.DwzqsUTJ_1TrSKt.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Game Event System with Swift]]></title>
            <link>https://blog.bitbebop.com/game-event-system-swift/</link>
            <guid isPermaLink="false">https://blog.bitbebop.com/game-event-system-swift/</guid>
            <pubDate>Mon, 30 May 2022 12:05:00 GMT</pubDate>
            <description><![CDATA[Build an event system with Swift for a highly modular game architecture using isolated game systems without hard dependencies.]]></description>
            <content:encoded><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/game-event-system-swift.BnPYWvWA_1SKoNx.jpg" /></p><p>Build an event system with Swift for a highly modular game architecture using isolated game systems without hard dependencies.</p><p>Read the <a href="https://blog.bitbebop.com/game-event-system-swift/">full article on bitbebop.com</a></p>]]></content:encoded>
            <author>Johan Steen</author>
            <enclosure url="https://blog.bitbebop.com/_astro/game-event-system-swift.BnPYWvWA_1SKoNx.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Game Center Achievements with Swift]]></title>
            <link>https://blog.bitbebop.com/game-center-gkachievement-swift/</link>
            <guid isPermaLink="false">https://blog.bitbebop.com/game-center-gkachievement-swift/</guid>
            <pubDate>Sun, 08 May 2022 04:04:00 GMT</pubDate>
            <description><![CDATA[Use Swift to manage Game Center Achievements and report progress with decoupled condition logic.]]></description>
            <content:encoded><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/game-center-gkachievement-swift.DojUfZ8u_Zmc6VI.jpg" /></p><p>Use Swift to manage Game Center Achievements and report progress with decoupled condition logic.</p><p>Read the <a href="https://blog.bitbebop.com/game-center-gkachievement-swift/">full article on bitbebop.com</a></p>]]></content:encoded>
            <author>Johan Steen</author>
            <enclosure url="https://blog.bitbebop.com/_astro/game-center-gkachievement-swift.DojUfZ8u_Zmc6VI.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Sprite Component in GameplayKit]]></title>
            <link>https://blog.bitbebop.com/swift-gameplaykit-sprite-component/</link>
            <guid isPermaLink="false">https://blog.bitbebop.com/swift-gameplaykit-sprite-component/</guid>
            <pubDate>Sun, 01 May 2022 04:04:00 GMT</pubDate>
            <description><![CDATA[Use a dedicated sprite component with GameplayKit using Swift to decouple rendering from transformations.]]></description>
            <content:encoded><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/gameplaykit-sprite-component.BvPgNU46_Z4Kj3m.jpg" /></p><p>Use a dedicated sprite component with GameplayKit using Swift to decouple rendering from transformations.</p><p>Read the <a href="https://blog.bitbebop.com/swift-gameplaykit-sprite-component/">full article on bitbebop.com</a></p>]]></content:encoded>
            <author>Johan Steen</author>
            <enclosure url="https://blog.bitbebop.com/_astro/gameplaykit-sprite-component.BvPgNU46_Z4Kj3m.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Game Input System in Swift]]></title>
            <link>https://blog.bitbebop.com/swift-game-input-system/</link>
            <guid isPermaLink="false">https://blog.bitbebop.com/swift-game-input-system/</guid>
            <pubDate>Sun, 24 Apr 2022 08:42:00 GMT</pubDate>
            <description><![CDATA[Build a rock solid and reusable game input system in Swift. It works with all of Apple's game frameworks and is device agnostic.]]></description>
            <content:encoded><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/swift-game-input-system.CcnACohU_Z2fYUe.jpg" /></p><p>Build a rock solid and reusable game input system in Swift. It works with all of Apple's game frameworks and is device agnostic.</p><p>Read the <a href="https://blog.bitbebop.com/swift-game-input-system/">full article on bitbebop.com</a></p>]]></content:encoded>
            <author>Johan Steen</author>
            <enclosure url="https://blog.bitbebop.com/_astro/swift-game-input-system.CcnACohU_Z2fYUe.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Transform Component in GameplayKit]]></title>
            <link>https://blog.bitbebop.com/gameplaykit-transform-component/</link>
            <guid isPermaLink="false">https://blog.bitbebop.com/gameplaykit-transform-component/</guid>
            <pubDate>Sun, 17 Apr 2022 05:08:00 GMT</pubDate>
            <description><![CDATA[Create a transform component for GameplayKit in Swift to get a clean and robust API for everything related to position, rotation, and scale.]]></description>
            <content:encoded><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/gameplaykit-transform-component.CiLFEQJT_Z1P7LTo.jpg" /></p><p>Create a transform component for GameplayKit in Swift to get a clean and robust API for everything related to position, rotation, and scale.</p><p>Read the <a href="https://blog.bitbebop.com/gameplaykit-transform-component/">full article on bitbebop.com</a></p>]]></content:encoded>
            <author>Johan Steen</author>
            <enclosure url="https://blog.bitbebop.com/_astro/gameplaykit-transform-component.CiLFEQJT_Z1P7LTo.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Batch Remove System for GameplayKit Entities]]></title>
            <link>https://blog.bitbebop.com/gameplaykit-remove-component/</link>
            <guid isPermaLink="false">https://blog.bitbebop.com/gameplaykit-remove-component/</guid>
            <pubDate>Sun, 10 Apr 2022 07:42:00 GMT</pubDate>
            <description><![CDATA[Flag and batch remove objects from the game world by using a GameplayKit component and component system with Swift.]]></description>
            <content:encoded><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/gameplaykit-remove-component.D3XLtz6C_W4X20.jpg" /></p><p>Flag and batch remove objects from the game world by using a GameplayKit component and component system with Swift.</p><p>Read the <a href="https://blog.bitbebop.com/gameplaykit-remove-component/">full article on bitbebop.com</a></p>]]></content:encoded>
            <author>Johan Steen</author>
            <enclosure url="https://blog.bitbebop.com/_astro/gameplaykit-remove-component.D3XLtz6C_W4X20.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>