[HN Gopher] Swift and the Cute 2d game framework: Setting up a p...
       ___________________________________________________________________
        
       Swift and the Cute 2d game framework: Setting up a project with
       CMake
        
       Author : pusewicz
       Score  : 76 points
       Date   : 2025-06-06 11:15 UTC (11 hours ago)
        
 (HTM) web link (layer22.com)
 (TXT) w3m dump (layer22.com)
        
       | DavidPiper wrote:
       | Snap, I did something similar a few weeks ago (without the cool
       | PoC) - github.com/davidrpiper/SwiftCmakeModulemapMVP
       | 
       | Now that Swift + SourceKit LSP + VS Code is a viable environment,
       | and CMake supports C/C++ and Swift interop out-of-the-box, I'm
       | keen to start using Swift for more cross-platform things.
        
         | pusewicz wrote:
         | I'm wondering if there will be anything new and cool announced
         | next week during the WWDC in regards to Swift inter-op and
         | cross-platform.
        
       | titouanch wrote:
       | Maybe a dumb question, but can this be used to make games for
       | other platforms than MacOS & iOS?
       | 
       | My (limited) understanding is that Swift is mostly used to make
       | iOS apps.
        
         | DavidPiper wrote:
         | Yep, I've been meaning to get a Swift + SDL project working.
         | 
         | The language itself is not limited to Apple platforms, and
         | there are compilers for many others, but until now all the
         | surrounding tooling (IDEs, Swift Package Manager, build
         | toolchain(s), C/C++ interop) has been less than ideal for all
         | non-Apple platforms. Arguably less than ideal on Apple
         | platforms too in some cases ;)
         | 
         | There is still a big difference between "I have Xcode" and "I
         | have VSCode + a large manual toolchain", but the gap is
         | closing. CMake can also generate Xcode projects which is a nice
         | touch when bringing cross-platform code back to Apple
         | platforms.
        
           | pusewicz wrote:
           | https://github.com/KevinVitale/SwiftSDL is a good starting
           | point and already supports macOS and Linux out of the box.
        
         | zombot wrote:
         | https://www.swift.org/install
         | 
         | macOS, Linux, Windoze
        
           | JKCalhoun wrote:
           | Thanks. It looks like CMake + SDL2(3) would add some gaming
           | platforms like Nintendo, etc. (if that's important to you).
        
       | krzat wrote:
       | For Swift, it would be more natural to use SPM instead of CMake.
        
         | pusewicz wrote:
         | It would be, but also more cumbersome to get it up and running.
         | Not impossible, though!
        
       | 90s_dev wrote:
       | Last night I tried for maybe about 6 hours so many combinations
       | of efforts to compile a C++, SDL3 and Lua program on Windows,
       | with different IDEs, build systems, compilers, package managers
       | etc. Finally I'm just giving up and using VS with CMake and
       | vcpkg. The main problem is that there's way too many words on all
       | those documentation pages. It would have taken 3 or 4 days to
       | read them all, and maybe only 2 hours worth of it would have been
       | helpful or relevant at all.
        
         | raincole wrote:
         | I wonder if there is a SDL3 wrapper that comes with a scripting
         | language[0], hot reload and build scripts for every major
         | platform.
         | 
         | Love2D seems close to that, but afaik it doesn't support SDL3
         | features like the new GPU API.
         | 
         | [0]: It's not like I'm allergic to C++, but I firmly believe
         | when developing something that is mostly interactive, such as
         | complex GUI or games, a language that is garbage collected and
         | can be hot reloaded would be much more apt.
        
           | pusewicz wrote:
           | Try https://dragonruby.org/. It's great! Still on SDL2, but
           | will migrate to SDL3 eventually.
           | 
           | Code reload (because it uses MRuby) is just :chef-kiss:
        
             | raincole wrote:
             | It looks like Love2D, except you pay $50 to use Ruby
             | instead of Lua (admittedly I think Ruby is a better
             | language.)
             | 
             | I haven't used DragonRuby though, so if my above snarky
             | comment is off please point me out.
        
               | pusewicz wrote:
               | Very often you can snatch free copies. Join the Discord.
               | Just ask :)
        
               | 90s_dev wrote:
               | As someone who dreams of making a living selling software
               | that I've poured years and years into, that comment makes
               | me very sad.
        
               | pusewicz wrote:
               | But why?
        
               | 90s_dev wrote:
               | Why do I want to make money from my hard work? Or why am
               | I sad when someone offers a way to bypass paying money
               | for hard work to get something for free?
        
               | fatihpense wrote:
               | I assumed the original developers might give free copies
               | in the official discord
        
               | pusewicz wrote:
               | This.
        
               | pusewicz wrote:
               | I meant that the author of DragonRuby is generous. And
               | depending on your use case he might be willing to give
               | you a free copy. Additionally, whenever there is a
               | gamejam related to DragonRuby, he usually gives away free
               | copies to anyone who wants to participate. For you to
               | keep. Nobody said anything about bypassing paying money.
               | Not sure what you were thinking.
        
               | 90s_dev wrote:
               | To be honest I was just not giving the benefit of the
               | doubt to the comment I was replying to. I should practice
               | that.
        
             | python-b5 wrote:
             | DragonRuby seems interesting, but being a paid product
             | immediately rules it out for me. I've been working on my
             | own similar, smaller framework, which is more work, but I
             | believe it's valuable not to depend on a for-profit company
             | for your work, if at all possible.
             | 
             | Also, the attitude much of the wiki / promotional pages are
             | written in for that framework runs me the wrong way for
             | some reason. "Unity and GameMaker rot your brain"... are
             | you kidding me? No they don't. You're still writing real
             | code and solving real problems. They just have more systems
             | in place you have to work within. I don't like the self-
             | righteous attitude. It's fair to not want to go open source
             | if that's your preference, but don't act like people who
             | don't want to use closed-source software where possible are
             | being unreasonable. I also don't see how what is
             | effectively a Ruby wrapper for SDL3 is such an immensely
             | complicated piece of engineering that it needs to cost as
             | much as they're charging for it.
        
               | pusewicz wrote:
               | It's not just a wrapper. There's more to it than you
               | might think. It's easy to say ,,just" without spending
               | time understanding what a tool does.
        
           | 90s_dev wrote:
           | That's what I'm working on, basically love2d but SDL3 and
           | TS/JS (via QuickJS). And no box2d builtin, but easily
           | importable via CDN.
        
             | 90s_dev wrote:
             | ... at least if I can get the simplest Visual Studio +
             | CMake + vcpkg hello world working.
             | 
             | Which I can't.
             | 
             | This always happens every few years. It takes me about a
             | week to get a C++ program compiling and running, and by the
             | end of it, I've lost all motivation, forget how any of it
             | works, and delete it all and move back to TypeScript/web
             | stuff. At least that I know despite all its warts.
             | 
             | [edit] figured it out
             | 
             | Hello me from the future, googling this in a few years.
             | It's actually really simple: just follow the same steps on
             | that page you were on[1] except you HAVE TO run the `vcpkg
             | new --application` and `vcpkg add port fmt` commands in the
             | dev cmd prompt, you can't just add the file manually for
             | some reason, even though that's all it _seems_ like it 's
             | doing.
             | 
             | [1] https://learn.microsoft.com/en-
             | us/vcpkg/get_started/get-star...
        
             | raincole wrote:
             | That's my idea stack as well (I tried to build something
             | like SDL2 + V8 at some point but ended up giving up...) If
             | you have a repo/website set up please leave a link for me
             | to follow :)
        
               | 90s_dev wrote:
               | Yeah sure https://github.com/sdegutis/minigamemaker
               | placeholder.
        
             | CJefferson wrote:
             | Obviously you can do what you like, but I'd advise making
             | sure box2d (or similar) is super easy. Bonus points if
             | there is also a built in function for drawing box2d
             | objects.
             | 
             | I've often taught beginning game dev in a day, and with
             | box2d in love2d you can very quickly make a wide selection
             | of cool games, and while it's not perfect it makes it easy
             | to get started making platforms, doing collisions, all
             | sorts of things.
        
               | 90s_dev wrote:
               | Fair enough, maybe I'll include it after all. Unless I
               | get hung up on the question of which physics engine to
               | include. Endless possibilities make decisions difficult.
        
           | krapp wrote:
           | You can build a project linking SDL3 with Lua and have access
           | to all of the features of SDL3, with the obvious caveat that
           | you'll have to code the rest of the owl yourself, but it
           | isn't difficult. I have a basic CMake script that I use for
           | projects and it works fine. (also, obviously you can just run
           | the Lua code locally and skip the build process altogether
           | when developing.) I use LuaJIT though, and the FFI generator
           | here[0].
           | 
           | [0]https://github.com/sonoro1234/LuaJIT-SDL3
        
         | dustbunny wrote:
         | I agree. I used chatgpt to write a makefile to compile
         | sokol+Tracy. It's a pretty solid, generic makefile. But "build
         | system complexity" pushed me away from sdl, magnum graphics and
         | bgfx into the arms of sokol.
         | 
         | And I'm a 10+ year gamedev.
         | 
         | Out of all of c++'s sins, the lack of a solid integrated build
         | system is the one that bites me the most.
        
           | 90s_dev wrote:
           | My theory is that good C++ devs haven't yet made a simple yet
           | powerful build system because they're too busy making lots
           | and lots of money writing enterprise C++.
        
             | dazzawazza wrote:
             | We all just accepted CMake. It's not perfect but it works.
             | C++ with SDL and Lua in a mono repo should be trivial. SDL3
             | supports CMake and Lua is simple to compile and make a
             | CMakeLists.txt for.
        
               | verall wrote:
               | This is correct. It has the key things that most C++ devs
               | tend to care about:
               | 
               | - Cross platform support well integrating into "native"
               | tooling
               | 
               | - Endless ability to add weird hacks to things to get
               | around problems
               | 
               | The syntax is ...passable. I've never gotten a java
               | stacktrace during a build failure (ahem bazel ahem).
               | 
               | It's straightforward enough to do the horrible things
               | that C++ devs do all of the time like having 3
               | dependencies from system apt, 2 vendored, actually a 3rd
               | is vendored but only used on windows, where the other 2
               | come from vcpkg, and 4 of these are statically linked but
               | the last (openssl) is dynamic and accepts any version in
               | order to support both ubuntu LTS and arch, but shipped as
               | a dll on windows.
               | 
               | I have prayed before the CMake gods and they have
               | accepted me.
        
             | shortrounddev2 wrote:
             | Visual Studio + MSBuild is simple if you're okay with IDEs
        
           | dieortin wrote:
           | I really recommend Bazel (https://bazel.build)
        
             | pusewicz wrote:
             | What us better about it?
        
               | dieortin wrote:
               | Quite a few things. For a C++ only project, the biggest
               | ones would be reproducibility and speed. But beyond
               | those, I find it saner overall: the language is way
               | easier to understand (~python), and the model of
               | packages, targets, visibility etc makes it easy to
               | organize and manage a large codebase.
               | 
               | The worst part about Bazel for C++ is that it's not yet
               | as widespread as CMake or plain old Makefiles so it can
               | be harder to get third party libraries into your project,
               | but that's changing quite fast with the bazel registry,
               | and you have things like rules_cc that help you run other
               | build systems inside bazel.
        
         | rudedogg wrote:
         | If you're interested in Zig check out
         | https://github.com/castholm/SDL.
         | 
         | Try the breakout example, I play around with it a lot. You'll
         | just need the Zig 0.14 compiler and it should be painless.
        
           | 90s_dev wrote:
           | Something about me has always wanted to learn and master C++.
           | I've read through Stroustrup's book almost entirely, and
           | still never written a single line of C++. I don't know why I
           | have this goal in life, but I do. This project _still_ doesn
           | 't do that, since I'm just wrapping SDL3 with QuickJS and
           | will probably almost entirely just write C functions to do it
           | with. But a man can dream.
        
         | syspec wrote:
         | What's the relation of your comment to this blog post?
        
           | 90s_dev wrote:
           | Mainly it just reminded me of what happened last night and
           | seemed like good timing because of the similarity, but also I
           | appreciate blog posts that are short and get right to the
           | point of how to do something.
           | 
           | Half of the problems I got past were thanks to odd blog posts
           | like this with code snippets that I found on google and got
           | me unstuck immediately.
        
       | 90s_dev wrote:
       | Cute looks like a modern version of SDL or maybge SFML[1]. Anyone
       | have any experience with it?
       | 
       | [1] https://news.ycombinator.com/item?id=19677201
        
         | pusewicz wrote:
         | Cute uses SDL3 under the hood, but provides an entire framework
         | for game development, ready to use.
         | 
         | It loads Aseprite files automatically, manages animations,
         | collisions, networking, what have you.
        
           | 90s_dev wrote:
           | Ah thanks Piotr, also Cute looks very useful, great job.
        
             | pusewicz wrote:
             | It's not mine, I'm just a fan myself!
        
               | 90s_dev wrote:
               | Well as a fan you certainly commit a lot https://github.c
               | om/RandyGaul/cute_framework/commits/master/
        
               | pusewicz wrote:
               | Sure, but it's not me who built the whole framework. My
               | contributions are fairly superficial.
        
           | raincole wrote:
           | Since it uses SDL3, it should be able to do more than 2D,
           | right? Last time I checked SDL3 wraps around a lot of GPU API
           | that you can pretty much do whatever you can do with WebGPU.
        
             | pusewicz wrote:
             | Yeah. It's just tailored for 2D gamedev. Cute uses the new
             | SDL3 GPU API internally. Shaders and sprite batching,
             | automatic sprite atlases etc. that Cute provides is just
             | very specific to 2D games.
        
               | 90s_dev wrote:
               | 2d is the ideal for gamedev, always has been. I was so
               | sad when Mario 64 came out and they moved on from Super
               | Mario World's perfection. Fortunately the world is coming
               | back to its senses with games like Animal Well.
        
       | kookamamie wrote:
       | > For many games variable timestep is a good choice.
       | 
       | It really isn't.
        
         | pusewicz wrote:
         | You can use fixed time step. Choice is yours.
        
           | OnionBlender wrote:
           | What's funny is that searching for "cute framework fixed
           | timestep" in Google points to this Hacker News thread as the
           | first result. What I would have wanted to find is this page:
           | 
           | https://randygaul.github.io/cute_framework/#/topics/game_loo.
           | ..
        
             | pusewicz wrote:
             | LOL
        
             | kookamamie wrote:
             | Very sorry about that :D
        
         | all2 wrote:
         | If you divorce the game's time-step from your math it isn't too
         | much of an issue. You just need to keep track of the time-delta
         | so you have it for your calculations.
        
           | kookamamie wrote:
           | Gaffer has summarized most of this quite well years ago. E.g.
           | https://gafferongames.com/post/fix_your_timestep/
        
         | 90s_dev wrote:
         | Care to elaborate?
        
           | kookamamie wrote:
           | Assuming the timestep refers to the parts of code dealing
           | with game logic updates, such as physics or motion, variable-
           | sized steps tend to cause nasty issues. Collision detection
           | is an example, where variability is undesired.
        
           | pusewicz wrote:
           | https://randygaul.github.io/cute_framework/#/topics/game_loo.
           | ..
           | 
           | You can request a fixed timestep, and your own loop callback
           | will be called at fixed intervals, which allows you to
           | completely ignore delta time.
        
       | Kon-Peki wrote:
       | > And voila!
       | 
       | Come on, if you're going to spell "voila" correctly, you might as
       | well use it correctly too. "Et voila!", not "And voila!" :)
        
         | pusewicz wrote:
         | FINE
        
       | corytheboyd wrote:
       | Hah I just recently was doing some soul searching for a game dev
       | environment to get started with. I did a wee bit of 2D game dev
       | in college 15 years ago, and wanted to scratch the same itch.
       | 
       | At this point, I demand a good IDE experience: as much
       | intellisense as possible, great debugger, hot reloading.
       | 
       | Anyway, C# and MonoGame was what won at the end of the day, at
       | least to just get the ball rolling. Rider is a great IDE, and
       | MonoGame... at least has great getting started documentation to
       | get me going again. Once I knock out a few cutesy games I'll
       | probably go build my own thing on top of SDL3, so that I'm not
       | held back by MonoGame. Also the MonoGame content builder is just
       | completely broken on Mac, so on the side I am building my own
       | Rider plugin to bring actually good intellisense to the mgcb
       | file, so that I don't need the broken editor gui (all it does is
       | manage the mgcb file anyway, arguably should have just been an
       | IDE plugin the whole time)
       | 
       | I tried Dragonruby, really wanted to like it, but the development
       | experience is just... not there. It live reloads, but seems to
       | offer no IDE tooling whatsoever. They talk a lot about emacs,
       | maybe you're supposed to use it with emacs, which I just have
       | zero interest in doing. You're also not using MRI, or the full
       | Ruby language, so a lot of tooling for "normal Ruby" may not
       | work. C# is just C# with MonoGame, I can use all the tools,
       | import all the nuget packages (if you really want to), etc.
       | 
       | I felt like going with a C based project would lock me out of
       | having hot reloading, but that might not be true, please let me
       | know if I am wrong!. I know of a C++ hot reloading thing
       | specifically made for game dev, it's in my notes somewhere, just
       | not sure if it's suitable for use (you sure do have to sift
       | through lots of abandoned experimental stuff in this world)
        
       | v1sea wrote:
       | Thanks for sharing a simple setup that avoids SwiftPM. It is nice
       | to have more options.
       | 
       | Swift has to shed the perception that it only works on apple
       | platforms. I've found the the C++ interop to be pretty good for
       | my computer vision use cases.
        
         | pusewicz wrote:
         | Yeah, it's nice to use a cross-platform, well established tool
         | to actually build a Swift project.
        
         | dlachausse wrote:
         | What's the advantage to avoiding SwiftPM? Is it just for
         | simplicity or are there other advantages?
        
           | pusewicz wrote:
           | The build process requires you to have a C library built with
           | its own dependencies. I don't think it's very common to do
           | that with SwiftPM, hence it would require extra work for it
           | to happen.
        
       | shortrounddev2 wrote:
       | How have we still not come up with anything better than cmake?
        
         | pusewicz wrote:
         | There are better tools. It's a matter of adoption.
        
       | taylorallred wrote:
       | How does Cute compare to Raylib?
        
         | dismalaf wrote:
         | On first glance, Cute is 2D only. Raylib is 3D but can do 2D.
         | Cute is written in C++, Raylib in C.
        
       ___________________________________________________________________
       (page generated 2025-06-06 23:01 UTC)