Creating a game in C and Raylib in 1 year - Making of Sidestep Legends

Ойындар

For about a year now I have been working on a game called Sidestep Legends. It is a moba inspired action roguelike game about dodging spells and killing minions and was recently fully released on Steam after a few months of early access. I have been developing this game in C using the game library Raylib.
Buy Sidestep Legends on Steam: store.steampowered.com/app/20...
Check out my new upcoming game Moose Miners on Steam: store.steampowered.com/app/25...
Buy my other game Dextram on Steam: store.steampowered.com/app/10...
Follow Lingon Studios on Steam to be notified when I release new games: store.steampowered.com/publis...
Adding a character to the game devlog: • Adding a character to ...
Boss path-finding devlog: • Adding A*(A star) path...
00:00 Introduction
00:38 May 2022
03:08 June 2022
04:23 July 2022
06:33 August 2022
07:32 September 2022
08:22 October 2022
09:46 November 2022
12:05 December 2022
14:28 January 2023
16:37 February 2023
19:12 Mars 2023
21:32 April 2023
22:44 Outro

Пікірлер: 87

  • @lingonstudios
    @lingonstudios Жыл бұрын

    Sidestep Legends is available on Steam! If you want to support me check it out here: store.steampowered.com/app/2077590/Sidestep_Legends/? Also check out my upcoming game Moose Miners: store.steampowered.com/app/2591410/Moose_Miners/?

  • @raylibtech
    @raylibtech Жыл бұрын

    Great video! I love to see the progress along 1 year! Thanks for sharing! And congratulations for the release of such amazing game! :)

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    Thanks ☺ and thanks for raylib and rrespacker really great tools!

  • @owdoogames
    @owdoogames Жыл бұрын

    What you've achieved with C and raylib is nothing short of incredible. Well done on finishing your game and releasing it. It's not my sort of thing (probably too fast-paced for me), but I might just buy it anyway. I've just started to learn C and raylib after getting a bit fed up with the bloat, dependency hell, poor performance, restrictions and bugs of other game engines. Even Godot started to annoy me after I put a lot of time in porting my simple 2D game from Godot 3.5 to 4.0 only to discover that it now runs really jittery in Windows on my mid-range gaming PC. (I mostly dev on a MacBook, where it runs fine.) Learning C is very satisfying, but I know its going be a lot of work.

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    Thanks for the nice words ☺. Yeah raylib really is nice with its simplicity and no bloat. It is bit more work since you need to write more things yourself than you would need in Unity or Godot. But raylib has a surprisingly large amount of useful functions for making games. Good luck on your game dev journey with Raylib and C!

  • @erc0re526
    @erc0re526 Жыл бұрын

    The living proof that you can totally make a commercially viable game with a simple language! That's a lot of work, thanks for sharing that process with us. Things like this are precious

  • @w花b

    @w花b

    Жыл бұрын

    C is not that simple imo. It takes some time to learn it especially if it's your first. A few months are gonna be necessary to actually feel comfortable with It. As soon as you think it's good depending on which branch of C applications you wanna get into (Operating systems, embedded systems, Software etc.) you discover that everything you've done was just an introduction. The incredible thing is that raylib makes it easy to make games which is a big accomplishement in itself.

  • @Zapray92
    @Zapray92 Жыл бұрын

    Very interesting to see the entire game making process

  • @rusmaakatupal4723
    @rusmaakatupal47232 ай бұрын

    The fact you did with Raylib is actually insane.

  • @chadkroger9183
    @chadkroger9183 Жыл бұрын

    This is really impressive

  • @empireempire3545
    @empireempire3545 Жыл бұрын

    Wow man, this is jaw dropping, good work! I hope this succeeds big time!

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    Thanks! :)

  • @mission-toast
    @mission-toast7 ай бұрын

    Amazing what you've done with Raylib!

  • @lingonstudios

    @lingonstudios

    7 ай бұрын

    Thanks!

  • @mrkostya008
    @mrkostya008Ай бұрын

    Have you heard of Odin for game dev? Heard they got a top tier interop with C libs, including raylib.

  • @anguruso
    @anguruso Жыл бұрын

    Raylib ROCKS

  • @PicoBellum
    @PicoBellum Жыл бұрын

    Looks great!

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    Thanks! :)

  • @KaanAlpar
    @KaanAlpar Жыл бұрын

    Awesome work, just got Sidestep Legends. Having a lot of fun with it😁 Raylib is great I'm planning on using it more and making tutorials for it!

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    Thanks ☺ I agree that Raylib is great. And it sounds like a great idea making tutorials for it, there seems to be some hunger for tutorials on Raylib. There is always someone asking me to make a tutorial in the comments of my videos that mentions Raylib, but I don't really have the time to make them

  • @KaanAlpar

    @KaanAlpar

    Жыл бұрын

    @@lingonstudios Yeah Raylib is rising in popularity which is great, we need more people who understand lower level game programming!

  • @karamzing
    @karamzing Жыл бұрын

    Great stuff! One aspect that could have benefited from some more love are the buttons and other UI elements. If I look at DOTA or LOL menus (for example), they have very few flat colored elements. Usually everything has at least some sort of gradient or texture going on, some depth effect, or at least an outline. The asset store has UI packs as well, though I don't know how easy they are to adapt.

  • @eXtremeElectronics
    @eXtremeElectronics2 ай бұрын

    Great!

  • @leonlysak4927
    @leonlysak49277 ай бұрын

    Well this is just beautiful. Didn't expect something like this to come out of Raylib to be honest, at least 3d

  • @lingonstudios

    @lingonstudios

    7 ай бұрын

    Thanks!

  • @dum4r
    @dum4r Жыл бұрын

    Que chimba de juego!

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    Thanks! :)

  • @ryonagana
    @ryonagana Жыл бұрын

    Raylib is great.. its based on the old BGI for DOS but for modern graphics

  • @eprst0
    @eprst0 Жыл бұрын

    Pretty cool man) Today I installed raylib after 2 hours! Neither windows installer or source code didn't work. I don't know why. However I find a right way! So, i did it! Thanks for a video!)

  • @DarkerCry
    @DarkerCry Жыл бұрын

    You should consider doing a series somewhere, udemy/teachable whichever about developing a game using C/Raylib. Raylib is simple but I think videos about the workflow, tech stack, map editing, etc is something that can feel daunting to do in it. - Also, to make combat feel better, you can add movement animation into the combat animation itself. So that way you can have the character feel like they move well and feel solid. Rather than the floaty move while attack.

  • @TedditStories
    @TedditStories Жыл бұрын

    we out of #help-general with this one 🔥🔥🔥

  • @samdavepollard
    @samdavepollard Жыл бұрын

    outstanding work you should write a book (seriously)

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    Thanks!😊 Maybe one day

  • @sinanhossain2880
    @sinanhossain28803 ай бұрын

    It would be really appreciating if you teach us your method and knowledge to make a tutorial on raylib

  • @CODEDSTUDIO
    @CODEDSTUDIO Жыл бұрын

    4.99 that is cheap

  • @Flakelolz
    @Flakelolz2 ай бұрын

    How did you make your UI? It's something I've always struggled with when trying to make games with Raylib. Did you use the Raygui library that comes with Raylib or another external library? How were things positioned? how are things configured to scale nicely?, etc. I have so many questions. Do you have a vlog detailing how you do your UIs and the steps needed? Thanks for the videos, your work is a huge source of inspiration!

  • @lingonstudios

    @lingonstudios

    2 ай бұрын

    The UI is very simple, it is just an immediate UI made by rendering the buttons scaled to the screen size (I use the height of the screen to decide the scale to keep the aspect ratio of the UI elements). Then for deciding if a button is clicked I use a few functions from raylib to check collisions between the mouse position and the bounding boxes of the buttons. The graphics for the UI is designed in Figma and exported as pngs that are loaded in the game. The positions and sizes are just based on a design screen size in my case I use 3840x2160 that is the screen size for the mockups in figma and then I use absolute positions for most things scaled to the current screen size the game is rendered at

  • @seancharles1595
    @seancharles1595 Жыл бұрын

    You absolute legend! As an experienced C developer (not games, sadly), I'd be interested in knowing what techniiques you used to avoid the most feared thing: dangling pointers! The pre-allocation I am guessing is either through static variables and/or pre-allocating a huge chunk of heap RAM then using it as arrays? Damned fine effort!

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    Thanks! Pretty much all memory for the logic in the game is statically allocated and any memory needed from things loaded from disk such as the meshes and textures are allocated at the start when everything is loaded. So very few allocations are happening during runtime which makes the few cases easy to keep track of. Pretty much all the pointers used are pointing to things that will be alive the whole runtime so that reduces the risk of running into issues with those as well.

  • @seancharles1595

    @seancharles1595

    Жыл бұрын

    @@lingonstudios Excellent ideas. Over-use of realloc() -can- cause some timing delays now and then. I have always used the static approach to memory, expecially for microprocessor stuff, particularly if you are at assembly language level. It's far better to know exactly where things are, even if it's through taking the address of something at startup time. Sometimes you have to load things and you don't know how many you have, so in the past I've created a linked list of chained objects, then once they are known, you can calculate how much memory you need as a single contigous block, reposition the data with memcpy() and then free() the linked list and its data. This is way better because array access is then just straight addition of a pointer address. Following a pointer chains is.... well, scary at times! best of luck with it all, you seem to know which way is up! :D

  • @donkeyy8331
    @donkeyy8331 Жыл бұрын

    Something I'm kinda curious now is if the time you took to do all of this was also exponentially larger or just a few months from what you would've taken in a normal game engine. Also you didn't have full time to work on it throughout the whole project, so that also must come in to factor the time. This video is also very nice and relaxing, thank you for making this.

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    Thanks! It's hard to say how much more time it took with Raylib compated to what it would've in something like Unity. I do go into some of that in another video on the channel though if you are interested. Mostly for me it was about enjoying the process much more with something like Raylib compared to Unity, so I think it makes up for the longer dev time by just allowing me to keep the motivation higher.

  • @donkeyy8331

    @donkeyy8331

    Жыл бұрын

    @@lingonstudios thanks for the answer. I'm looking into learning raylib to learn more about game development and computer graphics. Your videos are an inspiration and educative, so thank you again.

  • 5 ай бұрын

    Eftersom du kodat det i C och Raylib något jag bara testat på ytan. Undrar jag om du har kollat in Flecs (entity-component-system) som också är ett c lib för spelutveckling?

  • @vexedev
    @vexedev7 ай бұрын

    Based, very based.

  • @ivankudinov4153
    @ivankudinov41532 ай бұрын

    You know it's a hardcore stuff when by 1:30 into the video the author casually drops things like, yeah, I've implemented shadows and a particle system by myself, since I didn't have any built-in renderer💀

  • @dopplegangerdavid
    @dopplegangerdavid2 ай бұрын

    I've been trying to export box meshes from Blender to use as collision boxes in my game, but im not sure how i would go about doing that. Is it as simple as checking every triangle in the meshes?

  • @lingonstudios

    @lingonstudios

    2 ай бұрын

    Yeah, that is how I do it, but I use the GetRayCollisionMesh function in Raylib to do it. It also depends on what type of collision boxes you need. If it is fine for you to have axis aligned collision boxes then you can create bounding boxes of your meshes with Raylib and use GetRayCollisionBox for example which will be faster than checking all the vertices of the box. Even if the number of verices in a cube is not that many

  • @dopplegangerdavid

    @dopplegangerdavid

    2 ай бұрын

    @@lingonstudios I tried raycasts and it seems to work somehow. My character can now navigate an environment. Thanks.

  • @simonnordon8421
    @simonnordon8421 Жыл бұрын

    Game has great potential, I just think you need some artist friends to spruce it up a little.

  • @nevercine
    @nevercine Жыл бұрын

    Very impressive! Did you encounter any significant hurdles by making it 3D in raylib (other than shadows)? I’ve been very impressed with raylib for 2D but hadn’t considered it a serious competitor in 3D (until now!) due to it not being a “game engine” with all the bells and whistles.

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    Thanks! There were no significant issues with making a 3d game with Raylib. Of course the rendering functions it has are quite primitive so there is no proper renderer as in a full game engine. But for a relatively simple game like this this did not become an issue. I did some custom things allowing me to load a gltf file that represents the whole map and just made a custom rendering function for that one as well as a modified version of the gltf loader function in Raylib to customize how the data from the gltf file was loaded. But other than that Raylib does come with all the basic things needed for rendering 3d objects including support for animations. However the animation system in Raylib is also a bit on the primitive side and does all the vertex transformations from the bones on the cpu. This does not really scale well if you want to animate many characters at the same time, but again in my game it worked out fine since I did not need that. Then of course the obvious missing thing is an editor, but I just used Blender for that instead and made maps in there

  • @nevercine

    @nevercine

    Жыл бұрын

    @@lingonstudios Very cool, thanks for the information! And best of luck to you for this game and your next!

  • @pr0r1der
    @pr0r1der3 ай бұрын

    Very impressive! Are there any physics involved? Wondering what library would be easy to integrate with raylib!

  • @pr0r1der

    @pr0r1der

    3 ай бұрын

    Or maybe i should rather ask how do you handle collision detection?

  • @lingonstudios

    @lingonstudios

    3 ай бұрын

    @@pr0r1der I didn't use any other library than Raylib for this. The collision detection is just a few raylib function together with some custom code. Since the logic of the game is in 2d it is mostly just 2d collision detection used

  • @pr0r1der

    @pr0r1der

    3 ай бұрын

    @@lingonstudios oh interesting! Thanks for your insights!!

  • @user-nn3tb1bz4y
    @user-nn3tb1bz4y3 ай бұрын

    Hello thank for the video ,I am new to programming i start c programming language so could you make video tutorial c using raylib for beginner

  • @ourabig
    @ourabig11 ай бұрын

    Just a question for did you build it from scratch or used a librarie and is imgui a good lib for a game

  • @lingonstudios

    @lingonstudios

    11 ай бұрын

    I used Raylib for this game. It is a good starting point to get things going like loading assets, rendering and playing sound. if by imgui you mean dear imgui, I would say it is probably not fitting for the actual UI in a game, it is more appropriate for debug UI and tools when developing a game since the styling for it is rather limited.

  • @assemblyrtsdev
    @assemblyrtsdev Жыл бұрын

    I've recently started learning C and am interested in your way of working. Having to find workarounds for better performance is indeed annoying when working with a higher-level game engine. Have you ever considered using Unigine as a rendering engine? I'm curious if you have any thoughts on it.

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    Hadn't really heard about it before but took a quick look at it. It looks quite impressive, but I'm not sure it is suitable for the kinds of games I want to make, and not the style of graphics either. Also it being proprietary and closed source is a big negative point for me. That is one of the largest issues I have with Unity for example. If I felt the need for a really good rendering engine I would probably just use Unreal, as that seems to be quite well fit to write your own engine around as well if the other stuff they have would not fit the game well.

  • @zooidiotgaming5784

    @zooidiotgaming5784

    Жыл бұрын

    @@lingonstudios I have no experience in graphics programming or anything like that but from watching a few videos, there is a library(?), engine or something like that called OGRE or OGRE3D which stands for Object-oriented Graphics Rendering Engine, I believe, that does nothing other than render 3D graphics.

  • @zooidiotgaming5784

    @zooidiotgaming5784

    Жыл бұрын

    @@lingonstudios Oh and also, I believe it is open source.

  • @user-rf2wl7qj7u
    @user-rf2wl7qj7u5 ай бұрын

    very impressive, is this the same engine used to make soulstone survivors? if not, what makes them look so similar, i love the style

  • @lingonstudios

    @lingonstudios

    5 ай бұрын

    I think Soulstone Survivors is made with Unity. The reason they look so similar is that both Sidestep Legends and Soulstone Survivors use asset from Synty Assets. Those assets are quite popular so you'll see them in quite a few indie games

  • @user-rf2wl7qj7u

    @user-rf2wl7qj7u

    5 ай бұрын

    @@lingonstudios oh that makes sense, thanks for the reply :)

  • @dopplegangerdavid
    @dopplegangerdavid9 ай бұрын

    When you say you made the skill tree editor as a separate app with the same code base, does that mean that it was in the same project directory as the game? Did you use the command line to compile it separtely?

  • @lingonstudios

    @lingonstudios

    9 ай бұрын

    Yes, it is just a separate .c file with its own main function in the same directory as all the other code. Then I have a separate compile script for the editor. The compile script is just a copy of the compile script for the game but it compiles the skill tree editor .c file instead. This made it easy to include the code that is shared between the game and the skill tree editor such as the rendering of the skill tree and the data and assets needed for the skill tree

  • @aksakalaradhita

    @aksakalaradhita

    9 ай бұрын

    ​@@lingonstudiosare you use dynamic linking to do that?

  • @lingonstudios

    @lingonstudios

    9 ай бұрын

    @@aksakalaradhita No everything is still statically linked

  • @jedfakhfekh1265
    @jedfakhfekh126511 ай бұрын

    I love how many HOTS references are in this game. I am a graphics engineer who does a lot of C and shaders, with some raylib, opengl, and vulkan. I wanted to contact you but your DMs on twitter are closed, is there a way to get in touch?

  • @lingonstudios

    @lingonstudios

    11 ай бұрын

    You can hit me up on Discord, there is a link to my Discord server on the Sidestep Legends store page

  • @blamechickenman7434
    @blamechickenman7434 Жыл бұрын

    very cool, but why did you choose C as a language, instead of C++. The reason I ask is because I am interested in developing a game with raylib and I want to know which one is 'better' for me to write in.

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    I went with C because I was not really interested in any of the features that C++ adds on top of C. Making a game in raylib with C++ would also work really well, but I would personally recommend writing a more C-style C++ in that case, since C++ has a lot of features that creates more problems than they solve

  • @Schnoodas
    @Schnoodas Жыл бұрын

    What was the motivation for using C instead of C++? Coming from a C enjoyer myself

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    There were simply not any features in C++ I was interested in. And I really like the simplicity of C. And also since Raylib is written in C I thought I might as well just use plain C.

  • @Schnoodas

    @Schnoodas

    Жыл бұрын

    @@lingonstudios Interesting, so you didn't feel like you had to use any of the data structures from C++ or templates? Btw I forgot to say that your project is really inspiring! I'm starting to develop a game in with raylib right now using C++ but coding in C-style which means that I'm not using member functions for structs, C-style feels more natural. I think some function templates and std::vector and std::unordered_map might come in handy though.

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    @@Schnoodas Thanks! No not really. I very rarely write code in a way where templates would be useful. And I am not a fan of the data-structures in the std-lib, since I want to have full control of the memory management in my program. The only two things from C++ that I would find useful would be namespaces and operator overloading, but it has worked out just fine without those two

  • @mercury6800
    @mercury6800Ай бұрын

    Make it into league

  • @Schwartz866
    @Schwartz866 Жыл бұрын

    Can someone give me referece to learn raylib?

  • @lingonstudios

    @lingonstudios

    Жыл бұрын

    The examples on the Raylib website is really all that is needed. That will show you what Raylib can do for you. Then it is just the matter of learning more general game development which is a bigger task. But there are a lot of learning materials for that, both books and videos and tutorials.

  • @keithprice1950
    @keithprice195011 ай бұрын

    Selling creative projects is always a strange process. Whether it's music, movies, books or games, the creator goes through months/years of hard work learning new skills and putting their soul into a project. Then the end user gets it and judges it based on a relatively short period of time. Some people play a game for 30 minutes then refund or leave a negative review and have no idea of what went into making the game. Not suggesting that negative reviews are wrong, just that the process is so skewed.

  • @lingonstudios

    @lingonstudios

    11 ай бұрын

    Yeah I agree, it is a rather weird thing. I think it is best to see each process as a learning experience for longer term and continue making stuff since you'll learn so much in all areas of development with each new project

  • @trahsh_1005
    @trahsh_10058 ай бұрын

    Nerd

  • @gustavojoaquin_arch
    @gustavojoaquin_arch2 ай бұрын

    Zig>>>>>>>>C

  • @lingonstudios

    @lingonstudios

    2 ай бұрын

    Zig does look a bit interesting, but I am not completely sold on that it would be that great of an upgrade compared to C in practice. And if I would look into one of the newer languages that tries to replace C or C++ I see more potential in Odin or Jai than I do in Zig

Келесі