<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://blog.bitbebop.com</id>
    <title>Indie Gamedev by Johan Steen</title>
    <updated>2025-10-08T09:24:59.002Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <author>
        <name>Johan Steen</name>
        <uri>https://x.com/artstorm</uri>
    </author>
    <link rel="alternate" href="https://blog.bitbebop.com"/>
    <link rel="self" href="https://blog.bitbebop.com/atom.xml"/>
    <subtitle>Game development with Unity, C#, and related technologies to build amazing games as a solodev or small team.</subtitle>
    <logo>https://blog.bitbebop.com/favicon.svg</logo>
    <icon>https://blog.bitbebop.com/favicon.ico</icon>
    <rights>Copyright 2025, Johan Steen</rights>
    <category term="Technology"/>
    <category term="Game Development"/>
    <category term="Programming"/>
    <entry>
        <title type="html"><![CDATA[Unity Test Runner with TeamCity]]></title>
        <id>https://blog.bitbebop.com/unity-test-runner-teamcity/</id>
        <link href="https://blog.bitbebop.com/unity-test-runner-teamcity/"/>
        <link rel="enclosure" href="https://blog.bitbebop.com/_astro/unity-test-runner-teamcity.nrC-bwoz_ZGwkbI.jpg" type="image/jpg"/>
        <updated>2024-04-12T02:25:00.000Z</updated>
        <summary type="html"><![CDATA[Run Unity tests from a TeamCity build configuration in a DevOps pipeline.]]></summary>
        <content type="html"><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/unity-test-runner-teamcity.nrC-bwoz_ZGwkbI.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>
        <author>
            <name>Johan Steen</name>
            <uri>https://x.com/artstorm</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Gitea Status Checks with TeamCity]]></title>
        <id>https://blog.bitbebop.com/gitea-teamcity-status-checks/</id>
        <link href="https://blog.bitbebop.com/gitea-teamcity-status-checks/"/>
        <link rel="enclosure" href="https://blog.bitbebop.com/_astro/gitea-teamcity-status-checks.Cn6MPMWg_Z1OAzrf.jpg" type="image/jpg"/>
        <updated>2024-03-20T08:17:00.000Z</updated>
        <summary type="html"><![CDATA[Setup TeamCity to publish Gitea Status Checks in a DevOps pipeline.]]></summary>
        <content type="html"><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/gitea-teamcity-status-checks.Cn6MPMWg_Z1OAzrf.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>
        <author>
            <name>Johan Steen</name>
            <uri>https://x.com/artstorm</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Blitloop Devlog #1: Introduction]]></title>
        <id>https://blog.bitbebop.com/blitloop-devlog-1-intro/</id>
        <link href="https://blog.bitbebop.com/blitloop-devlog-1-intro/"/>
        <link rel="enclosure" href="https://blog.bitbebop.com/_astro/blitloop-devlog-1.D7bNWOS6_ZGiR3k.jpg" type="image/jpg"/>
        <updated>2023-12-03T07:19:00.000Z</updated>
        <summary type="html"><![CDATA[The first devlog episode documenting the making of Blitloop, a next-gen retro game built with Unity.]]></summary>
        <content type="html"><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/blitloop-devlog-1.D7bNWOS6_ZGiR3k.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>
        <author>
            <name>Johan Steen</name>
            <uri>https://x.com/artstorm</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[SpriteKit Safe Area]]></title>
        <id>https://blog.bitbebop.com/spritekit-safe-area/</id>
        <link href="https://blog.bitbebop.com/spritekit-safe-area/"/>
        <link rel="enclosure" href="https://blog.bitbebop.com/_astro/spritekit-safearea.DwzqsUTJ_ZpeNQt.jpg" type="image/jpg"/>
        <updated>2023-03-24T09:43:00.000Z</updated>
        <summary type="html"><![CDATA[Handle the screen's safe areas with collapsing margins in a SpriteKit SKScene.]]></summary>
        <content type="html"><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/spritekit-safearea.DwzqsUTJ_ZpeNQt.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>
        <author>
            <name>Johan Steen</name>
            <uri>https://x.com/artstorm</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Game Event System with Swift]]></title>
        <id>https://blog.bitbebop.com/game-event-system-swift/</id>
        <link href="https://blog.bitbebop.com/game-event-system-swift/"/>
        <link rel="enclosure" href="https://blog.bitbebop.com/_astro/game-event-system-swift.BnPYWvWA_Zh1sEG.jpg" type="image/jpg"/>
        <updated>2022-05-30T12:05:00.000Z</updated>
        <summary type="html"><![CDATA[Build an event system with Swift for a highly modular game architecture using isolated game systems without hard dependencies.]]></summary>
        <content type="html"><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/game-event-system-swift.BnPYWvWA_Zh1sEG.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>
        <author>
            <name>Johan Steen</name>
            <uri>https://x.com/artstorm</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Game Center Achievements with Swift]]></title>
        <id>https://blog.bitbebop.com/game-center-gkachievement-swift/</id>
        <link href="https://blog.bitbebop.com/game-center-gkachievement-swift/"/>
        <link rel="enclosure" href="https://blog.bitbebop.com/_astro/game-center-gkachievement-swift.DojUfZ8u_1Fxc8l.jpg" type="image/jpg"/>
        <updated>2022-05-08T04:04:00.000Z</updated>
        <summary type="html"><![CDATA[Use Swift to manage Game Center Achievements and report progress with decoupled condition logic.]]></summary>
        <content type="html"><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/game-center-gkachievement-swift.DojUfZ8u_1Fxc8l.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>
        <author>
            <name>Johan Steen</name>
            <uri>https://x.com/artstorm</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Sprite Component in GameplayKit]]></title>
        <id>https://blog.bitbebop.com/swift-gameplaykit-sprite-component/</id>
        <link href="https://blog.bitbebop.com/swift-gameplaykit-sprite-component/"/>
        <link rel="enclosure" href="https://blog.bitbebop.com/_astro/gameplaykit-sprite-component.BvPgNU46_Z2p70qD.jpg" type="image/jpg"/>
        <updated>2022-05-01T04:04:00.000Z</updated>
        <summary type="html"><![CDATA[Use a dedicated sprite component with GameplayKit using Swift to decouple rendering from transformations.]]></summary>
        <content type="html"><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/gameplaykit-sprite-component.BvPgNU46_Z2p70qD.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>
        <author>
            <name>Johan Steen</name>
            <uri>https://x.com/artstorm</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Game Input System in Swift]]></title>
        <id>https://blog.bitbebop.com/swift-game-input-system/</id>
        <link href="https://blog.bitbebop.com/swift-game-input-system/"/>
        <link rel="enclosure" href="https://blog.bitbebop.com/_astro/swift-game-input-system.CcnACohU_Z2d2Ros.jpg" type="image/jpg"/>
        <updated>2022-04-24T08:42:00.000Z</updated>
        <summary type="html"><![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.]]></summary>
        <content type="html"><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/swift-game-input-system.CcnACohU_Z2d2Ros.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>
        <author>
            <name>Johan Steen</name>
            <uri>https://x.com/artstorm</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Transform Component in GameplayKit]]></title>
        <id>https://blog.bitbebop.com/gameplaykit-transform-component/</id>
        <link href="https://blog.bitbebop.com/gameplaykit-transform-component/"/>
        <link rel="enclosure" href="https://blog.bitbebop.com/_astro/gameplaykit-transform-component.CiLFEQJT_cBwaF.jpg" type="image/jpg"/>
        <updated>2022-04-17T05:08:00.000Z</updated>
        <summary type="html"><![CDATA[Create a transform component for GameplayKit in Swift to get a clean and robust API for everything related to position, rotation, and scale.]]></summary>
        <content type="html"><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/gameplaykit-transform-component.CiLFEQJT_cBwaF.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>
        <author>
            <name>Johan Steen</name>
            <uri>https://x.com/artstorm</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Batch Remove System for GameplayKit Entities]]></title>
        <id>https://blog.bitbebop.com/gameplaykit-remove-component/</id>
        <link href="https://blog.bitbebop.com/gameplaykit-remove-component/"/>
        <link rel="enclosure" href="https://blog.bitbebop.com/_astro/gameplaykit-remove-component.D3XLtz6C_Z1ngIlh.jpg" type="image/jpg"/>
        <updated>2022-04-10T07:42:00.000Z</updated>
        <summary type="html"><![CDATA[Flag and batch remove objects from the game world by using a GameplayKit component and component system with Swift.]]></summary>
        <content type="html"><![CDATA[<p><img src="https://blog.bitbebop.com/_astro/gameplaykit-remove-component.D3XLtz6C_Z1ngIlh.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>
        <author>
            <name>Johan Steen</name>
            <uri>https://x.com/artstorm</uri>
        </author>
    </entry>
</feed>