Sidestep Legends is available on Steam! If you want to support the channel check it out here store.steampowered.com/app/2077590/Sidestep_Legends/? Also wishlist my upcoming game Moose Miners on Steam: store.steampowered.com/app/2591410/Moose_Miners?
It wasn't a mistake because it looks like you have made some excellent progress in making your game, it looks great, and Raylib helped make your game idea become a reality. So, Raylib has been more than good enough at this point.
I agree with the author. I've been programming professionally for 20 years now. C# is a terrible language, though handy for prototyping, for office applications it is a great language, but not for realtime. C/C++ has much more abilities to control and optimize programs.
Yeah, very much indeed. The whole having to pay a license fee for as long as I want to update and support the game was one of the factors at the time why I did not go with Unity, but back then I could not have imagined that Unity would go with something as absurd as what they have now. I really feel for all indiedevs that are have released games with Unity or are deep into development of games with Unity. And at the same time, I am really happy I did not go with Unity.
Yeah, having to pay a subscription fee for as long as I wanted to support and update my game was one the reasons for why I did not go with Unity. But I never would have guessed that Unity would screw everyone over this much. It really makes you take some extra time to think through how the payment model is and can change in the future for the tools your are using and the future support of your games depend on. And of course nothing will beat owning your own tech stack, with something like Raylib you are very close to that due to its license and it is also so easy to follow the code in Raylib that you can easily make any changes you need yourself.
I liked C# a lot when I started out with programming. Everything is just convenient and easy, but you pay for it in performance. That enthusiasm slowly diminished over time as I saw the results of C#/LINQ in production code. Later on, I stumbled upon Raylib and I can't stress enough how right you are: It is such a blessing to work in a simple, straight-forward framework. No hassle with long compilation times, slow editors, massive overhead. Your videos are great and very relatable. Thanks a lot!
C# is probably more acceptable in writing games in terms of performance than C/C++ is acceptable in writing services with a DAL/API/etc in terms of stability, maintainability and time-to-deploy. When it comes to those types of services, C# is miles ahead. My advice to whoever watches this video: Don't get discouraged from using C#, it has a bright future and is a delight to work with.
My understanding from tests was that reasonably good C# was about half as fast as C++ over various benchmarks and stress tests. So in any game you should absolutely be more than fine because it's not going to save your behind if it's just your game logic/glue code within unity, even if your game logic is really intense it is super unlikely to make or break any target frame rate.
I’m so glad to find people like you out there. I also use C# professionally and I actually think it’s a good tool for what we do (web backend). But like you, I love using C. I find it the perfect level of abstraction. Did you also consider Godot or SDL? I started a “small” game with Raylib but have been finding it hard to stay motivated when getting stuck on collision problems and other physics
I did consider Godot, I actually talked about it a little bit towards the end of the video. For this game I wanted to have something to build on and not have to make things like skeleton animations and model loading from scratch so SDL was not really an option.
I had a similar experience as you, but in reverse. I started with C++ and over the years I got burnt out. Switching to C# felt like a blessing. I no longer have to worry about pointers and memory management. Plus the whole language is more high level which allows me to write code faster while worrying less about low level nuisances. I especially love the part where every error leads to an exception being thrown, instead of segfaults, buffer overflows, undefined behavior etc. Overall, I think its not about programming languages itself. Its simply human brain gets used to everything over time and craves for something new. And this new always being perceived as good and interesting, not because it is, but because you got bored of the old one.
I don't really relate to that at all to be honest. And I don't think memory management is much easier with C# than in C/C++. In the end if you want the code to perform you have to think about memory and don't make a bunch of small allocations. With a language like C# that means minimizing the use of classes for data and minimizing the use of the features of the language that is supposed to make things faster to write. I do agree that the error handling in C# is convenient, but it does come at a significant performance cost with things as just looping an array being measurably slower, and looping a List in C# is about 2x slower than looping an array. For me memory management in C is not really any different than the memory management I ended up using in C#. I mostly statically allocate all the memory my program will need and mostly avoid dynamically allocated memory. The big difference when using C in regards to memory is that in the rare cases it makes a lot of sense for me to use dynamically allocated memory I can control exactly when it is freed and don't have to worry about a garbage collector creating frame drops down the line.
If you have to worry about pointers and memory management in C++ you are not using the language correctly, smart pointers and range types completely remove the need for manual memory management. Buffer overflows really shouldnt happen at all if you use the standard types and the .at() function which will throw on illegal access. I am not sure which IDE you use but we use Visual Studio which provides a stack trace upon any error resulting from a nullptr dereference or other panick invoking action. Undefined behavior can be tackled with analyzers or enabling most compiler warnings. C++ is a bloated overly complex chimera of a language but don't complain about things you can actively do something about. It is not C++'s problem if you use it as C with classes.
And you earned a new subscriber! Your video was great, It was concise and to the point, It didn't feel drawn out and was easy to understand, Keep it up!
On the other hand, Vampire Survivors, the game you're trying to emulate, was programmed in Javascript (current version runs on Unity). So I would say performance is not as important. Just get your game out quickly and make it fun.
This video convinced me to use raylib. I tried love2d yesterday to make a snake clone. I loved how simple it was to implement everything, but dynamic typing was really annoying sometimes (and also the fact that using undefined variables does not raise an error, especially for typos). I think, with raylib, I found a great place. Both a simple API and using C by default (I've seen that you can actually use many other languages, but I think I'd stick to C) make a great combination. Great video, dude, and nice game.
It is the first time I hear that an engine was build in c# with directx from a studio, as in my bachelor project I made a game engine in c# and directx too and it is really cool knowing that a studio out there done something like similar
Yeah, C# is a really popular language, especially in my city among companies working with general software development. And since there are not that many game companies here using a language that people outside game development are used to helped with finding people. I don't remember if I mentioned it in the video, but this was for landbased casino games and the company I worked on also made the platform that hosted the games and handled everything else on the machines which was also written in C# and since it was a rather small company it made a lot of sense to use the same language for both. There were also not really any good off the shelf game engines when this was started. Unity was still quite early, but more importantly it had and still has a very expensive license for gambling games. Godot would probably have been the perfect choice for this, but I don't think it existed back then or at least pretty much no one knew about it yet.
people use c# for game development as a scripting language meaning that the base engine is written in c/c++ because of fast compilations and its reflection system and easy hot reloading.
Completely agree with you, as I also really like low-level game development. Interesting why you chose C and not Rust, for example. Working with pointers in my experience is a nightmare.
I personally don't see the appeal of Rust for game development. I have not used Rust myself, but from what I understand from reading about it the way it handles memory and other restrictions just seems to be an unnecessary obstacles for developing games. I can see why it would be very useful for writing software where security is a major concern, such as server backends, a web browser or Operating Systems. But in a game it typically don't matter if someone can exploit a buffer overflow for example. The only reason for using it in a game for me would be for the server of a multiplayer game, and maybe in that case you could make a point to use it for the client as well to share some code between the client and the server. Pointers for me is a really useful tool and I would not like to go back to a language that don't expose raw pointers again (before going full time indie I was working with C# in my day job and I would rather not touch that language again for any serious project). I don't really see why people are afraid of pointers really, it is just a tool. It does not get more complicated than you make it yourself.
Truly amazing work on the game, and your opinion on the matter was very important for me to decide whether to go for Raylib or MonoGame. Thank you very much mate, keep up the great work!
i dont really like unity cause of the shitty optimization for voxel based games (the jut compiler slows the game so much you need to install a diffrent one and rewrite almost all your code) also i code on my laptop (wich is my only avilable form of x86 or x64 form of computing) that has 4gb of ddr3l ram with a 4core pentium something something U so thats why i stick with raylib its not as complicated as opengl and its much more faster than unity and i dont want to do 90%of my code just for creating a window wwith window.h since i code on windows (i also compile for linux on a wsl) and also i have a problem with doing collision for voxels and the player (i want to create a minecraft like terrain but with more quality so like each block is 32x32voxels so the terrain can be more detailed but that means i need to optimize the hell out of it for higher graphics quality i run the game on my friends pc so the textures can render)
The biggest drawback with Unity currently is that they're trying too hard to compete with Unreal to the point they're harming development. The newest LTS is noticeably slower and the extra frameworks and features they popcorn in by the release only makes things worse. This has reached a point where many of their features are either deprecated or perpetually in alpha.
Yeah, I ran into that a few times during my time with Unity. You find some feature that could be useful, but it says that it is deprecated. Then you look for the new thing and of course it is in experimental. Unity seems to have a difficulty making their stuff production ready. And I agree with about them trying too hard to compete with Unreal, it is a lost cause for Unity I would say, because what Unreal has is just so much more impressive if you are going for AAA quality. By going after Unreal Unity has ended up in an awkward in-between state, where it is not as good as Unreal but still too bloated and complicated for smaller games.
Yea, to me it always seemed that Unity tries to sit on all the chairs at the same time. They want to be the go-to beginner engine, the asset flip engine, the 3D AAA engine, and so on, and for me personally, I just never found it the best tool for anything because of that. And in the last few years, I see more and more people talking about the "it's either deprecated or experimental" situation and that is just the worst place they could ever go. I'm using Godot 4 and looking at O3DE and Raylib
It's no surprise they cancelled the game they were going to develop using their own engine. Then they'd run into the bugs we all do and have nobody to complain about fixing them. It's their fault after all.
Well I mean since Raylib is just a library over OpenGL it has support for just normal glsl shaders which you can do whatever you want with both in 2D and 3D
@@lingonstudios What did you use to make your 3D models? And if you followed any tutorials on modelling and rigging them could you point me towards them? Thanks!
@@jarreed0 Most of the models are bought assets from Synty. A few of them I made myself in Blender. For rigging and animations I used Mixamo. Then I export the model with animations to the iqm format to be loaded with raylib. For getting mixamo working with Blender this tutorial is really good ua-cam.com/video/wYqJ7AyEuhc/v-deo.html and for exporting animations to iqm for raylib this one is good ua-cam.com/video/_EurjoraotA/v-deo.html
I'm a unity game programmer. I love writing in C# as it's just... kinda hard to explain, but my brain understand it well. like, when I think about something to code, my brain starts seeing the lines in C#. and although I do code in C/C++ for my uni projects (I'm studying computer science) I kinda have a hard time visualizing C/C++ code in my head, it looks weird. but I can understand your points. when I code for games, I see myself using OOP concepts like classes, inheritance, etc. quite a lot... and this is what holding me back from diving into coding with pure C, just like you did. idk what I should do, any tips? btw, great work! I really like your content!
I would suggest looking into data oriented programming. It is basically about looking at what data needs to be transformed and work with to solve the problem and then deicide on the structure and write the code based on that. This video is a good introduction to the subject ua-cam.com/video/rX0ItVEVjHc/v-deo.html
it actually depends on your liking. i dont mind writing 400 lines of code rather than one button in unity. i mean i am the type of guy who likes code and not drag and drop like stuff
Yeah, I tend to agree. I don't mind writing code for most things since it means I can have full control and understanding of it. But some things are better made with an editor. I ended up creating a simple editor for the skill tree of the game in the end since it was really inconvenient to define the different upgrades in the skill tree and their connections in code. It was simple enough to just write a custom editor for that specific task, so you don't need a full editor for everything like Unity. It is enough to just write small editors for the things it makes sense for.
I used Unity quite a bit at my last job. Decided "never again" and got a job working with Unreal Engine. I'd recommend it 10 to 1 over Unity on all fronts.
The idea that C# isn't good for games is a viewpoint that prioritizes maximum performance and low-level control. This viewpoint is valid for those who prioritize that and likely with games that have the scale to necessitate that, but I don't buy it as a generalization. It took Concerned Ape 4 and a half years and 10 hours a day, juggling every aspect of development, to complete Stardew Valley in C# and XNA, and even then, he was overworked and past schedule. I'd be curious to know how long that would've taken him in C/C++. He probably could've micro-optimized everything using it but at what cost? But I agree that C is good to learn for game programmers, perhaps in parallel with C#, Lua, Java if they choose.
I really don't think C# is going to give you much if any at all boost in productivity in itself compared to C. As long as you have a comparable amount of experience in both. Of course if you are more experienced and used to C# than C then you are going to be more productive in C#. But if you write C# in a good way it will be very C-like anyways so the code would be very similar in C vs C#. With a game like Stardew Valley it would probably be much of a productivity boost to use Unity instead of XNA than it would be by using C# over C. And just because you use C for something you don't have to go into micro optimizations, that is overkill for most projects anyways. Just writing code that does not actively hurt performance or the ability to optimize down the line is enough.
Hey, nice video. I've touched several engines, I work professionally with the UE and I've even written my own one. Yet, I've never touched Unity basically because of your video. The lack of source is no-go for me. Therefore, I agree with your general sentiment, except one thing. Unity isn't the only engine. With your mindset, Bevy might be a good "get your hands dirty" option and Flax might be good for "I just want to touch stuff that I need, when I need it". Unreal is too complex IMO, but still a way better option. Then there is Godot, which I have mixed feelings about (I'm not sure it can be pushed to AAA, I feel that there are many choices for ease of use while sacrificing performance), but still, forking it and writing your own engine from it (instead of "from scratch") would be better, IMO. So yeah, agree with your sentiment, but you compare raylib with the worst possible engine for you.
Thanks, I am glad you enjoyed the video. I choose to compare against Unity partly because it is the most used engine for indie developers, but mostly since that is the engine I have professional experience with. So, I think Unity is a reasonable option to compare against given the background. While in a more general sense I don't see any use for an engine like Unity for me. The only engine options I honestly could see myself considering for a project as of right now would be Unreal or maybe Godot. Simply put, any project that does not require any fancy AAA-style rendering would be easy enough to setup and most likely get a better outcome with a custom engine. And if I really wanted AAA-graphics then it seems like a no-brainer to choose Unreal over any other option with all the fancy graphics stuff it offers. But if I choose to compare Raylib to Unreal for this video it would have been a very short video due to me not having used Unreal. It would simply be: Why did I choose to use Raylib over Unreal? Unreal is much more complicated than what I needed for Sidestep Legends so I choose Raylib instead. The end. :P
@@lingonstudios I agree and it's even in your title. I was just mentioning it, because I still go back and forth on (not) using UE. You see, I'm programmer in industry with it, but I hate how overly complex it actually is. On the other hand, writing everything from scratch is also somewhat absurd (as you've mentioned, writing particle system as a list of numbers isn't fun, which I've also found out when I've written a game with cpp and OpenGl directly). I'm also searching for that middle ground and for me, it seems to be Bevy (mark my words, it will soon be extremely popular) or Flax (because it's like UE, but still simple, easy to navigate and modify).
@@GonziHere yeah I think you really need to have a good reason to bring in the complexity of a large engine like unreal. Top tier graphics is the best reason I can think of. But if that is not needed for the game rolling with a custom engine or a simpler engine is a better choice. It is also good to remember that even if you don't go with a full engine you don't have to do everything from scratch. And even the things you make from scratch is usually enough to make once and then you have it for your next game. A particle system for example, just writing a simple particle system editor that can be extended over time doesn't have to be that much work. And if you use for example dear imgui for the ui you don't have to worry about the ui part that much. Bevy looks a bit interesting, but I don't see the appeal for using rust in game dev. For game severs maybe, but for single player games it seems it just adds annoying restrictions for not much benefit. I guess it's better than using c# at least.
I use Unity and C# but I've always had much the same problems with the engine that you described. However I really enjoy working in C# and most of the sentiment I've heard from other people is similar. So I'm very interested in your thoughts and perspective about why you personally DONT like using it and why you consider C to be better for game development. I have some knowledge of C and the main thing I've noticed is that the people who do like using it usually LOVE using it and those that don't usually have a very strong aversion to it. But I've never really understood the reasons people have for either stance and not much is talked about it. Unfortunately it doesn't help that a good majority of online discussion around these things ends up very heated and the whole thing often becomes an ideological warzone.
Yeah, language discussions have a tendency to sway away from actual beneficial discussion quite quickly. The main issue I have with C# is the managed memory part. Both the garbage collector and the restriction in memory control and management it comes with. I think it is essential to have access to raw pointers to get the most performance wise and also to be able to write the code I think is easy to work with and understand and maintain. Then secondly the OOP part of C# is something I am not a fan of either, but that one you can work around by using mostly static classes and static methods and then the only problem with it is some annoying boilerplate code you would not need in C. I still see why people like C# and the features you get by it being a manages language, it is harder to write bugs that can be exploited to leak data and similar bad stuff, but in games that is mostly not an issue. My view is that C# is not really a language suitable for production level code since it gives away too much performance for security and convenience. I do realise that is quite an extreme view to have, but I with how slow and inefficient software often are now, a little over correction might be needed.
@@lingonstudios Oh yea I can see that. C# does come built in with certain restrictions just by the way its conceptualized. A lot of which you can circumvent but that's the thing, you have to take extra steps and think about how you structure your code in ITS terms, which often isn't ideal. And it does have a very strong OOP focus that restricts the way you go about implementing things even further. In the case of Unity + C# I've of settled into an approach that works well for the vast majority of my use cases in terms of making systems. But the more I look at the way people do things in C the more I realize that I'm kind of emulating that in a roundabout way. Though I think there are benefits when it comes to making certain types of game logic. There's a lot of code that can be considered "script logic" and then there are things like fundamental gameplay systems. For systems I can see how C is a more natural choice, but the less verbose nature of C# comes in handy for the type of script code that lies somewhere in-between. I think possibly if you are comfortable with both languages and you're working by yourself or with a small team that can either specialize or also is comfortable with both, It may be worth while to use either one based on the particular use case, so that each language can be used for its strengths. Then again there are drawbacks for using multiple languages in the same project.
@@DetectivePoofPoof Yeah, some more high level features could be handy sometimes, but you get most of the way by just creating good Utiliy functions in C. Or if you really want some more high level features I think going to C++ for things like operator overloading for example would be a better choice in that case, and then you can just go with C++ for both the systems and the more script-like parts. There are also some new languages that seem interesting that focus on being simple like C but introduce some useful stuff especially for games two examples being Odin and Zig. As long as I am working by myself I prefer to just write everything in one language, and I don't really feel it takes any longer writing script code in a system language. When you are a larger team an argument could be made to introduce some scripting so for example tech artists and game designers can script parts of the game. My experience with that so far though is you have to be really careful and as a developer always review their work and more often than not you have to rewrite it so it works and performs well. Because of course a tech artist or a game designer won't write good code, that is not their area of expertise. In that case it is probably a better idea to give them some limited visual scripting, like a state machine editor for gameplay stuff and particle systems and effects system for the art stuff.
@@lingonstudios Those are some good points. I've heard before that C++ but written closer to C with just some of the "++" features works well. Its probably no accident that outside some newer game engines this is usually the norm for game development. With the occasional scripting language for designers like you mentioned.
100% agree with your statement, but i have to add, C# is beautiful on the outside, but ugly on the inside (the garbage collector). C++ is the exact opposite.
@@DrZygote214 c# without the garbage collector would be a perfect language
3 місяці тому
I wouldn't do C today, rather Zig, Odin, Haxe or Go. The main reason to use an engine would be platform support. This is probably the bigger question. This is where Haxe wins if you simply want to use a language.
I personally don't really see the benefit of these new languages, the only one of them I am a bit interested in is Odin, but not enough for it to be worth switching to it
@@lingonstudios have you looked at Beeflang? its like C and C#
2 місяці тому
@@lingonstudios I can understand that, you seem to have found your language. My point was that if you want to distribute your code to multiple platforms. Some have good support for doing so.
Sure they might have good support for different platforms and while that is quite low on my priority list, there really is no language that has better support for multiple platforms than C
I've been messing with Raylib but can't get lighting to work when I draw a model.... Raylib looks like a really good library but I'm totally stuck when dealing with the opengl bullshit
Nothing special really, I just places cubes (and sometimes some other shapes like a low poly cylinder) in the blender scene for the map. And then I export just those models to a file separate from the exported level file. Then I load those with raylib and just use raylib's collide with mesh functions to check for collisions. Which makes it much cheaper than it would have been to check against the actual geometry. I did a code walkthrough on a livestream of this game where I think I talked a bit about it and showed the blender scene, ua-cam.com/video/-LPHV452k1Y/v-deo.html
A question I have is around why use raylib as opposed to wrangling together your own framework? I've questioned this myself and have been on the fence about using existing C frameworks or just roping my own together. My guess here is accessibility from the get go which lets you get up and running a bit faster
What are you doing differently? and why? If nothing, why reinvent the wheel? If you have some hyper specific game that requires something no existing engine or framework could handle, then, that's the only reason you'd need to develop an engine or framework instead of using and existing one. It's not a trivial thing to build. He said he had spend 4 years building an engine for casino games.... Just building an engine for one type of specific game. That's a lot of time. Do you need to spend that much time... doing something someone else already did?
Well, there really is not much to learn about Raylib. All it's functionality is well documented in the api, and the examples on the websites gives a good overview of what Raylib can do for you. Everything else is just general programming and game development, which there are a lot of tutorials about. If you want to make something in 3d I would recommend starting with learnopengl.com/ for example which goes through the basics about lighting and graphics programming
“Don’t forget that c# is a scripting language” wow burn! I picked monogame for similar reasons that you picked raylib and I’ve enjoyed a lot about it. It is starting to feel crusty though and the most successful games made using monogame were from old XNA devs. I tried raylib (using D Instead of C++) last night and I was very impressed. I think I might be due for a switch.
"C# is a scripting language" Is a joke I like to say since I a friend of mine used to get a bit triggered when I said so. He liked C# quite a bit but despised scripting languages, so the though that C# possibly could be considered a scripting language was not something he liked :P
Other than my own platform I like Raylib and gDevelop. I use Java for everything in my own AllBinary Platform. I have gone to the trouble of being able to import gDevelop JSON into my runtime. So please don't tell people they should not make games with Java.
I have considered Odin, I keep an eye on it and might look more into it sometime in the future as it does look very promising. But in that case I would probably skip Raylib and just go with Odin directly against DirectX11. Not because I don't like Raylib, but I don't like OpenGL at all. I still would probably keep the resource packer that Ray made for Raylib for example since that one would be easy to integrate in any codebase. But before looking into that a full game in assembly is on the todo list since I have been greatly enjoying my time while I worked on my city builder project in assembly
Yeah I have heard a few things about Bevy. Seems a bit interesting, but I am quite sceptical of using Rust for gamedev though, seems a bit too unnecessarily restrictive since the added safety is not that important for games.
@@lingonstudios well bevy makes it very nice. Ground up small projects with Rust create more issue with borrow checker than using Bevy. It automates parralelisation (non WASM builds afaik). Some of the things are a bit unpolished (for WASM build have to load information as assets when it comes to game data that should be changable without recompilation). And I actually like Rust. It is for people who want to do efficient game and use Rust, I'd guess by hand C++ or by hand Rust games would still be faster/more efficient than using Bevy because it does have overhead, just definetly less overhead than Unity. P. S. There are third party cratea that make saves save without need of using assets
C++ is not a super of C, it is independent language that was influenced by C. It looks like superset, but in reality C code compiled as C++ - might not compile or might now work as you expect. Some things are allowed in C (especially in modern standarts) that are not allowed in C++ and vice-versa.
Hello sir! Do you recommend me using Raylib for 2D games? I want to use the python binding. I know, Python sucks more than C# (much more) in terms of performance, but I worked with Python on web and app development and I find it comfortable to work with. The point is, do you consider Raylib capable?
Yeah, Raylib would work fine and is definitely capable enough for a 2D game with Python. You could also take a look at pygame, I don't know much about it myself, but it is a good idea to compare the things Raylib has against whatever pygame has to offer to see which would fit your preferences and game idea best
@@lingonstudios Hello and thanks! I used Pygame for around an year or so. In my experience, Pygame forces certain aspects into it's own event loop and it complicates stuff at times. Overall, Pygame is easy enough, but it lacks hardware-acceleration. According to the benchmarks, Raylib (Python binding) is much more performant than PyGame.
@@lingonstudios One more question if I may Sir : something that made me question Raylib's capabilities is that there are no real or finished games made with it. The official page is full of demos/prototypes at best. This all changed when I found your video : for a game library marketed as a 2D "engine", it's quite impressive what you as an individual and raylib as a technology could accomplish. Do you think this is due to the fact not enough people know about Raylib?
@@alexale5488 I think it is mostly because full on engines like Unreal and Unity but now also Godot has so much to offer when you want to make a game. There are a lot of more things than just making the game that is needed when you want to actually ship it to end users. These complete engines do have solutions for pretty much all these things already, ready to just use. But writing a game with a simpler framework like Raylib, you have to make these yourself. But of course the things you get from the engines has the price of things not being as flexible as you might sometimes want, pretty much the problem you had with pygame but worse. But yeah, it is probably also because not that many know about Raylib either, most people getting into gamedev now think the only way to make a game is to choose one of the big engines. More and more people have found Raylib especially the last couple of years so I think we will see more games released with it in the future, but it takes time to make a game, so there will be a delay before we see the result of the increase in popularity. If you checkout Ray on Twitter (or X I guess) he recently made a thread about games made with Raylib, and there were some more games there that were released or are going to be released on Steam if you want to see some more examples
it's fine if you dislike C# for games. terraria is pretty popular, however. it will be the best business programming language for a long time. i've been working with it for 16 years so i'm a little biased
Bought the games but Sidestep legends won't load on Linux with Steam even specifying versions of Proton. I hit play and it starts and stops. Dextram fails differently. The vast majority of games I play on steam just work with Proton but these don't seem to. (Edit: I got Sidestep to run with Proton v4.11 but it's very slow, like 1fps, might need more Proton tweaks to run)
Dextram has an issue with proton, but there is a linux version for it that should work, it works on Steamdeck at least. Sidestep Legends works really well through Proton on Steamdeck so not sure why it doesn't work for you. I don't officially support Linux desktops since I don't use Linux myself and it is unfortunately not worth the effort, but both games should work fine on the Steamdeck at least
@@lingonstudios Dexatram installed on steam says it fails to find run. sh and crashes. I can't get sidestep to reliably work with Proton. I use Ubuntu as my main OS but everything that works on my steam deck has worked on my Ubuntu desktop so far.
7 місяців тому
You earned a new subscriber. My question is.. Are you interested to port the game (for free..) to a platform where I'm pretty sure you can sell an hundred of copies? :) If so I can do the port for you (using RayLib of course). The people will buy the windows game on steam and use the exe for the other platform :)
5:34 That's a mindset that just worsens the reputation of Unity... if you don't show the logo on a good game the rep won't go up no matter what. On the other hand, I think if there's a logo and you made a decent game absolutely no-one will care which engine it was made in until it's fun. If the game actually has problems that's when players will start calling out the devs and crapping all over the engine.
Yeah that is true, but I think the whole thing with having to buy a pro license to get of the logo is a deliberate strategy from Unity's side. They don't care if their engine has a bad rep among gamers, since if it helps them sell more pro licenses then that is a win for them.
@@lingonstudios I mean, they probably do care, but it's still better to have some people buy the pro license than no small dev buying it. They have some revenue off of mandatory licenses from companies who reached their revenue limit, but they don't have a cashcow like Epic has Fortnite
I have heard a bout it a little bit, but don't know that much about and haven't tried it. Looks a little bit interesting, but I am quite happy with C and if anything I'll probably move to assembly for future project rather than to a more high level language
I agree completely. LibGDX was really nice to get going with and worked really well for the 2d games I made with it, but Java was really not a good language to make games (or probably anything honestly) with. Raylib has a lot of the same vibes as LibGDX though and has the benefit that you can use almost any language you want with it
Hi I would definitely say Raylib was the right choice, especially now given the Unity controversy happening now. I found your video because I want to try making a game but I have no experience and i read a lot of positive comments about Raylib. I was surprised you mentioned that you very much enjoyed programming in assembly and in c language -- is it because of performance, or the actual language syntax/structure that you prefer them over the "higher level" languages like c#? You also mentioned one of the drawbacks is that Raylib does not come with an editor, are you using emacs to code? I think Visual Studio has a free version that you can use... I also want to go the same path as you! using c language and Raylib -- any pointers or advice for a beginner? (I have not programmed in c since many many years unfortunately.. luckily i still have my "The C Programming Language" book by Kernighan & Ritchie from university. Your games look great and are inspiring! Thank you!
Thanks :) I like the control you get while using assembly or C and the performance part is a big factor for me as well. When using C# if you really care about performance, then pretty much all the OOP features are useless and you end up having to write very C-like code but in a language that does not allow you to take proper control of the memory. When I talked about Raylib not coming with an editor I meant the a scene editor like the one Unity has. That kind of editor can be really useful to have, but for this game I solved that by using Blender as an editor for the levels and then I wrote a simple skill tree editor (also with Raylib) to allow for faster editing of the skill tree in the game. For writing code I am using Visual Studio, mostly just because I am used to the shortcuts in it and am too lazy to switch to something faster, since it is quite clunky and slow, but at least the 2022 version starts much faster than the older versions. It is also still faster than Visual Studio Code which I used at the start of the project. It became completely unusable as the project grew a bit, and this project don't even have that much code in it, but that's how it goes when you write an app in Javascript. Also C is not the only way to use Raylib, I just think it is the most convenient language to use with it since it is written in C. That makes it easy to take any function in it and copy it to make your own version when you need something a bit different than the original does. However, Raylib have a bunch of bindings to other languages including C# if that would be your preferred language to use.
@@lingonstudios Thanks, Okay i have Visual Studio 2022 so i can use this too, it's not too bad as an IDE. I think I will try using C as well, i think it will be a good excuse for me to change things up and it will give me added perspective. I'm not sure i will try assembly though, that's always been scary to me! 😂
Why not Java for Games ? Rising World Made with Jmonkeyengine and Java Minecraft with Java Project Zomboid Java and lots of other games ? its up to you and your preferences. I also love C
I would say those are all good and great games despite their use of java and certainly not because of it. Especially Minecraft does suffer quite a bit by using java since java is especially not a good idea for a large open world game like minecraft. The garbage collector has been an issue for many people in many versions of Minecraft and Mojang have done a lot of optimizations to make it run as well as it does despite using java. Those types of optimizations should of course be made even if the game was made in C for example, but then they would result in being able to enable higher render distances and larger redstone machines and more entities in the world with the same performance the current version has
Raylib is definitely intriguing to say the least! It also seems to be a good option for anyone that doesn't want to deal with the idiosyncrasies of a game engine. I've never really cared for Godot myself as well, I always felt like I was making a mistake while using it or considering it for a project. Personally I think Godot is too volatile right now; the engine doesn't excel at anything and something always getting a massive revision.
C# is an OOP first language, and OOP is outdated, only now programers come to understanding that it is hard to design your code to be performant and readable while doing OOP development. That's good that industry embraces this and we see comeback of more simple procedural programming and concepts like data oriented programming. Nevertheless new C# apis support writing performant code that doesn't rely much on garbage collection, though why you would want to - if you have other better languages.
Sidestep Legends is available on Steam! If you want to support the channel check it out here store.steampowered.com/app/2077590/Sidestep_Legends/?
Also wishlist my upcoming game Moose Miners on Steam: store.steampowered.com/app/2591410/Moose_Miners?
As a C programmer myself, this is music to my ears.
It wasn't a mistake because it looks like you have made some excellent progress in making your game, it looks great, and Raylib helped make your game idea become a reality. So, Raylib has been more than good enough at this point.
I agree with the author. I've been programming professionally for 20 years now. C# is a terrible language, though handy for prototyping, for office applications it is a great language, but not for realtime. C/C++ has much more abilities to control and optimize programs.
U are definitely a good professional programmer
but if you have the access to the base engine you could implement performance critical code in c/c++ and interface with from c#.
@@ayoubbelatrous9914 using a shared object?
idk why i can't seems to manage big projects with c++, it just become a mess
@@AnnasVirtual C++ language as itself is ok (excluding horrible errors and templates) but build systems? Man, I hate CMake and all this stuff.
raylib is goated. I use Unity at work and it's the last thing I want to look at when making my indie projects :)
I agree with everything you said and find your analysis to be quite fair and honest. Your game looks absolutely fantastic; kudos!
Thanks :)
In hindsight, you made the correct choice
Yeah, very much indeed. The whole having to pay a license fee for as long as I want to update and support the game was one of the factors at the time why I did not go with Unity, but back then I could not have imagined that Unity would go with something as absurd as what they have now. I really feel for all indiedevs that are have released games with Unity or are deep into development of games with Unity. And at the same time, I am really happy I did not go with Unity.
:) It is September, 2023. I think the answer has revealed itself to us all. Good choice, my friend.
Yeah, having to pay a subscription fee for as long as I wanted to support and update my game was one the reasons for why I did not go with Unity. But I never would have guessed that Unity would screw everyone over this much. It really makes you take some extra time to think through how the payment model is and can change in the future for the tools your are using and the future support of your games depend on. And of course nothing will beat owning your own tech stack, with something like Raylib you are very close to that due to its license and it is also so easy to follow the code in Raylib that you can easily make any changes you need yourself.
me using the c# binding of raylib hearing this guy trash talk c#
What a great decision you made in hindsight of the recent calamity with Unity! Power to you on your total control of your game dev :)
Thanks for sharing your game engine choice experience. Very informative.
Glad you enjoyed it!
I liked C# a lot when I started out with programming. Everything is just convenient and easy, but you pay for it in performance. That enthusiasm slowly diminished over time as I saw the results of C#/LINQ in production code.
Later on, I stumbled upon Raylib and I can't stress enough how right you are: It is such a blessing to work in a simple, straight-forward framework. No hassle with long compilation times, slow editors, massive overhead.
Your videos are great and very relatable. Thanks a lot!
C# is probably more acceptable in writing games in terms of performance than C/C++ is acceptable in writing services with a DAL/API/etc in terms of stability, maintainability and time-to-deploy.
When it comes to those types of services, C# is miles ahead.
My advice to whoever watches this video: Don't get discouraged from using C#, it has a bright future and is a delight to work with.
My understanding from tests was that reasonably good C# was about half as fast as C++ over various benchmarks and stress tests. So in any game you should absolutely be more than fine because it's not going to save your behind if it's just your game logic/glue code within unity, even if your game logic is really intense it is super unlikely to make or break any target frame rate.
I’m so glad to find people like you out there. I also use C# professionally and I actually think it’s a good tool for what we do (web backend). But like you, I love using C. I find it the perfect level of abstraction. Did you also consider Godot or SDL? I started a “small” game with Raylib but have been finding it hard to stay motivated when getting stuck on collision problems and other physics
I did consider Godot, I actually talked about it a little bit towards the end of the video. For this game I wanted to have something to build on and not have to make things like skeleton animations and model loading from scratch so SDL was not really an option.
I had a similar experience as you, but in reverse. I started with C++ and over the years I got burnt out. Switching to C# felt like a blessing. I no longer have to worry about pointers and memory management. Plus the whole language is more high level which allows me to write code faster while worrying less about low level nuisances. I especially love the part where every error leads to an exception being thrown, instead of segfaults, buffer overflows, undefined behavior etc.
Overall, I think its not about programming languages itself. Its simply human brain gets used to everything over time and craves for something new. And this new always being perceived as good and interesting, not because it is, but because you got bored of the old one.
I don't really relate to that at all to be honest. And I don't think memory management is much easier with C# than in C/C++. In the end if you want the code to perform you have to think about memory and don't make a bunch of small allocations. With a language like C# that means minimizing the use of classes for data and minimizing the use of the features of the language that is supposed to make things faster to write. I do agree that the error handling in C# is convenient, but it does come at a significant performance cost with things as just looping an array being measurably slower, and looping a List in C# is about 2x slower than looping an
array.
For me memory management in C is not really any different than the memory management I ended up using in C#. I mostly statically allocate all the memory my program will need and mostly avoid dynamically allocated memory. The big difference when using C in regards to memory is that in the rare cases it makes a lot of sense for me to use dynamically allocated memory I can control exactly when it is freed and don't have to worry about a garbage collector creating frame drops down the line.
@@lingonstudios You are obsessed with performance. I see.
@@lingonstudios I perfectly agree with your analysis but I am totally with the decision of Hrapvlesu.
If you have to worry about pointers and memory management in C++ you are not using the language correctly, smart pointers and range types completely remove the need for manual memory management. Buffer overflows really shouldnt happen at all if you use the standard types and the .at() function which will throw on illegal access. I am not sure which IDE you use but we use Visual Studio which provides a stack trace upon any error resulting from a nullptr dereference or other panick invoking action. Undefined behavior can be tackled with analyzers or enabling most compiler warnings. C++ is a bloated overly complex chimera of a language but don't complain about things you can actively do something about. It is not C++'s problem if you use it as C with classes.
@@besceingames need that much
And you earned a new subscriber! Your video was great, It was concise and to the point, It didn't feel drawn out and was easy to understand, Keep it up!
On the other hand, Vampire Survivors, the game you're trying to emulate, was programmed in Javascript (current version runs on Unity). So I would say performance is not as important. Just get your game out quickly and make it fun.
I am currently in the throes of despair over having to relearn an engine. I appreciate you taking the time to dunk on C#.
This video convinced me to use raylib. I tried love2d yesterday to make a snake clone. I loved how simple it was to implement everything, but dynamic typing was really annoying sometimes (and also the fact that using undefined variables does not raise an error, especially for typos). I think, with raylib, I found a great place. Both a simple API and using C by default (I've seen that you can actually use many other languages, but I think I'd stick to C) make a great combination.
Great video, dude, and nice game.
It is the first time I hear that an engine was build in c# with directx from a studio, as in my bachelor project I made a game engine in c# and directx too and it is really cool knowing that a studio out there done something like similar
Yeah, C# is a really popular language, especially in my city among companies working with general software development. And since there are not that many game companies here using a language that people outside game development are used to helped with finding people. I don't remember if I mentioned it in the video, but this was for landbased casino games and the company I worked on also made the platform that hosted the games and handled everything else on the machines which was also written in C# and since it was a rather small company it made a lot of sense to use the same language for both. There were also not really any good off the shelf game engines when this was started. Unity was still quite early, but more importantly it had and still has a very expensive license for gambling games. Godot would probably have been the perfect choice for this, but I don't think it existed back then or at least pretty much no one knew about it yet.
people use c# for game development as a scripting language meaning that the base engine is written in c/c++ because of fast compilations and its reflection system and easy hot reloading.
Completely agree with you, as I also really like low-level game development. Interesting why you chose C and not Rust, for example. Working with pointers in my experience is a nightmare.
I personally don't see the appeal of Rust for game development. I have not used Rust myself, but from what I understand from reading about it the way it handles memory and other restrictions just seems to be an unnecessary obstacles for developing games. I can see why it would be very useful for writing software where security is a major concern, such as server backends, a web browser or Operating Systems. But in a game it typically don't matter if someone can exploit a buffer overflow for example. The only reason for using it in a game for me would be for the server of a multiplayer game, and maybe in that case you could make a point to use it for the client as well to share some code between the client and the server. Pointers for me is a really useful tool and I would not like to go back to a language that don't expose raw pointers again (before going full time indie I was working with C# in my day job and I would rather not touch that language again for any serious project). I don't really see why people are afraid of pointers really, it is just a tool. It does not get more complicated than you make it yourself.
Rust is a cool if you're a beginner, its more like a safer c than a c++ alternative
When you choose a powered tool with catalog ads - Rust.
Truly amazing work on the game, and your opinion on the matter was very important for me to decide whether to go for Raylib or MonoGame.
Thank you very much mate, keep up the great work!
Thanks!
i dont really like unity cause of the shitty optimization for voxel based games (the jut compiler slows the game so much you need to install a diffrent one and rewrite almost all your code) also i code on my laptop (wich is my only avilable form of x86 or x64 form of computing) that has 4gb of ddr3l ram with a 4core pentium something something U so thats why i stick with raylib its not as complicated as opengl and its much more faster than unity and i dont want to do 90%of my code just for creating a window wwith window.h since i code on windows (i also compile for linux on a wsl) and also i have a problem with doing collision for voxels and the player (i want to create a minecraft like terrain but with more quality so like each block is 32x32voxels so the terrain can be more detailed but that means i need to optimize the hell out of it for higher graphics quality i run the game on my friends pc so the textures can render)
The biggest drawback with Unity currently is that they're trying too hard to compete with Unreal to the point they're harming development. The newest LTS is noticeably slower and the extra frameworks and features they popcorn in by the release only makes things worse. This has reached a point where many of their features are either deprecated or perpetually in alpha.
Yeah, I ran into that a few times during my time with Unity. You find some feature that could be useful, but it says that it is deprecated. Then you look for the new thing and of course it is in experimental. Unity seems to have a difficulty making their stuff production ready. And I agree with about them trying too hard to compete with Unreal, it is a lost cause for Unity I would say, because what Unreal has is just so much more impressive if you are going for AAA quality. By going after Unreal Unity has ended up in an awkward in-between state, where it is not as good as Unreal but still too bloated and complicated for smaller games.
There is so much shit broken on LTS versions, and side effects in what should be proven and stable packages. It's a shit show.
Yea, to me it always seemed that Unity tries to sit on all the chairs at the same time. They want to be the go-to beginner engine, the asset flip engine, the 3D AAA engine, and so on, and for me personally, I just never found it the best tool for anything because of that. And in the last few years, I see more and more people talking about the "it's either deprecated or experimental" situation and that is just the worst place they could ever go. I'm using Godot 4 and looking at O3DE and Raylib
It's no surprise they cancelled the game they were going to develop using their own engine. Then they'd run into the bugs we all do and have nobody to complain about fixing them. It's their fault after all.
@@BrunodeSouzaLino 😂 I didn't even think of that, but now I'm 100% sure that is exactly what happened.
I love the juice of intrinsics,
I love the leanness of C,
I love the optimization of C++,
And I love the beauty of C#.
I love lamp
i h8 opengl
I actually prefer C++. I tried Raylib a while ago, but there wasn't much in the way of shader support in 3D.
Well I mean since Raylib is just a library over OpenGL it has support for just normal glsl shaders which you can do whatever you want with both in 2D and 3D
Very cool video and game!
Thanks 😀
@@lingonstudios What did you use to make your 3D models? And if you followed any tutorials on modelling and rigging them could you point me towards them? Thanks!
@@jarreed0 Most of the models are bought assets from Synty. A few of them I made myself in Blender. For rigging and animations I used Mixamo. Then I export the model with animations to the iqm format to be loaded with raylib. For getting mixamo working with Blender this tutorial is really good ua-cam.com/video/wYqJ7AyEuhc/v-deo.html and for exporting animations to iqm for raylib this one is good ua-cam.com/video/_EurjoraotA/v-deo.html
Unity is for designers who somehow script the game logic and that's it. Raylib is for programmers who optimize what they develop.
What about us? I use opengl directly with GLFW
@brk.aep7 You are hardcore engine programmmers. : )
I'm a unity game programmer. I love writing in C# as it's just... kinda hard to explain, but my brain understand it well. like, when I think about something to code, my brain starts seeing the lines in C#. and although I do code in C/C++ for my uni projects (I'm studying computer science) I kinda have a hard time visualizing C/C++ code in my head, it looks weird. but I can understand your points.
when I code for games, I see myself using OOP concepts like classes, inheritance, etc. quite a lot... and this is what holding me back from diving into coding with pure C, just like you did. idk what I should do, any tips?
btw, great work! I really like your content!
I would suggest looking into data oriented programming. It is basically about looking at what data needs to be transformed and work with to solve the problem and then deicide on the structure and write the code based on that. This video is a good introduction to the subject ua-cam.com/video/rX0ItVEVjHc/v-deo.html
@@lingonstudios Interesting... I'll look into that. Thank you for the suggestion
it actually depends on your liking. i dont mind writing 400 lines of code rather than one button in unity. i mean i am the type of guy who likes code and not drag and drop like stuff
Yeah, I tend to agree. I don't mind writing code for most things since it means I can have full control and understanding of it. But some things are better made with an editor. I ended up creating a simple editor for the skill tree of the game in the end since it was really inconvenient to define the different upgrades in the skill tree and their connections in code. It was simple enough to just write a custom editor for that specific task, so you don't need a full editor for everything like Unity. It is enough to just write small editors for the things it makes sense for.
@@lingonstudios yeah
I used Unity quite a bit at my last job. Decided "never again" and got a job working with Unreal Engine. I'd recommend it 10 to 1 over Unity on all fronts.
The idea that C# isn't good for games is a viewpoint that prioritizes maximum performance and low-level control. This viewpoint is valid for those who prioritize that and likely with games that have the scale to necessitate that, but I don't buy it as a generalization. It took Concerned Ape 4 and a half years and 10 hours a day, juggling every aspect of development, to complete Stardew Valley in C# and XNA, and even then, he was overworked and past schedule. I'd be curious to know how long that would've taken him in C/C++. He probably could've micro-optimized everything using it but at what cost? But I agree that C is good to learn for game programmers, perhaps in parallel with C#, Lua, Java if they choose.
I really don't think C# is going to give you much if any at all boost in productivity in itself compared to C. As long as you have a comparable amount of experience in both. Of course if you are more experienced and used to C# than C then you are going to be more productive in C#. But if you write C# in a good way it will be very C-like anyways so the code would be very similar in C vs C#.
With a game like Stardew Valley it would probably be much of a productivity boost to use Unity instead of XNA than it would be by using C# over C.
And just because you use C for something you don't have to go into micro optimizations, that is overkill for most projects anyways. Just writing code that does not actively hurt performance or the ability to optimize down the line is enough.
Hey, nice video.
I've touched several engines, I work professionally with the UE and I've even written my own one. Yet, I've never touched Unity basically because of your video. The lack of source is no-go for me.
Therefore, I agree with your general sentiment, except one thing. Unity isn't the only engine. With your mindset, Bevy might be a good "get your hands dirty" option and Flax might be good for "I just want to touch stuff that I need, when I need it". Unreal is too complex IMO, but still a way better option. Then there is Godot, which I have mixed feelings about (I'm not sure it can be pushed to AAA, I feel that there are many choices for ease of use while sacrificing performance), but still, forking it and writing your own engine from it (instead of "from scratch") would be better, IMO.
So yeah, agree with your sentiment, but you compare raylib with the worst possible engine for you.
Thanks, I am glad you enjoyed the video.
I choose to compare against Unity partly because it is the most used engine for indie developers, but mostly since that is the engine I have professional experience with. So, I think Unity is a reasonable option to compare against given the background.
While in a more general sense I don't see any use for an engine like Unity for me. The only engine options I honestly could see myself considering for a project as of right now would be Unreal or maybe Godot.
Simply put, any project that does not require any fancy AAA-style rendering would be easy enough to setup and most likely get a better outcome with a custom engine. And if I really wanted AAA-graphics then it seems like a no-brainer to choose Unreal over any other option with all the fancy graphics stuff it offers.
But if I choose to compare Raylib to Unreal for this video it would have been a very short video due to me not having used Unreal. It would simply be: Why did I choose to use Raylib over Unreal? Unreal is much more complicated than what I needed for Sidestep Legends so I choose Raylib instead. The end. :P
@@lingonstudios I agree and it's even in your title. I was just mentioning it, because I still go back and forth on (not) using UE. You see, I'm programmer in industry with it, but I hate how overly complex it actually is. On the other hand, writing everything from scratch is also somewhat absurd (as you've mentioned, writing particle system as a list of numbers isn't fun, which I've also found out when I've written a game with cpp and OpenGl directly).
I'm also searching for that middle ground and for me, it seems to be Bevy (mark my words, it will soon be extremely popular) or Flax (because it's like UE, but still simple, easy to navigate and modify).
@@GonziHere yeah I think you really need to have a good reason to bring in the complexity of a large engine like unreal. Top tier graphics is the best reason I can think of. But if that is not needed for the game rolling with a custom engine or a simpler engine is a better choice.
It is also good to remember that even if you don't go with a full engine you don't have to do everything from scratch. And even the things you make from scratch is usually enough to make once and then you have it for your next game. A particle system for example, just writing a simple particle system editor that can be extended over time doesn't have to be that much work. And if you use for example dear imgui for the ui you don't have to worry about the ui part that much.
Bevy looks a bit interesting, but I don't see the appeal for using rust in game dev. For game severs maybe, but for single player games it seems it just adds annoying restrictions for not much benefit. I guess it's better than using c# at least.
I use Unity and C# but I've always had much the same problems with the engine that you described. However I really enjoy working in C# and most of the sentiment I've heard from other people is similar. So I'm very interested in your thoughts and perspective about why you personally DONT like using it and why you consider C to be better for game development.
I have some knowledge of C and the main thing I've noticed is that the people who do like using it usually LOVE using it and those that don't usually have a very strong aversion to it. But I've never really understood the reasons people have for either stance and not much is talked about it. Unfortunately it doesn't help that a good majority of online discussion around these things ends up very heated and the whole thing often becomes an ideological warzone.
Yeah, language discussions have a tendency to sway away from actual beneficial discussion quite quickly. The main issue I have with C# is the managed memory part. Both the garbage collector and the restriction in memory control and management it comes with. I think it is essential to have access to raw pointers to get the most performance wise and also to be able to write the code I think is easy to work with and understand and maintain. Then secondly the OOP part of C# is something I am not a fan of either, but that one you can work around by using mostly static classes and static methods and then the only problem with it is some annoying boilerplate code you would not need in C. I still see why people like C# and the features you get by it being a manages language, it is harder to write bugs that can be exploited to leak data and similar bad stuff, but in games that is mostly not an issue. My view is that C# is not really a language suitable for production level code since it gives away too much performance for security and convenience. I do realise that is quite an extreme view to have, but I with how slow and inefficient software often are now, a little over correction might be needed.
@@lingonstudios Oh yea I can see that. C# does come built in with certain restrictions just by the way its conceptualized. A lot of which you can circumvent but that's the thing, you have to take extra steps and think about how you structure your code in ITS terms, which often isn't ideal. And it does have a very strong OOP focus that restricts the way you go about implementing things even further. In the case of Unity + C# I've of settled into an approach that works well for the vast majority of my use cases in terms of making systems. But the more I look at the way people do things in C the more I realize that I'm kind of emulating that in a roundabout way. Though I think there are benefits when it comes to making certain types of game logic. There's a lot of code that can be considered "script logic" and then there are things like fundamental gameplay systems. For systems I can see how C is a more natural choice, but the less verbose nature of C# comes in handy for the type of script code that lies somewhere in-between. I think possibly if you are comfortable with both languages and you're working by yourself or with a small team that can either specialize or also is comfortable with both, It may be worth while to use either one based on the particular use case, so that each language can be used for its strengths. Then again there are drawbacks for using multiple languages in the same project.
@@DetectivePoofPoof Yeah, some more high level features could be handy sometimes, but you get most of the way by just creating good Utiliy functions in C. Or if you really want some more high level features I think going to C++ for things like operator overloading for example would be a better choice in that case, and then you can just go with C++ for both the systems and the more script-like parts. There are also some new languages that seem interesting that focus on being simple like C but introduce some useful stuff especially for games two examples being Odin and Zig. As long as I am working by myself I prefer to just write everything in one language, and I don't really feel it takes any longer writing script code in a system language. When you are a larger team an argument could be made to introduce some scripting so for example tech artists and game designers can script parts of the game. My experience with that so far though is you have to be really careful and as a developer always review their work and more often than not you have to rewrite it so it works and performs well. Because of course a tech artist or a game designer won't write good code, that is not their area of expertise. In that case it is probably a better idea to give them some limited visual scripting, like a state machine editor for gameplay stuff and particle systems and effects system for the art stuff.
@@lingonstudios Those are some good points. I've heard before that C++ but written closer to C with just some of the "++" features works well. Its probably no accident that outside some newer game engines this is usually the norm for game development. With the occasional scripting language for designers like you mentioned.
@@DetectivePoofPoof Yeah, that is the reasonable way to use C++ imo. All the stuff in "modern" C++ seems much worse than C# even.
Whatever downsides C# could have, the syntax alone is the best on this planet. 😄
Yeah I don't have any issue with the syntax of C#, I mean it is basically the same syntax as in C
100% agree with your statement, but i have to add, C# is beautiful on the outside, but ugly on the inside (the garbage collector). C++ is the exact opposite.
@@lingonstudios Same? I started to think that you are a type of person who is writing C code with C++.
@@DrZygote214 c# without the garbage collector would be a perfect language
I wouldn't do C today, rather Zig, Odin, Haxe or Go. The main reason to use an engine would be platform support. This is probably the bigger question. This is where Haxe wins if you simply want to use a language.
I personally don't really see the benefit of these new languages, the only one of them I am a bit interested in is Odin, but not enough for it to be worth switching to it
@@lingonstudios have you looked at Beeflang? its like C and C#
@@lingonstudios I can understand that, you seem to have found your language. My point was that if you want to distribute your code to multiple platforms. Some have good support for doing so.
Sure they might have good support for different platforms and while that is quite low on my priority list, there really is no language that has better support for multiple platforms than C
I've been messing with Raylib but can't get lighting to work when I draw a model.... Raylib looks like a really good library but I'm totally stuck when dealing with the opengl bullshit
Blender cube for collider, how do you do this? Can you share with us?
Nothing special really, I just places cubes (and sometimes some other shapes like a low poly cylinder) in the blender scene for the map. And then I export just those models to a file separate from the exported level file. Then I load those with raylib and just use raylib's collide with mesh functions to check for collisions. Which makes it much cheaper than it would have been to check against the actual geometry.
I did a code walkthrough on a livestream of this game where I think I talked a bit about it and showed the blender scene, ua-cam.com/video/-LPHV452k1Y/v-deo.html
@@lingonstudios I watched the LEVELS part, but I can't find how you're doing this? You just show white boxes, that's it?
By the way, nice 60fps text editor! Why is 30fps not good for displaying a text editor?
A question I have is around why use raylib as opposed to wrangling together your own framework? I've questioned this myself and have been on the fence about using existing C frameworks or just roping my own together. My guess here is accessibility from the get go which lets you get up and running a bit faster
What are you doing differently? and why?
If nothing, why reinvent the wheel?
If you have some hyper specific game that requires something no existing engine or framework could handle, then, that's the only reason you'd need to develop an engine or framework instead of using and existing one.
It's not a trivial thing to build. He said he had spend 4 years building an engine for casino games.... Just building an engine for one type of specific game. That's a lot of time.
Do you need to spend that much time... doing something someone else already did?
"A bit" would be a severe understatement
Commenting in 2023: no you should not have used Unity
what a great video! thank you a lot
Thanks :)
I feel disappointed with Unity for a few years now. But it's still great for quickly prototyping ideas!
hey, I am wanting to use raylib but I want to know how you learned raylib because there aren't a lot of tutorials for raylib.
Well, there really is not much to learn about Raylib. All it's functionality is well documented in the api, and the examples on the websites gives a good overview of what Raylib can do for you. Everything else is just general programming and game development, which there are a lot of tutorials about. If you want to make something in 3d I would recommend starting with learnopengl.com/ for example which goes through the basics about lighting and graphics programming
“Don’t forget that c# is a scripting language” wow burn! I picked monogame for similar reasons that you picked raylib and I’ve enjoyed a lot about it. It is starting to feel crusty though and the most successful games made using monogame were from old XNA devs. I tried raylib (using D Instead of C++) last night and I was very impressed. I think I might be due for a switch.
"C# is a scripting language" Is a joke I like to say since I a friend of mine used to get a bit triggered when I said so. He liked C# quite a bit but despised scripting languages, so the though that C# possibly could be considered a scripting language was not something he liked :P
Other than my own platform I like Raylib and gDevelop. I use Java for everything in my own AllBinary Platform. I have gone to the trouble of being able to import gDevelop JSON into my runtime. So please don't tell people they should not make games with Java.
Have you considered Odin with Raylib? I am thinking to try that out. Odin is maybe a modern replacement for C.
I have considered Odin, I keep an eye on it and might look more into it sometime in the future as it does look very promising. But in that case I would probably skip Raylib and just go with Odin directly against DirectX11. Not because I don't like Raylib, but I don't like OpenGL at all. I still would probably keep the resource packer that Ray made for Raylib for example since that one would be easy to integrate in any codebase.
But before looking into that a full game in assembly is on the todo list since I have been greatly enjoying my time while I worked on my city builder project in assembly
I enjoyed doing a game in Rust using Bevy. It currently too lacks official editor, but it is simple enough to work with ui through code.
Yeah I have heard a few things about Bevy. Seems a bit interesting, but I am quite sceptical of using Rust for gamedev though, seems a bit too unnecessarily restrictive since the added safety is not that important for games.
@@lingonstudios well bevy makes it very nice. Ground up small projects with Rust create more issue with borrow checker than using Bevy. It automates parralelisation (non WASM builds afaik). Some of the things are a bit unpolished (for WASM build have to load information as assets when it comes to game data that should be changable without recompilation).
And I actually like Rust. It is for people who want to do efficient game and use Rust, I'd guess by hand C++ or by hand Rust games would still be faster/more efficient than using Bevy because it does have overhead, just definetly less overhead than Unity.
P. S. There are third party cratea that make saves save without need of using assets
@@principleshipcoleoid8095 Well, it is meta-development of meta-language.
C++ is not a super of C, it is independent language that was influenced by C. It looks like superset, but in reality C code compiled as C++ - might not compile or might now work as you expect. Some things are allowed in C (especially in modern standarts) that are not allowed in C++ and vice-versa.
Looks good but not supporting iOS is a deal-breaker.
Hello sir!
Do you recommend me using Raylib for 2D games?
I want to use the python binding. I know, Python sucks more than C# (much more) in terms of performance, but I worked with Python on web and app development and I find it comfortable to work with.
The point is, do you consider Raylib capable?
Yeah, Raylib would work fine and is definitely capable enough for a 2D game with Python. You could also take a look at pygame, I don't know much about it myself, but it is a good idea to compare the things Raylib has against whatever pygame has to offer to see which would fit your preferences and game idea best
@@lingonstudios Hello and thanks!
I used Pygame for around an year or so. In my experience, Pygame forces certain aspects into it's own event loop and it complicates stuff at times. Overall, Pygame is easy enough, but it lacks hardware-acceleration. According to the benchmarks, Raylib (Python binding) is much more performant than PyGame.
@@lingonstudios One more question if I may Sir : something that made me question Raylib's capabilities is that there are no real or finished games made with it. The official page is full of demos/prototypes at best. This all changed when I found your video : for a game library marketed as a 2D "engine", it's quite impressive what you as an individual and raylib as a technology could accomplish. Do you think this is due to the fact not enough people know about Raylib?
@@alexale5488 I think it is mostly because full on engines like Unreal and Unity but now also Godot has so much to offer when you want to make a game. There are a lot of more things than just making the game that is needed when you want to actually ship it to end users. These complete engines do have solutions for pretty much all these things already, ready to just use. But writing a game with a simpler framework like Raylib, you have to make these yourself. But of course the things you get from the engines has the price of things not being as flexible as you might sometimes want, pretty much the problem you had with pygame but worse.
But yeah, it is probably also because not that many know about Raylib either, most people getting into gamedev now think the only way to make a game is to choose one of the big engines. More and more people have found Raylib especially the last couple of years so I think we will see more games released with it in the future, but it takes time to make a game, so there will be a delay before we see the result of the increase in popularity.
If you checkout Ray on Twitter (or X I guess) he recently made a thread about games made with Raylib, and there were some more games there that were released or are going to be released on Steam if you want to see some more examples
C# is not good for production code?
:|
it's fine if you dislike C# for games. terraria is pretty popular, however. it will be the best business programming language for a long time. i've been working with it for 16 years so i'm a little biased
Bought the games but Sidestep legends won't load on Linux with Steam even specifying versions of Proton. I hit play and it starts and stops. Dextram fails differently. The vast majority of games I play on steam just work with Proton but these don't seem to. (Edit: I got Sidestep to run with Proton v4.11 but it's very slow, like 1fps, might need more Proton tweaks to run)
Dextram has an issue with proton, but there is a linux version for it that should work, it works on Steamdeck at least. Sidestep Legends works really well through Proton on Steamdeck so not sure why it doesn't work for you. I don't officially support Linux desktops since I don't use Linux myself and it is unfortunately not worth the effort, but both games should work fine on the Steamdeck at least
@@lingonstudios Dexatram installed on steam says it fails to find run. sh and crashes. I can't get sidestep to reliably work with Proton. I use Ubuntu as my main OS but everything that works on my steam deck has worked on my Ubuntu desktop so far.
You earned a new subscriber. My question is.. Are you interested to port the game (for free..) to a platform where I'm pretty sure you can sell an hundred of copies? :) If so I can do the port for you (using RayLib of course). The people will buy the windows game on steam and use the exe for the other platform :)
5:34 That's a mindset that just worsens the reputation of Unity... if you don't show the logo on a good game the rep won't go up no matter what. On the other hand, I think if there's a logo and you made a decent game absolutely no-one will care which engine it was made in until it's fun. If the game actually has problems that's when players will start calling out the devs and crapping all over the engine.
Yeah that is true, but I think the whole thing with having to buy a pro license to get of the logo is a deliberate strategy from Unity's side. They don't care if their engine has a bad rep among gamers, since if it helps them sell more pro licenses then that is a win for them.
@@lingonstudios I mean, they probably do care, but it's still better to have some people buy the pro license than no small dev buying it. They have some revenue off of mandatory licenses from companies who reached their revenue limit, but they don't have a cashcow like Epic has Fortnite
Subscribed 😁👍
Have you heard about D?
I have heard a bout it a little bit, but don't know that much about and haven't tried it. Looks a little bit interesting, but I am quite happy with C and if anything I'll probably move to assembly for future project rather than to a more high level language
libGDX is one of the best game libraries I've ever used while Java is one of the worst game programming languages I've ever used.
I agree completely. LibGDX was really nice to get going with and worked really well for the 2d games I made with it, but Java was really not a good language to make games (or probably anything honestly) with.
Raylib has a lot of the same vibes as LibGDX though and has the benefit that you can use almost any language you want with it
Hi I would definitely say Raylib was the right choice, especially now given the Unity controversy happening now. I found your video because I want to try making a game but I have no experience and i read a lot of positive comments about Raylib. I was surprised you mentioned that you very much enjoyed programming in assembly and in c language -- is it because of performance, or the actual language syntax/structure that you prefer them over the "higher level" languages like c#? You also mentioned one of the drawbacks is that Raylib does not come with an editor, are you using emacs to code? I think Visual Studio has a free version that you can use... I also want to go the same path as you! using c language and Raylib -- any pointers or advice for a beginner? (I have not programmed in c since many many years unfortunately.. luckily i still have my "The C Programming Language" book by Kernighan & Ritchie from university. Your games look great and are inspiring! Thank you!
Thanks :)
I like the control you get while using assembly or C and the performance part is a big factor for me as well. When using C# if you really care about performance, then pretty much all the OOP features are useless and you end up having to write very C-like code but in a language that does not allow you to take proper control of the memory. When I talked about Raylib not coming with an editor I meant the a scene editor like the one Unity has. That kind of editor can be really useful to have, but for this game I solved that by using Blender as an editor for the levels and then I wrote a simple skill tree editor (also with Raylib) to allow for faster editing of the skill tree in the game.
For writing code I am using Visual Studio, mostly just because I am used to the shortcuts in it and am too lazy to switch to something faster, since it is quite clunky and slow, but at least the 2022 version starts much faster than the older versions. It is also still faster than Visual Studio Code which I used at the start of the project. It became completely unusable as the project grew a bit, and this project don't even have that much code in it, but that's how it goes when you write an app in Javascript.
Also C is not the only way to use Raylib, I just think it is the most convenient language to use with it since it is written in C. That makes it easy to take any function in it and copy it to make your own version when you need something a bit different than the original does. However, Raylib have a bunch of bindings to other languages including C# if that would be your preferred language to use.
@@lingonstudios Thanks, Okay i have Visual Studio 2022 so i can use this too, it's not too bad as an IDE. I think I will try using C as well, i think it will be a good excuse for me to change things up and it will give me added perspective. I'm not sure i will try assembly though, that's always been scary to me! 😂
this was made with raylib? wow
You should watch my videos about my game in assembly ;)
You made the right choice by not picking Unity
Yeah, hindsight really is 20/20 in this case. This video would have been much shorter if I made it today 😂
It would’ve been a video about how you hate Unity😂
Why not Java for Games ?
Rising World Made with Jmonkeyengine and Java
Minecraft with Java
Project Zomboid Java
and lots of other games ?
its up to you and your preferences. I also love C
I would say those are all good and great games despite their use of java and certainly not because of it. Especially Minecraft does suffer quite a bit by using java since java is especially not a good idea for a large open world game like minecraft. The garbage collector has been an issue for many people in many versions of Minecraft and Mojang have done a lot of optimizations to make it run as well as it does despite using java. Those types of optimizations should of course be made even if the game was made in C for example, but then they would result in being able to enable higher render distances and larger redstone machines and more entities in the world with the same performance the current version has
@@lingonstudios love your work. I will also working with C. I hope I will
Holy C
Raylib is definitely intriguing to say the least! It also seems to be a good option for anyone that doesn't want to deal with the idiosyncrasies of a game engine. I've never really cared for Godot myself as well, I always felt like I was making a mistake while using it or considering it for a project. Personally I think Godot is too volatile right now; the engine doesn't excel at anything and something always getting a massive revision.
SFML?
Rust + Bevy should have been an excellent choice for you, although the ECS-based engine can be a bit "complicated" to tackle at first.
Use just 4 threads 0lz
Have you considered using Godot?
There is a section at the end of the video 07:19 Why not Godot? that goes into that
C# is an OOP first language, and OOP is outdated, only now programers come to understanding that it is hard to design your code to be performant and readable while doing OOP development. That's good that industry embraces this and we see comeback of more simple procedural programming and concepts like data oriented programming. Nevertheless new C# apis support writing performant code that doesn't rely much on garbage collection, though why you would want to - if you have other better languages.
should of just programmed your game....
That is pretty much what I did