Making Video Games in 2025 (without an engine)

(noelberry.ca)

175 points | by alvivar 3 days ago

19 comments

  • roflcopter69 12 minutes ago
    I see `dotnet watch` being mentioned for code hot reload which is such a great feature for quickly iterating on a game. Not having to restart the whole game just because one has changed a few if statements and values really helps staying in the flow.

    But I'm still not too enthusiastic about having GC in C# which is why ideally I'd like to start making a small 2D game just with SDL3 and C++ but how could I get this nice hot reload workflow there? I don't have the money to pay for expensive proprietary tools like https://liveplusplus.tech so what can I do? I guess there's the "game as dynamic library" trick from Handmade Hero (see https://www.youtube.com/shorts/seWAIURXxH0) so maybe that would work good enough? Maybe https://github.com/fungos/cr would do most of what's needed here?

    Also, how does one even do modern C++ these days? Is it possible to have big C++ code bases that still compile fast these days? Is CMake 4 good™ now? Are modules really there yet? I rely on clangd as LSP for working with C++ but I read that clangd still fundamentally struggles with C++ modules https://chuanqixu9.github.io/c++/2025/12/03/Clangd-support-f... and it's so bad that there has even been some effort going into making a new C++ LSP https://github.com/clice-io/clice

  • redbell 3 hours ago
    > Our game, Celeste

    I was really enjoying reading this piece until I read the above, then I realized I am reading for a big developer, the maker of, Celeste [1]. I am definitely adding this to my list of favorite articles about making games.

    Also, you may want to check a previous discussion from nine months ago (573 points, 246 comments ): https://news.ycombinator.com/item?id=44038209

    _____________

    1. https://store.steampowered.com/app/504230/Celeste/

    • jsheard 30 minutes ago
      Some might also find this interesting: https://github.com/NoelFB/Celeste/blob/master/Source/Player/...

      Celeste isn't open source, but they did open source the main player movement logic. There's a lot.

    • hjkl0 49 minutes ago
      But Celeste came out in 2018. How is it relevant to 2025 as suggested in the title?

      Also, pretty sure it was a small indie team rather than a “big developer”

    • kelvinjps10 36 minutes ago
      I also reached the same conclusion, it feels wholesome
    • iNic 2 hours ago
      Just want to +1 this. It is a game so good I bought (and beat) it twice, once on Switch and once on Steam.
  • ps173 8 minutes ago
    Reading this I realized even for someone who just wants to make games that are fun for him, I find engines very less rewarding to work with. I always loved game libraries that provided utilities to build things but hated do everything ones ( love2d supremacy ). It's great to see experienced and accomplished professionals validating my take :)

    I saw this documentary on how celeste was made [1], which completely inspired me and got me into indie game dev community. Unfortunately I haven't made any games as of now that I would proudly showcase but the seed that your effort put is still there and one day I will get back to making games. Thanks a lot for making celeste I absolutely love it! ---- 1. https://youtu.be/MSKOQr_YS-U?si=AGzl5ILzxkoIB-j9

  • abcde666777 3 hours ago
    My experience with making your own engine vs using an off the shelf solution - the former can be viable and even superior on the condition that you know what you're doing. That is if you've built entire games or engines before, or have enough experience with the internals of one.

    Otherwise it can be a dangerous fool's errand on which many projects go to die. My younger naive self can attest to this, he loved trying to build his own overly-ambitious engines. But he never finished any games.

    Another thought if you do roll your own - keep it simple stupid. When your brain tells you that some amazing nested scene graph with integrated occlusion culling would be the coolest thing in the world, but you lack evidence that you'll actually need all that functionality, tell your brain that it's being stupid and just implement some kind of basic flat scene structure. You can always retrofit it later.

    Also - study the code of the likes of Carmack. Consider that he produced the likes of the quake engines in only a couple of years. Reflect long and hard on the raw simplicity of a lot of that code.

    Do not worship complexity.

    These are the words of someone who has walked both roads!

    • pjc50 1 hour ago
      > Consider that he produced the likes of the quake engines in only a couple of years. Reflect long and hard on the raw simplicity of a lot of that code

      Things like the famous fast inverse square root are short, but I would hesitate to describe it as simple.

      Ironically one of the things that the Quake engine relies on is clever culling. Like Doom, the level is stored in a pre-computed binary space partition tree so that the engine can uniquely determine from what volume you're in what the set of possibly visible quads is (if my memory is correct, oddly the engine uses quads rather than triangles) AND how to draw them in reverse order using painter's algorithm, because the software renderer doesn't have a z-buffer.

      https://www.fabiensanglard.net/quakeSource/quakeSourceRendit...

      The BSP partitioning used to take several minutes to run back in the day.

      Anyway, the point I was trying to make was that Carmack used a few, clever, high-impact techniques to achieve effects, which were also "imperfect but good enough".

      If you're not Carmack, don't over-optimize until you've run a profiler.

    • samiv 1 hour ago
      "Also - study the code of the likes of Carmack. Consider that he produced the likes of the quake engines in only a couple of years. Reflect long and hard on the raw simplicity of a lot of that code."

      Also says something about the accumulation of complexity. At that time Carmack (and his team) were able to create a state of the art engine in a few years. Now consider the task today, if you were to create a state of the art engine today it'd take tremendously more work.

      • direwolf20 57 minutes ago
        But you could create Quake.
        • andai 9 minutes ago
          Quake is peak graphics anyway. We hit diminishing returns after that ;)
    • socalgal2 58 minutes ago
      I see making a game engine as the illusion of progress on making a game. Making a game engine is fun and relatively easy. You have a check list of things to do. Each of them the solutions are relatively well known. so you do them and make tons of progress. You get a window open, then you get a triangle up, then you get a texture loaded, then you get some basic text for debugging, then you read the keyboard for input, etc etc. each day new stuff comes up and you think you’re making progress but really you haven’t even started making the game , you’re just reproducing what you could have already had if you’d started with an existing engine.

      Then you start it hit the more tedious stuff. loading animated characters, blending animations on selective subtrees of a character hierarchy. Making a level editor. Adding quality of life feature to it like undo. Etc…

      I’m not saying you shouldn’t do this. It’s fun to do. just don’t delude yourself that that’s making progress on your game. It’s instead making progress on a game engine. That’s a different thing.

      I've shipped 18 games, 4 of them AAA. I wrote the engines for most fo them. I wouldn't do it again.

      All that said, some nuance. If the game you are making is simple for some defintion of simple, Celeste, Dead Cells, Geometry Wars. Then making your own engine isn't much work and there maybe some benefits.

      On the other hand, see all the tiles made with engines. Silksong is Unity. A Short Hike is Unity. Blue Prince is Unity. Valheim is Unity. Peak is Unity. Dredge is Unity. You don't need to make your own engine to make an indie game.

      • andai 5 minutes ago
        Randy (funny gamedev guy from YouTube) said in a recent video that he realized he'd spent the last ten years making engines to avoid the creative terror of action making a game. I'm paraphrasing slightly, but that's what it came down to.

        "I thought if I made a really good engine, making a game would be the easy part!" I had similar thoughts when I was younger. Surely if I just upgrade my tools, the hard part will become the easy part!

        Jonathan Blow says making engines is easy, because enginedev only takes a relatively small part of development — the game itself takes way more time and energy.

        So his argument is, in the grand scheme of things, the engine is not that much work. (Since you're gonna spend ten years working on the game anyway, of course ;)

    • spppedury 1 hour ago
      when Quake was being written, it was pushing the level of managable complexity at the time.

      they used NeXT workstations to develop it, the programming tools on PCs were too weak for such a project

      today it might look simple, but it's easy to say that when you open it in VS Code and have Intellisense, autocomplete, go to definition, ultra fast compilers, tons of RAM, and google for everything

  • rob74 3 hours ago
    After I read the title, I fully expected this to be about writing games using AI. But no, actually there is no mention of AI to be found in the text, not even in the "Miscellaneous Thoughts" section, which seems to be mostly answers to "why don't you use X?" questions. Refreshing...
    • oneeyedpigeon 3 hours ago
      The author is Noel Berry, creator of Celeste. They don't shout about it, but with that pedigree, I'm confident they'll be staying well away from AI.
      • MasterScrat 2 hours ago
        Why would a game development pedigree correlate with rejecting AI? As Carmack said:

        > AI tools will allow the best to reach even greater heights, while enabling smaller teams to accomplish more, and bring in some completely new creator demographics.

        • tkel 1 hour ago
          Because they are clearly a talented and successful developer and don't need to rely on slop generators to program or think for them
          • MasterScrat 33 minutes ago
            Are you saying Carmack isn't a "talented and successful developer"?
          • Cthulhu_ 1 hour ago
            Slop is a garbage in, garbage out deal - in the hands of a competent developer who can review the changes, AI generated code is fine.
      • Vespasian 2 hours ago
        Or they'll take a look at what, if anything at all,they can use in their workflow as a useful tool not a magic solution.

        No need to brag about that.

        • tumdum_ 2 hours ago
        • dwroberts 2 hours ago
          > can use in their workflow as a useful tool not a magic solution.

          Like what? If you can already program your game and create art for it, what is it going to be doing?

          People are so obsessed with using AI stuff for the sake of it, it’s nuts

          • rhdunn 1 hour ago
            I don't use AI for the sake of it, I use it where and when it is useful. For example:

            1. advanced autocomplete -- if you have or paste the structure of a JSON or other format, or a class fields, it is good at autocompleting things like serialization, case statements, or other repetitive/boilerplate code;

            2. questions -- it can often be difficult to find an answer on Google/etc. (esp. if you don't know exactly what you are looking for, or if Google decides to ignore a key term such as the programming language), but can be better via an AI.

            Like all tools, you need to read, check, and verify its output.

            • bandrami 1 hour ago
              Genuine question re #1: does your text editor not already do that?
              • socalgal2 52 minutes ago
                Without ai my text editor auto completes letters into existing identifiers or adds a closing brace

                With ai it add several lines of code at once as soon as it thinks it recognizes a common pattern.

                It’s not perfect and it can get in the way but it’s amazing when it guesses right and spits out the next 3-4 lines I would have typed

                • bandrami 27 minutes ago
                  I'm trying to think of a text editor that doesn't support customizable snippets and templates, and failing
              • rhdunn 47 minutes ago
                Text editors/IDEs have simple autocomplete and the ability to do some expansion, e.g. a for loop with placeholders to fill in. Those work and are still useful.

                JetBrains also has local line-based LLM models for various languages.

                With the LLM-based autocomplete it a) generally autocompletes more code at once, and b) will often pick up on patterns in the existing code. E.g. if you have a similar method, list of print/string buffer write statements, or other repetitive code in the file it will often use that as a model for the generated code.

                • bandrami 26 minutes ago
                  That sure sounds like you're describing customizable snippets, which AFAIK every major editor supports?
          • Cthulhu_ 1 hour ago
            Speaking for myself (who can program and all that), AI solves some of the tedium in my day job (building UI components). Most of that work nowadays is boilerplate.

            But at the moment it's also helping me solve more complex issues with building applications - it's JS, so you can imagine how complex it can be.

            I yearn for a simpler workflow to be honest, I don't want to rely on SO or LLMs to solve build issues. I want to work in Go but there's only a handful of companies using it in my country, plus my CV basically says I mainly did front-end in the past ~15 years.

          • segh 2 hours ago
            I can do long division manually but I still reach for a calculator.
            • dwroberts 1 hour ago
              Do you also spend a lot of time maximising calculator utilisation in other places? Maybe trying to write letters with it or composing music with it?
              • hjkl0 25 minutes ago
                Won’t you get much better results trying to maximize utilization of some sort of LLM? For many people, you’d get faster and better results trying to optimize for LLMs than for any standard word processor or music composition tool.
          • truetraveller 48 minutes ago
            "People are so obsessed with using AI stuff for the sake of it, it’s nuts".

            This is a GREAT observation. Thank you!

  • roflcopter69 33 minutes ago
    I read that article a while ago and highly enjoyed it. C# truly has become a very good language for game development and since NativeAOT has become a thing, we will less and less rely on hacks like IL2CPP or BRUTE which transpile the C# IL to C++ such that it can run on JIT restricted platforms like consoles or iOS.

    I'd really love to go all-in with C# and SDL3 to make an engine-less cross-platform game but I still miss a good way to make complex game UIs without doing everything from scratch. Does anyone have a good suggestion for making non-trivial game UIs without using a full game engine? So far, I only found https://github.com/vchelaru/Gum and https://github.com/mikke89/RmlUi but I think there's not really something super mature and feature packed, or is there? I'm aware of https://github.com/ocornut/imgui, as the article also mentioned, but that's more for debug UIs, right?

  • bob1029 3 hours ago
    The primary thing I'm going for in a commercial engine is platform targeting and stability. Some of the defaults are certainly "bland", but that ensures I can actually ship this thing to a meaningful % of the available market. Unity's coverage is so consistent that I've been debating using it for non gaming applications. There aren't many cross platform ecosystems that work this well.
  • rimmontrieu 3 hours ago
    Nice article, engines are bloated and introduce so many overheads. If you don't intend to ship any AAA games, consider investing your times to learn code-first game frameworks like libGDX, MonoGame, love2d,... or even lower level stuffs like SDL, bgfx, opengl which are good enough for almost any cases. A bit higher learning curve is expected but it won't hide anything from you, or bury you under tons of bloated abstractions.
    • rimmontrieu 18 minutes ago
      For more context, I've developed over 200 games[0] using libGDX and threejs. I've learnt so much from working with code-oriented frameworks that are closer to the system APIs. I can never imagine if I could do all that in today full-blown game engines in term of effectiveness and development speed.

      [0]: https://ookigame.com

    • simooooo 1 hour ago
      Nobody seems to consider that doing it yourself, requires you implement it at least as efficiently as the commercial engine did, otherwise you're just creating a worse-performing implementation that seems to behave just like a bloated engine does.
      • flohofwoe 1 hour ago
        The big difference is that the big game engines have to cover all sorts of genres and scenarios, which often results in bloated "jack of all trades master of none" code compared to engine-layer code that's highly specialized for exactly one, or few very similar games.
    • Cthulhu_ 1 hour ago
      SDL is used in Factorio, which IMO is the best showcase of what is possible if you go all-in on e.g. C++ when it comes to performance, both in terms of what is rendered on screen and the mind-blowing numbers of what your factories are doing.
    • JoeyJoJoJr 3 hours ago
      I’d highly recommend going with SDL if it’s 2D. IMO libraries like MonoGame, Love2D, LibGDX only offer small conveniences over SDL with big negative tradeoffs, sacrificing portability, quality of libraries, and conventions. The downsides of using C++ are now heavily mitigated with the use AI tools.

      I could never jell with C++ until I had Cursor hold my hand (especially around the build system), and now I feel like I am developing games with a razor sharp knife that I could never before access. The patterns associated working directly with memory suddenly clicked and now it’s the only I want to build games.

      • tripledry 1 hour ago
        Similar, I also went back to mainly C++ and Raylib now that I can delegate the "boring" stuff to AI, never had any issues with programming in C++ it was mainly adding dependencies and builds I hated (configuration).

        I still don't use it (AI) for the game programming as it sucks the joy out of it for me. Especially when AI usage is currently being pushed hard at work.

      • raincole 1 hour ago
        I'm actually building my own mini-engine with SDL_GPU. It works ok so far. I'm quite confident that it's capable enough to replicate most of Unity's URP features (except the shader graph as I don't plan to expose such an interface for artists).

        But I haven't reached to the more tedious parts, like doing skeleton animation on GPU and testing cross platform (SDL should be naturally cross platform, but I never tested it...), etc. The most tedious part, imo, is to build your own 3D scene editor.

        At very least I can say SDL has reached a passable state for 3D. It doesn't support some modern features like bindless though.

        And one doesn't need to stich with C++ if they don't want to. SDL is pure C and if your favorite language can call foreign function it's not that hard to make it work with SDL.

  • phendrenad2 2 minutes ago
    [delayed]
  • sbiru93 2 hours ago
    Very interesting article.

    It's kinda sad SFML never get quoted, It was my framework ( after ALLEGRO ) where i learned c++ and I think it dosen't get much love nowdays even if it is very light and strong

    • Subdivide8452 1 hour ago
      SFML definitely needs more love than it's receiving.
  • jesse_dot_id 2 hours ago
    This was a great read. I'm in my 40's and have mostly done web dev/devops type stuff throughout my career. Making video games has always eluded me even though I've always been interested in it. I think it's that everything feels like a brand new language I have to learn. Perhaps creating an engine is the move.
    • Cthulhu_ 58 minutes ago
      I'm no game developer, but I'd say don't create an engine if what you want to do is build a game. Do create an engine if you want to create an engine though.

      But yeah, it is like learning a new language. But that's not a bad thing! I found messing around / following some tutorials for e.g. pico-8 to be both liberating (two characters are enough for a variable name) and educative (using functions like min/max to the fullest)

      [0] https://www.lexaloffle.com/pico-8.php

  • kleiba 3 hours ago
    Discussed before: https://news.ycombinator.com/item?id=44038209

    (246 comments)

  • lovegrenoble 2 hours ago
  • sgt 2 hours ago
    What's the best place to get some cool graphics assets, sound etc when making a love2d or sdl or {yourfavoritetech} game?
    • samiv 1 hour ago
      Don't know about "cool" but I always end up going back to opengameart.org

      While most of the stuff is one off assets that do not fit together there are also some nice sets by some creators such as Kenney or Emcee Flesher

      Also the Liberated Pixel Cup (LPC) stuff is pretty nice.

      Mind you I mostly just look for 2D assets.

      https://opengameart.org/users/kenney

      https://opengameart.org/users/emcee-flesher

      https://opengameart.org/content/lpc-collection

    • kurtdev 1 hour ago
      For prototyping I usually use Kenney assets (from kenney.nl). Theres lots of assets for many types of games which lets you rapidly prototype and iterate without worrying about making assets first. For sounds you can use BFXR and just play around. Sometimes playing around with sounds can even lead to new feature ideas :)
    • armcat 2 hours ago
      I've used itch.io before, it's great! I even made a game using some free assets and AI: https://github.com/acatovic/gothicvania-codex-demo
    • krapp 1 hour ago
      itch.io is good for sprite assets and fonts I find.
    • u361 1 hour ago
      Putting as much love into it as you can.
  • u361 1 hour ago
    Making video games in 2025, sans AI, sans an engine, is harder than some poeple could handle it, and very rewarding: it's like playing Celeste.
  • imtringued 3 hours ago
    >I often find the default feature implementations in large engines like Unity so lacking I end up writing my own anyway. Eventually, my projects end up being mostly my own tools and systems, and the engine becomes just a vehicle for a nice UI and some rendering...

    I honestly don't see anything wrong with using the engine for its UI and "some rendering" kind of sweeps a lot of the complicated 3d light handling under the rug. I think the biggest mistake large engines have made is baking in features as first class citizens instead of those features being part of a standard plugin you could have written yourself from scratch once you reach that stage.

    I've contemplated building my own editor UI, but after four weeks I realized that I'm just rebuilding the same UI structure you see in FreeCAD, Blender, Isaac Sim, Godot, etc. There's always a 3D viewport, there's a scene tree and there is an inspector panel for looking at the properties. So why not just use the Godot editor as a UI and provide my own custom nodes? By the time I've outgrown the training wheels, I've spent months working on the actually differentiating features.

    • nkrisc 1 hour ago
      > I honestly don't see anything wrong with using the engine for its UI and "some rendering" kind of sweeps a lot of the complicated 3d light handling under the rug. I think the biggest mistake large engines have made is baking in features as first class citizens instead of those features being part of a standard plugin you could have written yourself from scratch once you reach that stage.

      Godot is more or less built that way. The entire node system is an abstraction over the various “servers” and you can even completely forgo it if you want, providing your own MainLoop implementation (instead of the included SceneTree implementation of MainLoop) and then just use the servers directly.

      A lot of the editor features are also implemented as plugins. It’s been very easy turning the Godot editor into a custom editor for my game by writing some simple plugins

  • bitwize 2 hours ago
    Creating a game with an engine is like designing a character with a pixel dollbase. You can get something out quickly, skipping a few steps because they're done for you, but you have to live with whatever choices were made by the creator of the engine/dollbase. Those choices can constrain your execution and to some extent, your imagination.
    • charcircuit 1 hour ago
      While true, people overestimate how limiting it actually is. It's like wanting to make your own kernel for your application instead of using an off the shelf one like Linux. Sure you might be able to eek out some extra performance but there are so many upsides in reusing Linux.
  • Madmallard 2 hours ago
    Has he dealt with some of the more challenging problems in game dev that engines help a lot with? Like... multiplayer netcode.

    Seems like if you're doing this for a hobby or solo/small team then maybe it's reasonable.

    For most people where they want to be a game dev but they probably will just work in industry, it seems like learning the major engines to competency cannot be ignored.

    • jesus_666 1 hour ago
      You should use tools that are appropriate to what you intend to achieve. If you want to make a 3D game then Unreal, Unity, or Godot are appropriate choices. If you want to make a 2D game then something like MonoGame might make more sense than Unreal. You don't need highly refined netcode if your game never needs to exchange data in realtime.

      Heck, I've seen someone build a visual novel-type game with WinForms. That was actually a sensible choice for the game's presentation and interaction needs.

      Of course if you want to become a game dev at a studio then you should be competent with whatever the studio uses (or something comparable so you can pivot to their stack). If you only want to make your hobby project and maybe publish it later it doesn't matter if your engine is Unreal, MonoGame, RPG Maker 2000, or vanilla JS/DOM.

    • raincole 1 hour ago
      > that engines help a lot with? Like... multiplayer netcode.

      Rust (the top 10 most downloaded game ever on Steam) is built with Unity. However they ended up to write their own netcode anyway. Of course Unity isn't known for the best netcode, but how much an engine helps is often overstated. Genshin even bought Unity's source code to customize it.

    • grian42 25 minutes ago
      multiplayer netcode isnt overly difficult to write unless you're at the highest lvl of complexity lol. it's not a black box, it's just transferring bytes around efficiently and keeping track of state, your "netcode" can literally just be bare tcp (+ssl), validation, and state, it's not that deep.
    • rob74 2 hours ago
      Well yeah, he's working with a pretty small team, and quite successfully: https://en.wikipedia.org/wiki/Celeste_(video_game)

      I would say that one of the "Miscellaneous Thoughts" at the end of your article answers your question pretty well:

      > I need only the best fancy tech to pull off my game idea

      Then use Unreal! There's nothing wrong with that, but my projects don't require those kinds of features (and I would argue most of the things I do need can usually be learned fairly quickly).

  • gethly 2 hours ago
    i am making a text editor/ide in Go and i too switched from raylib to sdl. it's likely one of the best graphics layers out there.