[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)