{
    "version": "https://jsonfeed.org/version/1",
    "title": "Indie Gamedev by Johan Steen",
    "home_page_url": "https://blog.bitbebop.com",
    "feed_url": "https://blog.bitbebop.com/feed.json",
    "description": "Game development with Unity, C#, and related technologies to build amazing games as a solodev or small team.",
    "icon": "https://blog.bitbebop.com/favicon.svg",
    "author": {
        "name": "Johan Steen",
        "url": "https://x.com/artstorm"
    },
    "items": [
        {
            "id": "https://blog.bitbebop.com/unity-test-runner-teamcity/",
            "content_html": "<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>",
            "url": "https://blog.bitbebop.com/unity-test-runner-teamcity/",
            "title": "Unity Test Runner with TeamCity",
            "summary": "Run Unity tests from a TeamCity build configuration in a DevOps pipeline.",
            "image": "https://blog.bitbebop.com/_astro/unity-test-runner-teamcity.nrC-bwoz_1vx94K.jpg",
            "date_modified": "2024-04-12T02:25:00.000Z",
            "author": {
                "name": "Johan Steen",
                "url": "https://x.com/artstorm"
            }
        },
        {
            "id": "https://blog.bitbebop.com/gitea-teamcity-status-checks/",
            "content_html": "<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>",
            "url": "https://blog.bitbebop.com/gitea-teamcity-status-checks/",
            "title": "Gitea Status Checks with TeamCity",
            "summary": "Setup TeamCity to publish Gitea Status Checks in a DevOps pipeline.",
            "image": "https://blog.bitbebop.com/_astro/gitea-teamcity-status-checks.Cn6MPMWg_uK6V2.jpg",
            "date_modified": "2024-03-20T08:17:00.000Z",
            "author": {
                "name": "Johan Steen",
                "url": "https://x.com/artstorm"
            }
        },
        {
            "id": "https://blog.bitbebop.com/blitloop-devlog-1-intro/",
            "content_html": "<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>",
            "url": "https://blog.bitbebop.com/blitloop-devlog-1-intro/",
            "title": "Blitloop Devlog #1: Introduction",
            "summary": "The first devlog episode documenting the making of Blitloop, a next-gen retro game built with Unity.",
            "image": "https://blog.bitbebop.com/_astro/blitloop-devlog-1.D7bNWOS6_ZVJOfa.jpg",
            "date_modified": "2023-12-03T07:19:00.000Z",
            "author": {
                "name": "Johan Steen",
                "url": "https://x.com/artstorm"
            }
        },
        {
            "id": "https://blog.bitbebop.com/spritekit-safe-area/",
            "content_html": "<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>",
            "url": "https://blog.bitbebop.com/spritekit-safe-area/",
            "title": "SpriteKit Safe Area",
            "summary": "Handle the screen's safe areas with collapsing margins in a SpriteKit SKScene.",
            "image": "https://blog.bitbebop.com/_astro/spritekit-safearea.DwzqsUTJ_1TrSKt.jpg",
            "date_modified": "2023-03-24T09:43:00.000Z",
            "author": {
                "name": "Johan Steen",
                "url": "https://x.com/artstorm"
            }
        },
        {
            "id": "https://blog.bitbebop.com/game-event-system-swift/",
            "content_html": "<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>",
            "url": "https://blog.bitbebop.com/game-event-system-swift/",
            "title": "Game Event System with Swift",
            "summary": "Build an event system with Swift for a highly modular game architecture using isolated game systems without hard dependencies.",
            "image": "https://blog.bitbebop.com/_astro/game-event-system-swift.BnPYWvWA_1SKoNx.jpg",
            "date_modified": "2022-05-30T12:05:00.000Z",
            "author": {
                "name": "Johan Steen",
                "url": "https://x.com/artstorm"
            }
        },
        {
            "id": "https://blog.bitbebop.com/game-center-gkachievement-swift/",
            "content_html": "<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>",
            "url": "https://blog.bitbebop.com/game-center-gkachievement-swift/",
            "title": "Game Center Achievements with Swift",
            "summary": "Use Swift to manage Game Center Achievements and report progress with decoupled condition logic.",
            "image": "https://blog.bitbebop.com/_astro/game-center-gkachievement-swift.DojUfZ8u_Zmc6VI.jpg",
            "date_modified": "2022-05-08T04:04:00.000Z",
            "author": {
                "name": "Johan Steen",
                "url": "https://x.com/artstorm"
            }
        },
        {
            "id": "https://blog.bitbebop.com/swift-gameplaykit-sprite-component/",
            "content_html": "<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>",
            "url": "https://blog.bitbebop.com/swift-gameplaykit-sprite-component/",
            "title": "Sprite Component in GameplayKit",
            "summary": "Use a dedicated sprite component with GameplayKit using Swift to decouple rendering from transformations.",
            "image": "https://blog.bitbebop.com/_astro/gameplaykit-sprite-component.BvPgNU46_Z4Kj3m.jpg",
            "date_modified": "2022-05-01T04:04:00.000Z",
            "author": {
                "name": "Johan Steen",
                "url": "https://x.com/artstorm"
            }
        },
        {
            "id": "https://blog.bitbebop.com/swift-game-input-system/",
            "content_html": "<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>",
            "url": "https://blog.bitbebop.com/swift-game-input-system/",
            "title": "Game Input System in Swift",
            "summary": "Build a rock solid and reusable game input system in Swift. It works with all of Apple's game frameworks and is device agnostic.",
            "image": "https://blog.bitbebop.com/_astro/swift-game-input-system.CcnACohU_Z2fYUe.jpg",
            "date_modified": "2022-04-24T08:42:00.000Z",
            "author": {
                "name": "Johan Steen",
                "url": "https://x.com/artstorm"
            }
        },
        {
            "id": "https://blog.bitbebop.com/gameplaykit-transform-component/",
            "content_html": "<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>",
            "url": "https://blog.bitbebop.com/gameplaykit-transform-component/",
            "title": "Transform Component in GameplayKit",
            "summary": "Create a transform component for GameplayKit in Swift to get a clean and robust API for everything related to position, rotation, and scale.",
            "image": "https://blog.bitbebop.com/_astro/gameplaykit-transform-component.CiLFEQJT_Z1P7LTo.jpg",
            "date_modified": "2022-04-17T05:08:00.000Z",
            "author": {
                "name": "Johan Steen",
                "url": "https://x.com/artstorm"
            }
        },
        {
            "id": "https://blog.bitbebop.com/gameplaykit-remove-component/",
            "content_html": "<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>",
            "url": "https://blog.bitbebop.com/gameplaykit-remove-component/",
            "title": "Batch Remove System for GameplayKit Entities",
            "summary": "Flag and batch remove objects from the game world by using a GameplayKit component and component system with Swift.",
            "image": "https://blog.bitbebop.com/_astro/gameplaykit-remove-component.D3XLtz6C_W4X20.jpg",
            "date_modified": "2022-04-10T07:42:00.000Z",
            "author": {
                "name": "Johan Steen",
                "url": "https://x.com/artstorm"
            }
        }
    ]
}