- 59
- 574 968
Dylan Falconer
Australia
Приєднався 30 вер 2018
The Artisanal Programmer.
Building game programming resources.
Videos about how to improve your game programming skills.
Business: dylan@programvideogames.com
Building game programming resources.
Videos about how to improve your game programming skills.
Business: dylan@programvideogames.com
the most important programming concept
Learn game programming: programvideogames.com/free
Join the discord: discord.gg/jDm8uCPYwD
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
Thank you so much, this helped me with AABB collision for my game.
holy crap what a mess you made of the code in this episode. :facepalm:
LOL at comparing floats with ==
2:15 Note that your "ERROR_EXIT()" macro as shown actually does NOT call exit(), it just prints to stderr.
where can i get that tile set
Another guy who keeps bouncing between languages and projects, struggling to finish things :c
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?
Love your C coding tutorials.
Thank you very much
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.
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
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
Nice video. Thanks ! Do you have the code of these examples available somewhere ?
Thanks, Laurent. I've just uploaded them to GitHub for you: github.com/falconerd/raylib_introduction
@@DylanFalconer thanks !
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:)
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 ?!
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
@@DylanFalconer fair enough! Have fun! Will start episode 2 soon
Just started watching your steams ! I really like the topic of creating a "base" for project!
Thanks and welcome
not sure why you thought the 4x speed multiplier was needed for the setup. Just makes our lives harder
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.
The only target is x64 Windows machines, and I'm not using the standard library
What was the reason for avoiding the C Standard Library for things like strlen? I would think that's a preferable dependency over Win32.
For fun
Main reason: null-terminated string is a big design mistake.
@@DylanFalconer Oh, fair enough.
@@bortech There are pros and cons but it was not a design mistake.
LETS GOOOOOOOOOOOOOOOOO
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.
volume is very quiet; can barely hear you. are you back to using c after odin?
He said it's for recreational purposes
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
Like ahead of time. Gotta watch this later. Also, Striga hooo!
This is far too fast paced to be a tutorial. Its more of a demo
i'm 4 minutes in and you still haven't got to the point
i got stuck for days on it, glad i found your channel, thanks for the help
Just came across your channel, I hope you do more unity videos!
Very useful tutorial! Thank you
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?
0:00 General Kenobi
69420
Breitenberg Expressway
What is this language?
Odin
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?
The universe provides
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?
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).
@@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.
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
This also explains why Rust's philosophy is not so great since it is focused on managing individual lifetimes.
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).
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
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?
@@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!
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)
Maybe educational purposes, Idk.
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.
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.
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
Same, in practice I usually use arrays for most things unless there's some good reason not to
Also, I like the fact that we don't need a build system such as cmake.
Absolutely
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.
Also neat to sometimes leverage globals, const or not, for static storage. And stack too.
Somehow I also became a huge fan of templates, something I once sought to destroy.
It is really good for performance and I find it to be much easier to reason about
you might be the only newsletter i subscribed to that i actually read. Amazing articles and video explanations
That means a lot! Thank you
1:60 oh that's a new feature! very useful too.
Hey Diego 👋
Seems pretty cool, will try it out
Yeah, it's quite nice!
glad.obj : fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'x64' does anyone know how to fix?
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)
I infinitely prefer calling a dynamic array - "ArrayList" or maybe just "List", as it should be the case
I dont use header files but just include/use .c files
Could you make the code a bit bigger in next videos? It's hard to read on mobile screens.
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.
Am i the only one who thought this was about Amazon ecs?😅 Great video either way. Always nice to learn more about game dev👍.
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
Great video, what editor theme is that?