90s_dev 16 days ago [-]
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.
dustbunny 16 days ago [-]
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 16 days ago [-]
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 16 days ago [-]
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 16 days ago [-]
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 15 days ago [-]
Visual Studio + MSBuild is simple if you're okay with IDEs
dieortin 15 days ago [-]
I really recommend Bazel (https://bazel.build)
pusewicz 15 days ago [-]
What us better about it?
dieortin 15 days ago [-]
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 16 days ago [-]
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 16 days ago [-]
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.
raincole 16 days ago [-]
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 16 days ago [-]
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:

python-b5 15 days ago [-]
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 15 days ago [-]
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.
raincole 16 days ago [-]
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 16 days ago [-]
Very often you can snatch free copies. Join the Discord. Just ask :)
90s_dev 16 days ago [-]
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 15 days ago [-]
But why?
90s_dev 15 days ago [-]
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?
pusewicz 15 days ago [-]
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 15 days ago [-]
To be honest I was just not giving the benefit of the doubt to the comment I was replying to. I should practice that.
fatihpense 15 days ago [-]
I assumed the original developers might give free copies in the official discord
pusewicz 15 days ago [-]
This.
krapp 16 days ago [-]
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

90s_dev 16 days ago [-]
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.
CJefferson 15 days ago [-]
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 15 days ago [-]
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.
CJefferson 14 days ago [-]
A good way to think about it is in my opinion, you making a choice saves all your future users having to make that choice — imagine the decision making time they will all save.
raincole 16 days ago [-]
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 16 days ago [-]
90s_dev 16 days ago [-]
... 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...

90s_dev 15 days ago [-]
I can't do it.

I can't work in Visual Studio. It's so unintuitive.

I have to do this in VS Code.

pjmlp 15 days ago [-]
- VS full install

- vcpgkg manifest file

- done

The problem is people pretending Windows is UNIX.

And UNIX community got lucky Apple decided to go with NeXTSTEP and not BeOS, otherwise those shiny fruit laptops would also be their own thing.

90s_dev 15 days ago [-]
Then how would you install quickjs? conan? download and copy the files manually?
pjmlp 15 days ago [-]
Why bother with conan, when vcpkg is already available and zero Python dependencies?

As for quickjs, it wasn't part of the comment, rather SDL3 and Lua.

> ...combinations of efforts to compile a C++, SDL3 and Lua program on Windows...

As such,

https://vcpkg.io/en/package/sdl3

https://vcpkg.io/en/package/lua

https://vcpkg.io/en/package/luajit

90s_dev 14 days ago [-]
Because I was using Lua as a hello world test to get it all working. Ultimately I wanted to use typescript though.
whateveracct 15 days ago [-]
yeah, software development on Windows is just terrible.

I do gamedev on Linux for this reason. With Nix it isn't even that bad to cross-compile.

syspec 16 days ago [-]
What's the relation of your comment to this blog post?
90s_dev 16 days ago [-]
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.

syspec 15 days ago [-]
Fair enough
v1sea 16 days ago [-]
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.

dlachausse 15 days ago [-]
What’s the advantage to avoiding SwiftPM? Is it just for simplicity or are there other advantages?
pusewicz 15 days ago [-]
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.
pusewicz 15 days ago [-]
Yeah, it's nice to use a cross-platform, well established tool to actually build a Swift project.
anextio 15 days ago [-]
CMake support started as a community project but was adopted officially by Apple after they started adopting some Swift in the compiler codebase – an extremely large and complex CMake project – so the support is extremely robust now.
DavidPiper 16 days ago [-]
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 16 days ago [-]
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.
corytheboyd 16 days ago [-]
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)

nodramallama 15 days ago [-]
fwiw you might want to check out Odin-lang!
corytheboyd 15 days ago [-]
Ah yeah Í keep seeing it come up, I will take a look! This weekend was gonna toy with C++ to rebuild what I got done with MonoGame, but a next mini experiment can perhaps be Odin!
90s_dev 16 days ago [-]
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 16 days ago [-]
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.

raincole 16 days ago [-]
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 16 days ago [-]
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 15 days ago [-]
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.
90s_dev 16 days ago [-]
Ah thanks Piotr, also Cute looks very useful, great job.
pusewicz 16 days ago [-]
It's not mine, I'm just a fan myself!
90s_dev 16 days ago [-]
Well as a fan you certainly commit a lot https://github.com/RandyGaul/cute_framework/commits/master/
pusewicz 15 days ago [-]
Sure, but it’s not me who built the whole framework. My contributions are fairly superficial.
titouanch 16 days ago [-]
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 16 days ago [-]
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 16 days ago [-]
https://github.com/KevinVitale/SwiftSDL is a good starting point and already supports macOS and Linux out of the box.
zombot 16 days ago [-]
https://www.swift.org/install

macOS, Linux, Windoze

JKCalhoun 16 days ago [-]
Thanks. It looks like CMake + SDL2(3) would add some gaming platforms like Nintendo, etc. (if that's important to you).
taylorallred 15 days ago [-]
How does Cute compare to Raylib?
dismalaf 15 days ago [-]
On first glance, Cute is 2D only. Raylib is 3D but can do 2D. Cute is written in C++, Raylib in C.
krzat 16 days ago [-]
For Swift, it would be more natural to use SPM instead of CMake.
pusewicz 16 days ago [-]
It would be, but also more cumbersome to get it up and running. Not impossible, though!
shortrounddev2 15 days ago [-]
How have we still not come up with anything better than cmake?
pusewicz 15 days ago [-]
There are better tools. It's a matter of adoption.
shortrounddev2 14 days ago [-]
I mean with IDE support
kookamamie 16 days ago [-]
> For many games variable timestep is a good choice.

It really isn't.

pusewicz 16 days ago [-]
You can use fixed time step. Choice is yours.
OnionBlender 15 days ago [-]
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...

kookamamie 15 days ago [-]
Very sorry about that :D
pusewicz 15 days ago [-]
LOL
all2 16 days ago [-]
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 15 days ago [-]
Gaffer has summarized most of this quite well years ago. E.g. https://gafferongames.com/post/fix_your_timestep/
90s_dev 16 days ago [-]
Care to elaborate?
pusewicz 15 days ago [-]
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.

kookamamie 15 days ago [-]
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.
Kon-Peki 16 days ago [-]
> And voilà!

Come on, if you're going to spell "voilà" correctly, you might as well use it correctly too. "Et voilà!", not "And voilà!" :)

pusewicz 16 days ago [-]
FINE