Game Engine Architecture 101 // Code Review

Поділитися
Вставка
  • Опубліковано 29 тра 2024
  • To try everything Brilliant has to offer-free-for a full 30 days, visit brilliant.org/TheCherno. The first 200 of you will get 20% off Brilliant’s annual premium subscription!
    Patreon ► / thecherno
    Instagram ► / thecherno
    Twitter ► / thecherno
    Discord ► / discord
    Code ► github.com/jkatsanis/SpriteEn...
    Send an email to chernoreview@gmail.com with your source code, a brief explanation, and what you need help with/want me to review and you could be in the next episode of my Code Review series! Also let me know if you would like to remain anonymous.
    Hazel ► hazelengine.com
    🕹️ Play our latest game FREE (made in Hazel!) ► studiocherno.itch.io/dichotomy
    🌏 Need web hosting? ► hostinger.com/cherno
    📚 CHAPTERS
    0:00 - Hello
    0:25 - Project structure and why use a build system
    5:54 - The foundation fo Game Engine architecture
    11:41 - A story from the past
    14:55 - Running the engine for the first time
    15:13 - This is so annoying
    💰 Links to stuff I use:
    ⌨ Keyboard ► geni.us/T2J7
    🐭 Mouse ► geni.us/BuY7
    💻 Monitors ► geni.us/wZFSwSK
    This video is sponsored by Brilliant.

