Dylan Falconer
Dylan Falconer
  • 59
  • 574 968
the most important programming concept
Learn game programming: programvideogames.com/free
Join the discord: discord.gg/jDm8uCPYwD
Переглядів: 2 959

Відео

LDtk Level Designer's Tool Kit Crash Course
Переглядів 1,1 тис.Місяць тому
Learn game programming: programvideogames.com/free Join the discord: discord.gg/jDm8uCPYwD
ECS Alternatives
Переглядів 4,4 тис.Місяць тому
Learn game programming: programvideogames.com/free Join the discord: discord.gg/jDm8uCPYwD
10 Raylib examples to activate your almonds
Переглядів 1,4 тис.2 місяці тому
Learn game programming: programvideogames.com Join the discord: discord.gg/jDm8uCPYwD
11 Reasons to Program using Odin in 12 Minutes
Переглядів 7 тис.4 місяці тому
Learn game programming: programvideogames.com/free (free course using Odin Raylib!) X: x.com/falconerd Odin: odin-lang.org Raylib: raylib.com 00:00 Intro 00:25 Header Files 01:03 Math Types (Vectors, Matrices, etc) 01:55 Ambiguous Types, Integer Promotion 03:33 Memory Allocators 04:34 Multiple Return Values 05:35 Slices and Dynamic Arrays 05:53 Strings 06:19 Context 08:10 Untyped Types 09:04 Co...
5 Things Every Game Programmer Should Know
Переглядів 7 тис.4 місяці тому
Learn game programming: programvideogames.com/free (free course using Odin Raylib!) X: x.com/falconerd Newsletter: bytesbeneath.com Odin: odin-lang.org Raylib: raylib.com Liberal was totally the wrong word, you get what I mean.. 0:00 Intro 0:33 Hot Swapping of game code 1:47 Drawing Shapes / General Rendering 2:25 Linear Algebra / Learning math for games 6:48 Memory Management 10:17 Debugging 1...
Dynamic Arrays in C
Переглядів 71 тис.10 місяців тому
Learn game programming: programvideogames.com/free (free course using Odin Raylib!) Programming newsletter: dylanfalconer.com/articles X: x.com/falconerd Sorry about the nose-whistle. I'll have to wear one of those nose holder-opener-things next time I record. Tools used for video: Slides/Animations: animotion.pages.dev Editing: github.com/WyattBlue/auto-editor Shotcut Audacity Canva
Unity Game Ended Themselves - A different take
Переглядів 4,5 тис.Рік тому
Unity Game Ended Themselves - A different take
Weapon System | C Game + Engine From Scratch 18
Переглядів 7 тис.Рік тому
Weapon System | C Game Engine From Scratch 18
Enraged Enemies | C Game + Engine From Scratch 17
Переглядів 2,4 тис.Рік тому
Enraged Enemies | C Game Engine From Scratch 17
Spawning Enemies | C Game + Engine From Scratch 16
Переглядів 2,1 тис.Рік тому
Spawning Enemies | C Game Engine From Scratch 16
How NOT to Develop a Game (A Gamedev Story)
Переглядів 3,9 тис.Рік тому
How NOT to Develop a Game (A Gamedev Story)
Level Setup | C Game + Engine From Scratch 15
Переглядів 3,9 тис.Рік тому
Level Setup | C Game Engine From Scratch 15
Playing Audio | C Game + Engine From Scratch 14
Переглядів 3,1 тис.Рік тому
Playing Audio | C Game Engine From Scratch 14
"Make a Game not an Engine" (Just use Unity/Unreal/Godot bro)
Переглядів 20 тис.2 роки тому
"Make a Game not an Engine" (Just use Unity/Unreal/Godot bro)
Trigger Events | C Game + Engine From Scratch 13
Переглядів 2,5 тис.2 роки тому
Trigger Events | C Game Engine From Scratch 13
Animated Sprites | C Game + Engine From Scratch 12
Переглядів 3,9 тис.2 роки тому
Animated Sprites | C Game Engine From Scratch 12
I Made an Image Loader in 15 Lines for My Game Engine
Переглядів 4,4 тис.2 роки тому
I Made an Image Loader in 15 Lines for My Game Engine
Batch Rendering Sprite Sheets | C Game + Engine From Scratch 11
Переглядів 8 тис.2 роки тому
Batch Rendering Sprite Sheets | C Game Engine From Scratch 11
Entities and Collision Layers | C Game + Engine From Scratch 10
Переглядів 6 тис.2 роки тому
Entities and Collision Layers | C Game Engine From Scratch 10
2D Collision Response | C Game + Engine From Scratch 09
Переглядів 12 тис.2 роки тому
2D Collision Response | C Game Engine From Scratch 09
Swept AABB Collision Detection | C Game + Engine From Scratch 08
Переглядів 14 тис.2 роки тому
Swept AABB Collision Detection | C Game Engine From Scratch 08
AABB vs AABB Collision Detection | C Game + Engine From Scratch 07
Переглядів 9 тис.2 роки тому
AABB vs AABB Collision Detection | C Game Engine From Scratch 07
Point vs AABB Collision Detection | C Game + Engine From Scratch 06
Переглядів 7 тис.2 роки тому
Point vs AABB Collision Detection | C Game Engine From Scratch 06
Can Copilot build a library in C? Well...
Переглядів 3,8 тис.2 роки тому
Can Copilot build a library in C? Well...
Physics: Integration | C Game + Engine From Scratch 05
Переглядів 11 тис.2 роки тому
Physics: Integration | C Game Engine From Scratch 05
Input and Config | C Game + Engine From Scratch 04
Переглядів 12 тис.2 роки тому
Input and Config | C Game Engine From Scratch 04
Shaders and Reading Files | C Game + Engine From Scratch 03
Переглядів 14 тис.2 роки тому
Shaders and Reading Files | C Game Engine From Scratch 03
Rendering a Quad | C Game + Engine From Scratch 02
Переглядів 31 тис.2 роки тому
Rendering a Quad | C Game Engine From Scratch 02
How to make a GAME ENGINE | SDL2 Setup and Window | C Game + Engine From Scratch 01
Переглядів 121 тис.2 роки тому
How to make a GAME ENGINE | SDL2 Setup and Window | C Game Engine From Scratch 01

КОМЕНТАРІ

  • @fourtwothree5422
    @fourtwothree5422 День тому

    Thank you so much, this helped me with AABB collision for my game.

  • @metamud8686
    @metamud8686 День тому

    holy crap what a mess you made of the code in this episode. :facepalm:

  • @metamud8686
    @metamud8686 День тому

    LOL at comparing floats with ==

  • @metamud8686
    @metamud8686 День тому

    2:15 Note that your "ERROR_EXIT()" macro as shown actually does NOT call exit(), it just prints to stderr.

  • @sh_t_I-Just
    @sh_t_I-Just 4 дні тому

    where can i get that tile set

  • @StellarHarbor
    @StellarHarbor 4 дні тому

    Another guy who keeps bouncing between languages and projects, struggling to finish things :c

  • @jfrank1500
    @jfrank1500 6 днів тому

    Thanks for reinventing the wheel in C99. I would like to see your implementation of a Quadtree for collision detection. Is there a repository with all the code from this series?

  • @SB-rf2ye
    @SB-rf2ye 7 днів тому

    Love your C coding tutorials.

  • @alh-xj6gt
    @alh-xj6gt 7 днів тому

    Thank you for doing this, this looks doable by me as a mere mortal. With RAD Debugger there is no need for msvc debugger? So no need for MSVC installation? I want to follow along without installing MSVC. The drop in c (clang) compiler from zig is great and windows.h to my surprise without any separate sdk installation seems to just work. The cl arguments what do they specifically do? I'm trying to replicate what you are doing and am a bit lost with the sheer amount of options.

    • @DylanFalconer
      @DylanFalconer 7 днів тому

      Hi there, I can't remember what they all do without looking them up. But for clang, I know there's a -nostdlib flag. The resource I used can be found by searching "how to avoid c/c++ runtime on windows" - a blog post by Martins Mozeiko on Handmade Forums

    • @DylanFalconer
      @DylanFalconer 7 днів тому

      You can try copying the msvc build command into chatgpt/claude and asking for a clang version LLMs are decent at that kind of stuff

  • @Laurent_GameDev
    @Laurent_GameDev 11 днів тому

    Nice video. Thanks ! Do you have the code of these examples available somewhere ?

    • @DylanFalconer
      @DylanFalconer 8 днів тому

      Thanks, Laurent. I've just uploaded them to GitHub for you: github.com/falconerd/raylib_introduction

    • @Laurent_MagnaMens
      @Laurent_MagnaMens 8 днів тому

      @@DylanFalconer thanks !

  • @zb3485
    @zb3485 13 днів тому

    if its fun to you - go for it - to me, it was non-negotiable - using existing engine just wasnt fun, and didnt fit my needs either...it brought me many (3) work opportunities...realize that making an engine generally dwarfs what you would be doing in most corporate jobs...thanks to it im very confident in jobsearch, and i have never been turned down, and getting a good pay is easier too - as simple as saying "i have a proof" to any arguments...of course im still working on it, but honestly, getting much better as a programmer is enough (its also extremely fulfilling to build your own rendering pipeline, networking, and seeing it work) - best of luck to anyone reading this:)

  • @10e999
    @10e999 13 днів тому

    I'm curious: why no clib? I get the idea of not using quirky parts of the library like fscan or strtol, but not having things like printf, memset seems like a pain (and maybe slower... surely memset is a SIMD call? no?) EDIT: memset is an intrinsic ?!

    • @DylanFalconer
      @DylanFalconer 13 днів тому

      Yeah, it's just for fun and learning. There's no practical reasoning here And yeah, memset is intrinsic, at least in the Windows compiler

    • @10e999
      @10e999 13 днів тому

      @@DylanFalconer fair enough! Have fun! Will start episode 2 soon

  • @10e999
    @10e999 13 днів тому

    Just started watching your steams ! I really like the topic of creating a "base" for project!

  • @samh4592
    @samh4592 16 днів тому

    not sure why you thought the 4x speed multiplier was needed for the setup. Just makes our lives harder

  • @etherweb6796
    @etherweb6796 18 днів тому

    Interested to see you what you do for string handling. Side note, you should be using uintptr_t for pointer addresses instead of integer types.

    • @DylanFalconer
      @DylanFalconer 17 днів тому

      The only target is x64 Windows machines, and I'm not using the standard library

  • @aprile1710
    @aprile1710 18 днів тому

    What was the reason for avoiding the C Standard Library for things like strlen? I would think that's a preferable dependency over Win32.

    • @DylanFalconer
      @DylanFalconer 17 днів тому

      For fun

    • @bortech
      @bortech 16 днів тому

      Main reason: null-terminated string is a big design mistake.

    • @aprile1710
      @aprile1710 16 днів тому

      @@DylanFalconer Oh, fair enough.

    • @aprile1710
      @aprile1710 16 днів тому

      @@bortech There are pros and cons but it was not a design mistake.

  • @chad4094
    @chad4094 18 днів тому

    LETS GOOOOOOOOOOOOOOOOO

  • @alh-xj6gt
    @alh-xj6gt 18 днів тому

    Like the work. audio is very low the adjustment at 40:50 it is a bit better could be cranked up a bit more. Compared for example with tsoding streams and his audio level here it is still lower.

  • @frankc2119
    @frankc2119 18 днів тому

    volume is very quiet; can barely hear you. are you back to using c after odin?

    • @caiolaytynher5994
      @caiolaytynher5994 18 днів тому

      He said it's for recreational purposes

    • @DylanFalconer
      @DylanFalconer 17 днів тому

      Yeah, chat helped me fix that in the 2nd stream. Sorry about that I'm using C for fun and learning, still using Odin in many projects

  • @Kknewkles
    @Kknewkles 18 днів тому

    Like ahead of time. Gotta watch this later. Also, Striga hooo!

  • @soupnoodles
    @soupnoodles 21 день тому

    This is far too fast paced to be a tutorial. Its more of a demo

  • @GenericInternetter
    @GenericInternetter 27 днів тому

    i'm 4 minutes in and you still haven't got to the point

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

    i got stuck for days on it, glad i found your channel, thanks for the help

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

    Just came across your channel, I hope you do more unity videos!

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

    Very useful tutorial! Thank you

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

    when i do the "build && mygame" it says 'CL' is not recognized as an internal or external command, operable program or batch file. Have any idea why?

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

    0:00 General Kenobi

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

    69420

  • @WinifredHopkins-z2j
    @WinifredHopkins-z2j Місяць тому

    Breitenberg Expressway

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

    What is this language?

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

    Recently, I was just exploring LDtk for my mini-training-game on Odin + Raylib, wondering "Well, I need to learn this stuff" and then I have noticed your video. Is this magic?

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

    I know this is a toy example, but can't appending a node potentially cause all of the pointers to be invalidated if the dynamic array needs to allocate a bigger chunk of memory?

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

      Yes, unless Odin does something truly wild(!) behind the scenes like mmap a terabyte of virtual memory for every [dynamic] array or something. Even worse if the video author themselves didn't realize -- my guess is the author is mostly familiar with garbage collected environments, isn't used to working with pointers, and just want to encourage memory pooling or arena allocation in general and picked an unfortunate way to show it. Instead of returning pointers, one way to solve it would be to just return opaque IDs or something like that (indices into the array, for example) that act like Node pointers -- if the language provides the option to overload "dereferencing" (like in C++/Nim/Rust/etc., I don't know if Odin can do this).

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

      @@frankhestvik9859 I imagine the video maker is very familiar with manual memory environments, but mapped an example that used an arena or bump allocator onto a dynamic array for simplicity of explanation.

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

      Yes, in that case, you can use ids rather than pointers, or make sure not to keep pointers across calls that may realloc, or use a larger preallocated pool, etc

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

    This also explains why Rust's philosophy is not so great since it is focused on managing individual lifetimes.

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

      This seems nonsensical or a misunderstanding. The "individual" in "individual lifetimes" that Rust focuses on is a completely different concept than the "individual malloc()/free() calls can cause fragmentation"; that's like conflating the size of a for loop in the source with the number of iterations during run-time. In practice it might actually be the opposite: Rust's type system is such a pedantic pain in the ass that people end up "giving up" on their (usually bad) linked list/heap-node strategies and instead just go back to using a vector/ECS/data-oriented approach, e.g. backed by vector storage or an arena/pool allocator, which tend to be much simpler to do in Rust -- and which is exactly what this video seemingly would argue for... I mean this is why I don't like Rust either, but to say it doesn't encourage data-oriented design seems wrong. The main problem you would have in Rust with this code tho is that it would (correctly) tell you that what you're doing is bullshit because you're returning pointers into a seemingly dynamically allocated array that may move around on the heap (unless Odin does something truly wild like map every dynamic array to its own terabyte of virtual memory).

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

    i have been playing with arena allocators in C for a month now, i even built some data structures on top of them like "vectors" but i am starting to feel like these types of allocators are mostly powerful for game development and not so much systems programming (which is what i mainly do) i say this because i only hear game developers talking about this, and from my little experience im not entirely sold on them right now, maybe i'm just using them badly but i feel like there is some mental overhead and rewriting with this paradigm

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

      It's interesting that you say that because I feel the exact opposite way Once I started thinking in groups, it became much easier to program What do you usually do in systems programming?

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

      @@DylanFalconer i'm a student taking a class on low level programming in C in which we are asked to frequently write console applications for linux/unix systems, i just came back to this video because today i received an assignment in which grouped lifetime thinking is probably the best way to solve my problem efficiently. so i guess i was totally wrong because i actually did exactly what you described in your video, we had to implement a kind of stack that rotates and in which you had to pop and push elements sometimes. i used a memory pool with a free list to keep track of which elements were popped so i can reuse their slots and it worked wonderfully!

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

    isn't what you showed basically a pool allocator? and what's the point of using a linked list when using vectors in the background anyways? (I'm just curious)

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

      Maybe educational purposes, Idk.

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

      You still keep the properties of why you want a linked list. It allows you to add and remove items faster, because you don't need to moving memory around. Arrays/Vector/dynamic arrays are just blocks of memory.

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

      I am more of an array person myself, you often do not need to store pointers. But grouped lifetime thinking can also be applied to tree like structures (and if you are weird you can see a link list as a tree where every node only has at most one child). Linked lists have some advantages over array,s especially in the functional programming realm where they are a persistent data structure.

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

      Yeah it is basically a pool allocator The linked list example is just as an example - because that's something we learn very early and it's usually the individually allocated elements way That said, you can still back a linked list with a pool (probably different to this one so you don't get reallocations) and get decent cache locality while maintaining characteristics you want from the list (->next, ->prev) Why you'd want that just depends on what you are working on

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

      Same, in practice I usually use arrays for most things unless there's some good reason not to

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

    Also, I like the fact that we don't need a build system such as cmake.

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

    Cache coherence is king, also neat to use linear/pool allocators whenever possible. I am somewhat fond of realizing I can do that in modern C++ anyways, while avoiding most of the oop nonesense.

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

      Also neat to sometimes leverage globals, const or not, for static storage. And stack too.

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

      Somehow I also became a huge fan of templates, something I once sought to destroy.

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

      It is really good for performance and I find it to be much easier to reason about

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

    you might be the only newsletter i subscribed to that i actually read. Amazing articles and video explanations

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

    1:60 oh that's a new feature! very useful too.

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

    Seems pretty cool, will try it out

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

    glad.obj : fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'x64' does anyone know how to fix?

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

    Even if you don't use an ECS, it is still probably a good idea to follow "composition over inheritance" as a design rule. That gives most of the non performance related benefits of ECS without ECS. ECS is more or less just a specific optimization you can choose to do if you follow that design rule. If it later turns out you have performance problems, you can pretty easily transition to an ECS (or directly perform the "array of struct" -> "struct of array" transformation yourself)

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

    I infinitely prefer calling a dynamic array - "ArrayList" or maybe just "List", as it should be the case

  • @Nicholas-nu9jx
    @Nicholas-nu9jx Місяць тому

    I dont use header files but just include/use .c files

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

    Could you make the code a bit bigger in next videos? It's hard to read on mobile screens.

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

    Love this video. I recently did something very similar and implemented a few different architectures like this for a simple asteroid game on GitHub pfirsich/game-architecture-comparison. I implemented pretty much the alternatives you presented and some more.

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

    Am i the only one who thought this was about Amazon ecs?😅 Great video either way. Always nice to learn more about game dev👍.

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

    I think the key idea is to know your constraints and build only what you need. General purpose systems and large teams have very different constraints and requirements compared to a small team and highly specific system. The real trick is building only what you need, minimally and effectively, but in such a way that it leaves room to expand in the future if necessary - you have to keep the bigger picture and future in mind even if you're not yet building it, or there is a risk of painting yourself into a corner and having to rewrite

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

    Great video, what editor theme is that?