КОМЕНТАРІ • 194

  • @TheCherno
    @TheCherno  7 місяців тому +11

    Thanks for watching! ❤
    You guys should check out Brilliant FOR FREE for a full 30 days - visit brilliant.org/TheCherno. The first 200 of you will get 20% off Brilliant’s annual premium subscription!

    • @nuggetweeb573
      @nuggetweeb573 7 місяців тому

      Hey cherno i watched your opengl series it really helped me in making a game with no game engine in c, so thanks.

    • @anthonysteinerv
      @anthonysteinerv 7 місяців тому +2

      Id love to see how to create an editor with C# and then call the C++ engine.

    • @peterino2
      @peterino2 7 місяців тому +2

      Hi Cherno, I feel like I have to say that I think this video felt like an unnecessarily unfair dunk on the original author. This is potentially awkward and unhelpful when a lot of your audience is quite green and impressionable.
      I've only looked at the engine briefly but it seems highly likely to me that the template project is what contains the actual game specific project. While the core SpriteEngine project is just the editor alone.

    • @y4ni608
      @y4ni608 7 місяців тому +2

      @@peterino2 yep thats what it is 👍

  • @Finkelfunk
    @Finkelfunk 7 місяців тому +390

    Don't worry guys, only 6 more videos until we get to some actual code that does stuff

    • @erictrinque6513
      @erictrinque6513 7 місяців тому +9

      great way to pad with ADs

    • @dj10schannel
      @dj10schannel 7 місяців тому

      Lol

    • @ExpFunction
      @ExpFunction 7 місяців тому +5

      Yeah, we'll see some code that does stuff after The Cherno writes his own. Oh wait,,.

    • @pengie_
      @pengie_ 7 місяців тому +11

      nah you gotta realize this type of advice is great even if it's not code like if I had someone to review my code with this level experience I'd be thrilled for any advice even if he hasn't even ran the project yet

    • @Revin2402
      @Revin2402 6 місяців тому +2

      @@pengie_ The issue rather is that it seems to be the same thing people are doing wrong when sending projects to him all the time. I mean having no build system is probably in every project I've seen so far in those reviews.
      I'm also not sure why people are not looking at existing game engines, when they start developing their own. Like 2000 hours in the game engine and they didn't even have like the basics of game engine architecture in there. They could've easily looked at Unreal Engine and you'd see in a second that you should split the editor and the actual engine from each other. Sure I have years of experience as game dev already but even my first attempt to write a game engine I was looking at other engines to see how things should be done. Even if you don't follow that completely because you want to do your own thing etc., there are just best practices you really should not avoid.

  • @thomasblazek4104
    @thomasblazek4104 7 місяців тому +193

    If I remember correctly. This is made by a highschooler. Which makes total sense, because back in high school, I'd always react with "so cool, a custom filebrowser, looks much better than the ugly windows one". Now I'm fully onboard with "if there's a convention, use it. I don't want to have to relearn things I already know how to do.

    • @spidermanlift4527
      @spidermanlift4527 7 місяців тому +9

      Certainly, it is the brainchild of an adolescent of scholarly pursuits, whose linguistic articulation in the English tongue presents an ongoing endeavor.

    • @iXenox
      @iXenox 7 місяців тому +3

      My problem is when there straight up isn't a way to do something simple that I'd expect to be there.
      This is mainly because either I'm going to use it once and never again, or because I would learn how it works with time either way.
      Also on Linux people generally configure the file browser to be an exact representation of what they want it to be, both visually and functionally, not using it is kind of a spit in the face.

    • @urisinger3412
      @urisinger3412 7 місяців тому

      i dont use a file browser on linux tho, i dont even think i have one set up, it would be better to have your own and fallback to the default one, or even have it as a setting@@iXenox

    • @vcv6560
      @vcv6560 7 місяців тому +3

      That's why from the beginning of the Mac product Apple enforced the style guidelines, not to mention that spending time rebuilding what exists means you're not adding the features that makes you stand out against competitors.

    • @mobslicer1529
      @mobslicer1529 7 місяців тому

      even in grade 6 i wrote an engine a little better than this

  • @perkele1989
    @perkele1989 7 місяців тому +34

    “I’m not going to talk about that too much in this video”
    Proceeds to make the entire video about that point.
    You literally opened one file Cherno.

    • @handleneeds3charactersormore
      @handleneeds3charactersormore 7 місяців тому +1

      Worst code 'review' I've ever seen NGL he just lambasted the author lmao

    • @perkele1989
      @perkele1989 7 місяців тому +1

      @@handleneeds3charactersormore Yeah he is getting lazy alright

  • @dingoDogMan
    @dingoDogMan 7 місяців тому +129

    I think this code review will end up taking 2000 hours haha

  • @TopConductor
    @TopConductor 7 місяців тому +30

    it's definitely a progression. Now we managed to check a first file.

  • @msmeraglia
    @msmeraglia 7 місяців тому +66

    Not to be a Jon Blow evangelist but he builds his editor directly into the game and has two successfully published games ie Braid and The Witness. I think it just depends on A. experience of the engineer, B. the complexity of the game. Sometimes a completely separate editor is just added complexity with more overhead of maintaining it when keeping it simple is better, less things to fuss with. People think editors need to be Unreal, when in reality it just needs to be a tool that helps YOU make YOUR specific game, not some generic app that can make ANY game

    • @felixp535
      @felixp535 7 місяців тому +16

      This! You can totally have an engine, a game and an editor in a single executable (just with compile flags to disable the editor part when you ship the actual game).
      This is especially useful if you're planning to do very unconventional things (4D, non-euclidian worlds etc).
      Also, you can really optimize the engine for your game. Game engines are build to be generic, but this can have a great cost.
      If you know there will never be something in your game, then the game engine doesn't even have to bother trying to check that stuff.
      When you move on to create another project, just copy things you want from previous games and don't copy the things you don't want!

    • @TheBigWazowski
      @TheBigWazowski 7 місяців тому +13

      Beat me to it, was gonna say the same exact same thing. I think it’s totally reasonable to have an engine built for 1 particular game. I’m sure there are plenty of successful games where this is the case

    • @TurtleKwitty
      @TurtleKwitty 7 місяців тому +3

      Sure but that's the difference between making a game with a built in editor and making an engine itself. I sure as hell wouldn't go calling braid or the witness an engine project.

    • @Keltheran
      @Keltheran 7 місяців тому +4

      @@TheBigWazowski The ID Tech engine is one such example. They just made one game and for the next they removed all game specific code (leaving stuff like rendering, audio, and i/o) and started on the next game, so after a while they just had an engine there from all the generic stuff that got left behind.

    • @keenancole2532
      @keenancole2532 7 місяців тому +2

      To clarify, the engine does not equal the editor. The engine is the code framework that controls the update loop for input, rendering, physics and entities (actors, gameobjects, etc). Separating the engine from game specific code forces you to really practice separation of concerns in your game as well as enabling you to easily branch off to your next game. Every engine basically does this (you can download the engine for Doom 3 BFG and see that they do it for both the engine, the rendering and the game). Whether you include an editor in the engine or have it be a separate application is a different discussion although even then you almost certainly want to split that off into a separate editor framework. Compiling any of these out into their own DLL or into their own executables is again orthogonal to the discussion of separating out engine code from game specific code.

  • @ferdynandkiepski5026
    @ferdynandkiepski5026 7 місяців тому +46

    Cherno looked at the code in the code review? Can't believe it. The last one was better.

  • @Kaleidio
    @Kaleidio 7 місяців тому +46

    I believe there is also a problem in expecting somebody of both beginner and intermediate levels of programming skill to use a build system. Especially ones with languages such as CMake. CMake is by no means easy to learn, because every library repository uses it differently, and the tutorial is too abstract to be used as a template to "learn by working" with it. It is a very difficult way to learn to build your code meanwhile a vcproj, even though it is technically an "already built repository", just lets you click one button, or enter text in a few boxes to point to your library binaries and libs...and then you have a binary of your program built within seconds, without having to code an extra script to make that happen at all.
    CMake, in some circumstances especially for learners, speaking from my own failed experiences with it and my inability to use it properly to this day, can waste hundreds of hours just on its own. If education out there for the langauge was better, I wouldn't feel so on the fence about that point of yours. By all means, you are a professional and have taken the time to learn and use that tool, don't feel bad for using it. Just don't expect somebody to spend a hundred hours just to build their hobby project with it.

    • @ColinBroderickMaths
      @ColinBroderickMaths 7 місяців тому +4

      Beginners maybe, but intermediate no. I would not consider a programmer to be of intermediate skill if they don't have a basic understanding of build systems. Basic CMake is not at all difficult to learn (a minimal hello world is three lines or less) and you just google and extend it as necessary. The real reason people find CMake and similar tools difficult is that they don't actually have a good understanding of the compiler and what it needs in order to preprocess, compile, and link code in the way you expect. Knowing CMake top to bottom won't help if you don't understand what the compiler needs.
      CMake or a similar tool is more or less a requirement on Linux platforms so this all goes double there. You can write Makefiles by hand if you want but don't come crying to be when they hit 20000 lines haha.

    • @Kaleidio
      @Kaleidio 7 місяців тому

      @@ColinBroderickMaths you say that, and yet I have been in university and education for coding in C++ and C# for over 6 years now, and never have I successfully gotten cmake to add a static .lib dependency after around 5 attempts totalling to 30 hours now :/ Like I said, the education out there is terrible. The only time I've ever gotten close to success was when I had to look at some obscure physics library (ReactPhysics3D) which included a cmake tutorial of their own. You know it's badly documented when somebody else has to explain how to use the tool for you.
      I can use and understand the gui. I have built repos with it just fine. the syntax of the language itself, however, is a problem, especially with method names that don't make sense in context. It's so badly documented that our university has basically refused to teach their lecturers how to teach students in programming CMake at all. They all just teach us visual studio's compiler system.
      That being said, I am close to understanding the tool. But how much uphill battle I've had to fight to get that close at all is ridiculous, and understandable if an intermediate coder doesn't want to deal with it at all if it's just a hobby project.

    • @leighrobinson
      @leighrobinson 7 місяців тому +4

      I mean unless you are definitely going cross platform much of what a build system does can be done within vstudio directly. All an engine like this really needs is to split the runtime out and have it as a dependent project.
      Sure automated build system are what you really want, but for a limited release prototype game engine built by a hobbyist I’d recommend they get a cleanish code base before embarking on a fully build system. It just needlessly complicates things in the short to medium term.
      Id say if you dont know why you need a build system you dont need a build system.

    • @Kaleidio
      @Kaleidio 7 місяців тому +1

      @@leighrobinson agreed.

    • @sub-harmonik
      @sub-harmonik 7 місяців тому +1

      @@ColinBroderickMaths automake and make are way more intuitive than CMake from my limited experience. Anytime a build fails in make or automake it's easy to see what should be changed. With cmake it's like ok what arcane variable or setting do I have to change, how does it interact with all the other settings, and where do I set it.

  • @nick15684
    @nick15684 7 місяців тому +3

    I designed my game engine with maximum modularity among its components. The solution consists of several projects. The Renderer is a separate statically linked library that can work independently of the engine altogether. The Engine Core handles only logic processing. The Editor uses both the Engine Core and the Renderer. The engine can be built without the Editor.
    These are the three main components, but there are others for physics, sound, files, etc. I aimed to make the engine as extensible and decoupled as possible.

    • @y4ni608
      @y4ni608 7 місяців тому +2

      Do you maybe got a link to your repo? I would be very interested to see it

  • @ChrisM541
    @ChrisM541 7 місяців тому +5

    This style of game programming reminds me so much of the 1980's, to the extent that I would originally have thought this programmer was in his 50's - or, of course, a younger student today. If you were taken back to the 1980's, particularly for so many famous 'bedroom' programmers, writing games like this was the norm, particularly because both the toolsets and dev environments were extremely basic at that time (particularly for this group of programmers). Extremely simple cross assemblers were being developed though were primarily found in game studios.
    Today though, things are very, very different, with virtually no limit to toolsets and environments. Crucially, today we have something infinitely more important for programmers that wasn't present in those early days - the internet! With that said, for a different (but similar!) game, all the engine here needs to be fed with is a different data set. Certainly not as difficult to do today as a few years ago.

  • @user-ih1ms7ml1b
    @user-ih1ms7ml1b 6 місяців тому +2

    BTW: he hardcoded the drive in the file dialog selector: (easy to configure when working with it everyday, but unclean for a general audience)
    this->m_createFileDialoge = s2d::FileDialog("C:\\", ICON_FA_PLUS, "Select where you want to create a project", this->m_createWindowSize, false);

  • @reductor_
    @reductor_ 7 місяців тому +6

    As someone who has been doing AAA engine development for way too long, I've got a different view on many of these things.
    * MS VS projects aren't all that bad if your wanting to stick to VS large engines just use VS, albeit with heavily props usage
    * The one big project I think might be missing the step of creating projects, which is how I would assume the template is designed to work, so it actually splits game and engine and splits them into independent parts
    * The outlining in the code seems wrong based on my reading of that code, this seems to be an editor not just an engine which isn't all to uncommon with uber-tools, the selecting of a project is to select something before it opens the editor, the project template creates another project specific to the game
    * I disagree with engine development the primary audience is the players, this leads down the path of "we make games and not engines", which having seen this play out you end up with hacky code bases, no tests, no documentation, bad dev iteration time and all sorts of things. An engine developer and engine team should be building things for game developers, they should be making their life easier to get games out.
    Nothing tells me in the code that has been shown in the video or the structure says that there is a major amount of inexperience, it's just a different and appropriate approach, the only bad thing I would call out is EngineData state changing from the dialog and implicitly injected into the editor, which is extremely minor.

    • @reductor_
      @reductor_ 7 місяців тому

      Looking at the repo further then what is in the video, there are big things to call out such as not committing binaries, unnecessary includes, bloated classes, bad initialization and more. Which do signal at inexperience but the parts highlighted in the video I don't think really highlight that.

  • @danieljenikovsky9455
    @danieljenikovsky9455 7 місяців тому +1

    I am not sure about this specific project, however, I would argue that from indie game developer perspective, it makes sense to blur the line between game, editor, engine. Mainly if you are looking to make a game, not so much an "engine" on it's own but still want to do it without existing engines. In indie games when there are low numbers of developers (maybe only one), not designing an engine in the currently popular modular approach reduces the need to design multiple API's which you would in turn only use yourself.
    When you are ready to ship the game, you just disable the editor (if it should not be the part of the shipped game) and release it that way. I think this is perfectly valid, if you know what you are loosing by doing this.
    Making a new game doesn't have to be done in a "project browser" way, because you know what parts of the "engine" you need to make the application work. You just copy that code and make it a separate thing.

    • @wacky.racoon
      @wacky.racoon 6 місяців тому +1

      I think "engine" translates to "unity lookalike thing" in today's parlance, and I really think it shouldn't. The "embedded engine" approach is perfectly valid and that's what I am doing now.

  • @vesk4000
    @vesk4000 7 місяців тому +6

    I think a video about build systems would be awesome! I find it to be one of the more complicated and mysterious parts about C++ (and most other languages too actually)

  • @sh4d0wj4go3
    @sh4d0wj4go3 7 місяців тому

    Please continue this review! Love it so far

  • @niallrussell7184
    @niallrussell7184 7 місяців тому +1

    I think there is a reason we get junior coders to make tools - they get the experience of seeing what comes in as raw data into the editor, and prepared efficiently and optimized for the engine. I'm trying to think of the simplest possible example, which might be optimizing triangles of a mesh into triangle fans and strips. The same with texture formats, shaders, etc.

  • @rmt3589
    @rmt3589 7 місяців тому +3

    I have just learned so much about setting up my engine. Glad I saw this before getting too much further into setting up the git.
    Could you make a video going more in depth on making the core and the editor separate, with Hazel or another more professional engine as an example?

  • @nestor1208
    @nestor1208 7 місяців тому +13

    Interesting. I believe these understandings come from working in a team, in a professional environment.
    What I think I'm seeing in this project is a work of someone who has done this all by himself, without a team, really. Which can be fine, but it's often producing weird design choices, that aren't acceptable in the industry, or are simply inconvenient or unnatural. Still, it's interesting to look into, and I'm hoping this particular project is dissected thoroughly. I'm enjoying every second of this review, tbh

    • @theo-dr2dz
      @theo-dr2dz 7 місяців тому +1

      I have been working in the software industry (not games, juat boring business-to-business stuff) and now I am just mucking around on my own as a hobby. And not being on a team and not having to be professional, having scrum meetings and all that crap is SO liberating. It totally reminds me of why I chose this career back in the day. A bad mistake by the way, because doing it as a job totally ruins the fun of it in my experience.
      To me the target audience is one person: me. And the target platform is one computer: mine. So no need at all to waste lots of time on build systems. Maybe I will do it one sunny day, just for the sake of it.

  • @tychobra1
    @tychobra1 7 місяців тому +1

    I like this code review and have a gut feeling, that there will be lots and lots of follow-up episodes on that review 😀 Looking forward to the next episode 👍

  • @francobarrera5327
    @francobarrera5327 7 місяців тому +2

    I REALLY want to see more of this. Not only showing better ways to implement things, but also how not too. Thanks a lot to the guy that send this project to share knowledge. Great video, Cherno

    • @y4ni608
      @y4ni608 7 місяців тому +1

      Thanks :D

  • @Rufnek2014
    @Rufnek2014 7 місяців тому

    Loving this! I know its challenging to work and look at but really like the insights into coding.

  • @rowandabuttenbasher
    @rowandabuttenbasher 7 місяців тому

    Great video, Thanks for your experienced insight!

  • @Cobra01706
    @Cobra01706 6 місяців тому

    There is a good message here; the same could be said for using an ORM v raw SQL/procs. Like your C++ reviews, knowing what to use and when is the key, and takes time to learn

  • @valentinzacarias7673
    @valentinzacarias7673 6 місяців тому

    Omg been looking for an engine architecture tutorial/resource since ever. We need more information on that topic, is incredibly difficult to find resources about how to architect a rendering engine. Thanks Cherno!

  • @vcv6560
    @vcv6560 7 місяців тому +1

    True of any product development: Remember the customer, you're not building for yourself, unless you are of course.

  • @hopperpl
    @hopperpl 6 місяців тому

    One point you missed about splitting the code base into sub-projects (or modules) is dependencies and dependency chains: the editor depends on the engine, but the engine should never ever depend on the editor, otherwise shipping day is nightmare day when you start "emergency" untangling to get rid of the editor. Same way, the game depends on engine and/or editor. But if the engine should ever depend on the game, then you can never reuse the engine. Sub-projects avoid that as most build systems today deny circular dependencies. Or give you an early warning about what you are about to do is very, very bad. Even as a beginner trying your first big project, and a game engine is a big project, you should use multiple sub-projects as a concept. When ever you try to access specific game stuff from the engine part, the compiler, the build system will say "that's not possible".

  • @user-ih1ms7ml1b
    @user-ih1ms7ml1b 6 місяців тому +1

    But you can very well consider engine and game to be a monolith build for that specific game. And then codeparts from the "engine" side used in the next projects etc. This is useful when portability, flexibility and reusability is not a priority, but other considerations such as high performance for a very specific game type, or a tight deadline to release.

    • @wacky.racoon
      @wacky.racoon 6 місяців тому

      In the context of this channel "engine" means a generalized application (editor) + runtime (engine) to be used in the development of multiple games by other people. Whereas in my context, the "engine" is inextricably intertwined with my game and wholly non-generic.. i mean of course you can use the code framework to make anything but it's not trying to be "Unity" by any stretch of the imagination. It's a kind of controlled chaos and it lets me do wacky things my own way.

  • @jonathanhoffstadt1366
    @jonathanhoffstadt1366 7 місяців тому +2

    I’d love to see Cherno review something Jonathan Blow or Casey Muratori wrote. Just to see the absolute incompatibility of philosophies collide. Lol

  • @archondiabolos
    @archondiabolos 7 місяців тому +2

    I can't wait to hear your opinion of CIG's Star Engine they just demonstrated.

    • @user-ih1ms7ml1b
      @user-ih1ms7ml1b 6 місяців тому +1

      Maybe he can pick up the idea for Hazel of optional double-precision (64) vector positions, to allow large levels at a solar system scale. Or some vector formal that convers global 64 bit precision to local (render) 32 bit float positions, and adjusting the origin on the fly for the rendering.

  • @ColinBroderickMaths
    @ColinBroderickMaths 7 місяців тому +1

    You raised an important point just like the last video but I don't think you need to labour it for the whole video at the cost of getting into the code properly. The point about separating applications/engines/games was well made after a couple of minutes. Really hope to see some detail in the next one.

  • @xXBen74
    @xXBen74 6 місяців тому +1

    I dont understand your statement, If I create a variable that refer to an element of my vector that is a pointer to a Sprite, this hold the address of this Sprite, If the vector reallocate some pointer, it just change where this pointer is in memory not the object that it points to, so it cannot invalidate the Sprite itself right ? Now lest say I do like Cherno says and hold the actual Sprite inside the vector, If I create a pointer to an element of my vector, this can definitly gets invalidate if the vector reallocate memory after that.

  • @Mahm00dM0hanad
    @Mahm00dM0hanad 7 місяців тому +2

    Please continue talking about about game engine architecture, please

  • @robertoze
    @robertoze 7 місяців тому

    We also developed an n-tier architecture at one of the companies, where we wrote every layer for each program. It made me wonder, if no one is using individual components, why are we separating them into layers? So layering is not always a good approach unless multiple applications or components truly utilize them.

  • @griff2162
    @griff2162 7 місяців тому

    Please more!

  • @sweep-
    @sweep- 7 місяців тому +1

    All I do lately is watch your vids that UA-cam thinks I should watch. I guess I might have to switch from godot to hazel and c++ so your channel can be more relevant to me… I really like your philosophies and style so I’ll definitely keep watching.

  • @tabletopjam4894
    @tabletopjam4894 7 місяців тому +4

    I’ve been wanting to make my own engine for programming(something akin to the processing framework in Java) with a more modern graphics library for the use of more modern features like hardware raytracing, compute shaders, and mesh shaders, but I have no clue how to abstract a graphics API, namely, what is the shared functionality?

    • @bencrabbe8549
      @bencrabbe8549 7 місяців тому +1

      you might want to check out travis vroman's game engine series for that. He has only written the vulkan backend but it is written to allow other backends to be added and is a good indication of what you need to abstract

    • @LightTheMars
      @LightTheMars 7 місяців тому +5

      I've struggled with this (defining the library boundaries) a lot in the past, but I can only recommend to start as non-generic as you can get away with. Trying to be as generic as possible from the start when you don't know what exactly to go for only leads to over-engineered results that very likely turn out not to be ideal for your project in the end.
      Starting with something simple saves a lot of time, and after working on and using it for a while the ideal boundaries become more clear. Don't abstract too much from the start.

    • @anon1963
      @anon1963 7 місяців тому

      do you even want to work in game development?

    • @tabletopjam4894
      @tabletopjam4894 7 місяців тому

      @@anon1963 possibly, mostly I just want a way to visualize what I’m doing

    • @tabletopjam4894
      @tabletopjam4894 7 місяців тому

      @@anon1963 I enjoy it enough, I just don’t want to be caught up in corporate bullshit like the Unity thing

  • @RoboGameOfficial
    @RoboGameOfficial 7 місяців тому +1

    I think we need a third episode.

  • @not_herobrine3752
    @not_herobrine3752 6 місяців тому

    what about shipping a binary of tcc alongside a project so one only has to cd into the project file and execute the built in compiler

  • @F00d5tamp
    @F00d5tamp 7 місяців тому

    Hey at least we saw some code fellas. We're getting there.

  • @xTriplexS
    @xTriplexS 7 місяців тому

    Ah man, this is gonna be great

  • @killergoldfisch1
    @killergoldfisch1 7 місяців тому +1

    Visual Studio is in this case a frontend for MSBuild, which is a capable build system. So I don't see a problem with his approach using the MS tools. MSBuild is even capable of cross compile for multiple platforms.

    • @JuvStudios
      @JuvStudios 4 місяці тому

      Yes. But if you want to actually build on other platforms, you cannot use MSBuild.

  • @lankymoose1831
    @lankymoose1831 7 місяців тому +3

    bruh you looked at one file in 16 min 💀

  • @TacoGuy
    @TacoGuy 7 місяців тому +2

    that was a surprisingly short one

    • @onejdc
      @onejdc 7 місяців тому +1

      Cherno's patience for this project cracked when he struggled halfway through the readme.

  • @leighrobinson
    @leighrobinson 7 місяців тому +6

    While the comments on the engine not being properly partitioned from the “game application”, I’m concerned about the emphasis of an editor.
    I’d say that 99% of hobbyist “engines” don’t have an editor and have no need of one on purpose. Much better to leverage other tools for common assets and do the rest in code.
    The runtime “framework” is usually enough on its own for most people to get bogged down with let alone suggesting that they need a editor to be a “real engine”
    :)

    • @wacky.racoon
      @wacky.racoon 6 місяців тому +1

      My game editor is a series of python plugins for Blender and it works quite well and is very versatile.

  • @Undead34
    @Undead34 7 місяців тому

    I love Cherno

  • @kelvinpoetra
    @kelvinpoetra 2 місяці тому

    hello sir...i want to ask how studio remedy made the northlight game engine for alan wake 2?

  • @pengie_
    @pengie_ 7 місяців тому

    this could easily be a multi chapter series

  • @ytbone9430
    @ytbone9430 6 місяців тому

    I agree @15:10! File open/save dialogs like the custom one shown here and the ones presented mostly on Linux / Mac, with no way to even copy / paste a path from / to the clipboard are ridiculous. They are such a pain in the butt. We were able to paste paths from clipboard and drag'ndrop into these file dialogs 30 years ago on AmigaOS already e.g.. I'm sure this is not the only OS which was handling this basic concept correctly back then. It's kind of sad that progress is reverted in so many aspects of "modern" software and applications.

  • @insertoyouroemail
    @insertoyouroemail 6 місяців тому

    The standard C++ build system is all of them.

  • @DeusExAstra
    @DeusExAstra 7 місяців тому

    If you have no need at the moment for cross-platform development, or maybe you are only supporting like 2 platforms... then honestly spending time on a build system may not be worth the effort. Getting a VS solution up and running is simple and then you dont worry about it. For most home engines/projects this will work great 99% of the time.

  • @nahimyaya1794
    @nahimyaya1794 5 місяців тому

    But you said you are not capable of roasting him XD

  • @handleneeds3charactersormore
    @handleneeds3charactersormore 7 місяців тому

    This is NOT a code review, it is a code rotisserie 😂😭

  • @agentm10
    @agentm10 7 місяців тому

    The annoyance was palpable in this one!

  • @sub-harmonik
    @sub-harmonik 7 місяців тому

    well now I just want to see it because of the build up

  • @dracula5752
    @dracula5752 7 місяців тому

    let's goo he pressed run

  • @Netryon
    @Netryon 6 місяців тому

    First - is it a good a idea to see some news saying EU congressmen used git when they launch the himars and then to know about it, because all of it some interactive game. If you tried to mod a game with yours cars, that might be why it's not correct to have one project or this project does not have modularity and testing team work so everybody does not mess everybody work. You have that modding self learning + everything your university taught and imagined it creating the websites with this folder structure.

  • @sumikomei
    @sumikomei 7 місяців тому +1

    Stuff like that file open dialog is one of my biggest pet peeves in programs, where they just implement their own that's prettymuch always wildly inferior and annoying. One of the biggest reasons why the first major libraries I'm learning is win32 stuff.

    • @sumikomei
      @sumikomei 7 місяців тому +1

      A great example of this is the file dialog of Paint Tool SAI, where it somehow feels the need to cache every observable particle in the universe every time you open it and is unresponsive for almost a minute, and then also doesn't support any of the simple stuff you'd expect like typing into the file list to jump to a file matching the character(s) you type, among other things.
      Just why...

  • @user-pm1kd6lh9b
    @user-pm1kd6lh9b 7 місяців тому

    i know how to use renderer to render gui, and splitter, cursor change, color picker, docker tab system, input text handle

  • @GameGevUA
    @GameGevUA 4 місяці тому

    6:41

  • @rickr530
    @rickr530 6 місяців тому

    CMake is everywhere because CMake is just fine. It's good to use CMake and the haters 1) apparently haven't experienced life before it 2) are mostly just nitpicking and are too lazy to learn even something as simple as CMake. If you're scripting the hell out of it then you're doing something wrong.

  • @glorioussir9673
    @glorioussir9673 7 місяців тому +2

    Dogmas, dogmas, dogmas...

  • @madeso
    @madeso 7 місяців тому +1

    Wheres the code review? You say you don't like to say things are wrong but then you are criticizing design decisions that are perfectly valid.
    1. Randomly switching compilers and dependencies isn't something you do in a project, specially when the whole team is using one specific compiler and library. I think wanting to make merge conflicts easier to handle and adding the ability to comment why you had to make that build setting are far better reasons to choose something like cmake or premake, even though you're only building for a specific version of msvc.
    2. It also looks like the engine is designed to work more like pico8, love2d, any emulator. Ie where you launch the engine and then load the game, so your whole "this doesn't work like hazel/unity/unreal/godot" point is kinda moot.

  • @catmax1449
    @catmax1449 7 місяців тому

    Why are people still talking about cmake, now we have xmake which is insanely better, basically Cargo for C++

  • @glewfw7989
    @glewfw7989 7 місяців тому

    yo wheres the rest of the video..

  • @lemon2125
    @lemon2125 7 місяців тому

    maybe you could take a look at the godot source

    • @user-ih1ms7ml1b
      @user-ih1ms7ml1b 6 місяців тому

      Im sure he will take peaks at it anyways when developing features for his own engine. No need to reinvent the wheel everytime.

  • @jonforhan9196
    @jonforhan9196 7 місяців тому

    CMake is great (CMake-gui I haven't tried) and the VS CMake extension is first class with proper intellisense and even CMakeLists debugging.

  • @maverikmiller6746
    @maverikmiller6746 7 місяців тому +1

    6:06 There is nothing wrong with that.

    • @darkbibni
      @darkbibni 7 місяців тому

      So you merge everything in the same project?
      I mean it is probably ok for some project but for a game engine which produce games, it's way better
      You can easily source control each projects and have many versions
      The engine will probably evolve
      And you don't want to break any of your old games by updating the engine for instance

  • @deathmanthesparagmos7819
    @deathmanthesparagmos7819 6 місяців тому

    If you want to be shocked, look at the code X-Ray Engine

  • @Volian0
    @Volian0 7 місяців тому +6

    I don't understand why you are complaining about custom file dialogs.
    Valve made their own for Steam and I can't see anybody complaining.

    • @orshy1
      @orshy1 7 місяців тому

      I'll be the first. Steam's file browsing is horrendous.

  • @guywithknife
    @guywithknife 7 місяців тому +1

    Focusing entirely on the build system and that the binary is basically the editor is silly for a non-finished hobby project. Like sure, it needs work as an actual reusable engine, but spending so much time focusing on that instead of the actual code is kinda ridiculous, especially since the engine is made by a young non-professional hobbyist.

  • @chipchip3
    @chipchip3 7 місяців тому

    Can you do godot code review?

  • @midou6104
    @midou6104 7 місяців тому +1

    2000 h to make
    And
    2000 h to review
    😂😂😂

  • @wacky.racoon
    @wacky.racoon 6 місяців тому

    Ok, i mean these are good advices, but not everyone wants to make the next Unity. The game "engine" can just be the core of your singular game that you are making without the overhead of having a fully packaged modularized engine.

  • @Netryon
    @Netryon 6 місяців тому

    This is art, but don't wish me to do perfect animations, make me create spaceships. Goal here is - we are afraid to lose this little game industry we have. Don't ask me to do it if it's not days, but months or years. If you don't shine together with me in graphics maybe you can do some python machine learning - you'd be still in the gaming don't you. You know it's not production in this .env file, because I don't need it now.

  • @Hossimo
    @Hossimo 7 місяців тому +1

    Poor dude. I know it's constructive but poor dude.

    • @wacky.racoon
      @wacky.racoon 6 місяців тому +2

      It's hardly constructive, it's just pushing some project structuring ideology while failing to take into consideration the project's scope and purpose. The brief moments he had code up it seemed well implemented.

  • @gsestream
    @gsestream 7 місяців тому

    make it working, before going into any deep end, with the options, ie k.i.s.s. before trying to go pro, why would you ever recommend going pro or trying to be a bpro

    • @gsestream
      @gsestream 7 місяців тому

      if you have per pixel 4x4x6 or 64x64x6 cubemap reflection caches, whatever fits in gpu/system ram, then you can instanced render all primitives to multiple buffers side by side very fast, making the scatter light reflection maps on the side, no memory fetch lag because of the instanced rendering, if you render multiple instances on the main, you render those to the reflection on/off screen pixel reflection cache buffers too, real time scatter lighting

    • @gsestream
      @gsestream 7 місяців тому

      well, you can put triangles inside sphere bvh octree, then shoot the rays to the top bvh sphere cells first (if hardcore ray tracing/casting in an acceleration structure), to see if it even hits that container, if any children have to be processed under it

    • @gsestream
      @gsestream 6 місяців тому

      if you think apps need to be broken to things to be perfectly working, then I cant help you, God only gives perfect stuff, not your lacking not-so-perfect stuff

    • @gsestream
      @gsestream 6 місяців тому

      you only need support for sub-par code, and perfect things are not lacking anything, so which is it, perfect or you get no support.

  • @ludologian
    @ludologian 7 місяців тому

    for a beginner

  • @georgehammond867
    @georgehammond867 6 місяців тому

    it could be oke.
    for now.

  • @siniiiik
    @siniiiik Місяць тому

    맵다 매워 ㅋㅋㅋㅋ

  • @tolkienfan1972
    @tolkienfan1972 7 місяців тому

    I can't stand cmake. It wants to do things for me. No. I want to choose the commands to run and what options.
    make sucks, but at least it provides the basics

  • @xeridea
    @xeridea 7 місяців тому

    WWCD

  • @propov1802
    @propov1802 7 місяців тому

    cool I'm early

  • @anthonysteinerv
    @anthonysteinerv 2 місяці тому

    Crazy how you posted cinematics, instead of gameplay classic EA shit lmao.

  • @seannolan2120
    @seannolan2120 7 місяців тому

    Second?

  • @nocluebruh3792
    @nocluebruh3792 7 місяців тому

    first???

  • @NeuroScientician
    @NeuroScientician 7 місяців тому

    Firstest :D

  • @maxi-g
    @maxi-g 7 місяців тому +2

    no, not enjoyable

  • @topg3067
    @topg3067 7 місяців тому +9

    very bad code review. You are talking about useless points. Why a build system is important, why the runtime and editor should be separate applications, and then some useless story. Seems to me, that you dont really wanna get into the code, and just yap about how much more you know, when that's not the case at all.
    You have some memories of how things used to be at EA, and then used 20 different libraries to stitch together a very bad "engine" yourself.

  • @screamified409
    @screamified409 7 місяців тому

    Hey, will you be looking at the starengine demo and perhaps the starcitizen server meshing stuff? would love to hear your thoughts on that!

  • @ESCAcarlos
    @ESCAcarlos 7 місяців тому

    If he creates games with it and he sells them, and they run just fine, I don't see the problem with his architecture. Steam has their own file menu, and inteliJ, pycharm. But I am also a noob and know nothing about game engines :D

  • @iamarugin
    @iamarugin 7 місяців тому +2

    It feels like the whole video was made just for ad. I hope I am wrong tho.

  • @boot-strapper
    @boot-strapper 7 місяців тому

    visual studio is the worlds worst IDE

  • @saniancreations
    @saniancreations 7 місяців тому

    This video could have been 5 minutes.

  • @anthonysteinerv
    @anthonysteinerv 7 місяців тому +1

    Id love to see how to create an editor with C# and then call the C++ engine.

  • @anthonysteinerv
    @anthonysteinerv 7 місяців тому +1

    Damn man since you started doing this series you said you wanted to make the video about to how to upload to UA-cam and build system, still not here.

  • @Netryon
    @Netryon 6 місяців тому

    These are campaign choices - must choose what you want

  • @anon_y_mousse
    @anon_y_mousse 7 місяців тому

    Personally, I'm thinking of either implementing my own build system or using `nob`. I hate cmake, ninja and meson. I have no idea how they work and don't care to, but every time I go to build someone else's code that uses one of them, terrible things happen. Out of the three, cmake is the only one that sometimes works, but I'd prefer plain Makefile's since I've rarely had a build failure with one of those. The idea of using the native programming language itself to build things is quite appealing and `nob` has inspired me. While I don't entirely like the methods he's utilized, I do rather like how simple it is: cc -o nob nob.c; ./nob; # how great is that.

  • @yo4156
    @yo4156 7 місяців тому

    cherno developed cs2? WYSIWYG