When You Can't Use Unreal Engine To Make A Game

  Рет қаралды 22,719

James Lambert

James Lambert

Күн бұрын

Пікірлер: 146
@Evgeny1
@Evgeny1 3 ай бұрын
The more mature I become as a programmer, the simpler the code I write
@DamianReloaded
@DamianReloaded 3 ай бұрын
The more mature I become as a programmer, the better code I can make chatgpt generate XD
@capncoolio
@capncoolio 3 ай бұрын
@@Evgeny1 I've found myself settling into descriptive, almost functional patterns, over time. Tends to read more like telling the computer what I want it to do, rather than how to do it.
@iamhand
@iamhand 3 ай бұрын
It's the bell curve of experience wojack meme
@fisch37
@fisch37 3 ай бұрын
Looking at my past work, yeah that tracks! LoC isn't a good measure turns out
@Shrek_es_mi_pastor
@Shrek_es_mi_pastor 3 ай бұрын
Same happens to writers
@alicethetransdalek7333
@alicethetransdalek7333 3 ай бұрын
there are so many people on the internet spreading bullshit about how "oh you should never make your own engine" "if you want to make a game you should only use one of the big popular engines", it's so absurdly refreshing to just see a video going "i make my own engine, here's some tips on how to do it" lol
@ramoncf7
@ramoncf7 3 ай бұрын
It's a good advice for 99% of the people trying to make a game. Finishing a game is extremely hard, adding a game engine from scratch multiplies the time needed to finish it by a factor of 3 at least.
@orangy57
@orangy57 3 ай бұрын
If you want to finish all your games or are trying to get a job in the industry then don't code an engine. If you like to tinker and have total control over your game then make an engine
@swordofkings128
@swordofkings128 3 ай бұрын
@@ramoncf7 Yeah I wrote a 3d renderer and model loader in C++/OpenGL for an assignment for college (it had to have geo with normals, diffuse and specular textures, the world needed multiple light sources, a 3d user controlled camera) and just making that was a nightmare (we had 6 weeks and I had other classes and a job which didn't help!). Imo 99% of people who want to make a game would give up way before actually making anything besides a 3d camera in a blank void with some boxes and triangles cuz like... if that weren't a graded assignment I would of stopped after making a triangle spin around or something.
@Kenionatus
@Kenionatus 3 ай бұрын
​@@orangy57Wouldn't having made a decent engine be good on a résumé? Ok, guess it depends on the capabilities, considering how simpler games can run on horrid spaghetti that makes god weep. (Note that I'm just a random person on the internet with very little game dev and zero industry experience.)
@lexacutable
@lexacutable 2 ай бұрын
​@@Kenionatus (game developer here) Yeah, it would look nice on a resume. But depending on what you mean by "decent engine" it may also take at least several years of your life and never be finished. A simple, specialised engine is worth trying, and in fact in my university course we did just that. Making a well-performing engine for something like the N64 requires a lot more low level technical knowledge though, as compared to programming for PC.
@jsbarretto
@jsbarretto 3 ай бұрын
As someone that's been writing games without engines for many years, I can say that all of this is excellent advice. Component systems in particular are *the* way to go for scaleable, dynamic, complex behaviours without spaghetti appearing in the code logic. The 'make a game, not an engine' advice is superb too: avoiding over-engineering is essential to make headway in this space.
@jimmyhirr5773
@jimmyhirr5773 3 ай бұрын
You're not the only one critical of object-oriented programming. I've heard that many authors of high-performance game engines eschew object-oriented programming. Instead they do what's called data-oriented design. They say it is more performant because it reduces memory accesses and improves cache locality. In some cases, it makes it possible to use SIMD instructions.
@diskpoppy
@diskpoppy 3 ай бұрын
For anyone wondering: the approach that unity uses is generally called Entity Component System (ECS), and it's not even associated with OOP, rather tending to be used alongside data-oriented design (the approach could be summarized as: for every subsystem responsible for a given component, build a flat array of the relevant data from the relevant entities, that is then simply looped over without any pointer chasing)
@ITR
@ITR 2 ай бұрын
Not really, unity uses more of an object oriented component system, with low separation of data and logic and higher complexity if you try to use composition. Unity DOTS however has a proper ECS system, but most unity developers don't know how to use it
@diskpoppy
@diskpoppy 2 ай бұрын
@@ITR Ok, I stand corrected, I haven't used much of Unity, but that makes sense
@asdasfdfgewqgrgyjh
@asdasfdfgewqgrgyjh Ай бұрын
​@@ITR you beat me to this
@LovroPlaninšek
@LovroPlaninšek 3 ай бұрын
literally the only sensible sponsorship from brilliant on youtube, even for some maths education channels - why would you need an online education course - but for programming, specifically for n64? you'd definitely need to not just grasp, but also master those concepts
@mr_indie_fan
@mr_indie_fan 3 ай бұрын
Yooo, the king of the N64 is back! 👏🤠
@iamhand
@iamhand 3 ай бұрын
Welp, now I got to look at refactoring parts of my Pico-8 game. Half of my systems use references to find entities and the other use IDs. Kind of a mess 😅
@im-nassinger
@im-nassinger 3 ай бұрын
I love how he shows examples to explain the concepts he talks about
@1337pianoman
@1337pianoman 3 ай бұрын
I was looking for a way to code games on my phone so I could hopefully shift mindless reddit scrolling time into game dev. I found a simple text editor that would let me write html and js with syntax highlighting and run it in the browser. Then I just started writing. It took maybe a couple of hours to have an interactive thing and then a handful more before to have a simple game. Technically I guess I'm writing a game engine. I feel like people have a warped idea of what that means though because of things like unity and unreal. The advice to focus on making the game and only develop the engine features as you need them is excellent
@mrbeanie7676
@mrbeanie7676 3 ай бұрын
big fan of your strategy game mission lost control.
@pdlbackup
@pdlbackup 3 ай бұрын
Really good tips in this video! I agree that it's very important to just make something work, instead of worrying about issues you don't even have yet. Obviously it's good to think about the future, but I have personally noticed that it honestly usually isn't even too much work to rewrite certain parts when problems show up, even if the code is badly written.
@TrevelyanOO6
@TrevelyanOO6 3 ай бұрын
Sounds like Bevy’s ECS model. Entities, Components, Systems.
@james14294
@james14294 3 ай бұрын
The last time I asked a game dev what tips they had in regards to making a game engine was... (assuming you are doing to develop a game, and not just for the sake of making an engine) Dont... Or only do it if the game you want to develop has a requirement that cannot be reasonably met by current engines. Using Noita as an example, due to every pixel being simulated stuff.
@megan_alnico
@megan_alnico 3 ай бұрын
I remember an old Gamasutra article talking about a game having a lot of issues with its physics engine. A new person came in and made the observations that even though it was a 3D game, all the collisions could be done in 2D instead. The new code was simlle and efficient and got the job done. I think about this kinda thing a lot when people talk about using off the shelf game engines. How much is your engine doing that is unnecessary for your game?
@DanielKierkegaardAndersen
@DanielKierkegaardAndersen 3 ай бұрын
The rules mentioned sounds a lot like "The Rules of Programming" by Chris Zimmerman, a tech lead for Suckerpunch, making Sly, Infamous and Ghost of Tsushima 😅.. can definitely recommend
@Dysiode
@Dysiode 3 ай бұрын
Excellent discussion! I have, as many many of us have, definitely spent more time writing the game engine instead of writing the game. It always feels like if I get that out of the way first I'll be able to breeze through writing the game. TBH, your mentioning that has kindled a small bit of motivation to work on a personal project that's been sitting idle for a few years now... Though, I will bring everyone back to a critical point from the Zen of Python: > There should be one-- and preferably only one --obvious way to do it. > Although that way may not be obvious at first unless you're Dutch.
@TRUSTLBLACKMETAL
@TRUSTLBLACKMETAL 3 ай бұрын
such good advice, and explained so well. thank you.
@ArneChristianRosenfeldt
@ArneChristianRosenfeldt 3 ай бұрын
Pointers are Ids. The only difference is that pointers have byte granularity. Pointers can be set to null. If we divide the memory too down as on a C64, we can use pages. So a byte only. Every indirection is bad on RAMBUS. If you have typed arrays and use them as pools, you can get away with smaller pointers (typed indices). So gameobjects with references fit into cache or registers. Malloc and free work the same for ids and pointers. You go through your pool and search for a free (deleted) slot. Search while you vsync.
@MopeyMoon
@MopeyMoon 3 ай бұрын
Pointers are IDs the same way pointers are also optional types. The key difference is that if you hold a pointer, there is nothing stopping you from dereferencing it, whereas if you only hold an entity ID, you have to pass it to a system that enforces checking before you can anything with the referenced object if it even still exists.
@ArneChristianRosenfeldt
@ArneChristianRosenfeldt 3 ай бұрын
@@MopeyMoon I never had problems with invalid pointers. I guess I used too much Java, C#, and smart pointers in C++. Often I end up with double links because I need the cascade effect right there. With IDs and an in memory database we can use a b-tree to manage memory and defragmentate it. In Java H2 is such a Database. For C there is SQLite? So IDs would live forever? Sounds like a memory leak to me.
@sanderbos4243
@sanderbos4243 3 ай бұрын
​@@ArneChristianRosenfeldtIDs are just integers that don't have any lifetime associated with them, so I don't see how that could cause a memory leak. For example, say that entity 1 has an "attacking_id" field with an ID integer of 2, then it doesn't really matter whether entity 2 has already been killed or not in terms of memory leakage
@ArneChristianRosenfeldt
@ArneChristianRosenfeldt 3 ай бұрын
@@sanderbos4243 but then you could just as well use pointers to attack types. Is this about serialisation? I mean, in code you try to avoid using “type1”, but you write “low poking attack” . The compiler then can either use enums to compile this to IDs , or static fields to compile to pointers.
@sanderbos4243
@sanderbos4243 3 ай бұрын
@@ArneChristianRosenfeldt When I used "attacking_id" as an example, I meant "what entity ID am I attacking?", not "what type of attack am I performing?". It doesn't really matter whether it's an int or a pointer or a double, but the point is just that you don't want to have it be a pointer to a raw memory location that you dereference. The blog post "Handles are the better pointers" goes in much greater detail of the many advantages of it, so I highly recommend checking that :)
@BSzili
@BSzili 3 ай бұрын
Out of curiosity, why do you hold a microphone stand that was meant to put on at able in your hand, bashing the cable into it? Is this programming ASMR? 😀
@philcoast1031
@philcoast1031 3 ай бұрын
More like a reverse ASMR. The constant noise was very distracting thoughout the video.
@smileynoob
@smileynoob 3 ай бұрын
Hello, what practices are you planning 🎉
@admiralAlfonso9001
@admiralAlfonso9001 3 ай бұрын
I liked the old thumbnail and title better because it was more understandable
@capncoolio
@capncoolio 3 ай бұрын
Tips for making your own game engine: don't. 🤣
@jakeparkinson8929
@jakeparkinson8929 3 ай бұрын
You're by far one of the coolest people out there.
@n8cantor
@n8cantor 3 ай бұрын
If you get rid of stale references you at least need to make sure that you forget to cap backwards moving speed
@deconimus2393
@deconimus2393 3 ай бұрын
It is perhaps noteworthy that the components pattern mentioned around 3:40 is also possible in C, even though C is not an object oriented language. Simply by using instances of structs and pointers. E.g. have a struct GameObject, which has pointers of structs Damageable etc. If the damageable pointer is NULL, the gameobject doesn't have that component and so on. In this particular case of an N64 game this exact implementation of the pattern might be inefficient due to memory limitations though (not sure).
@Muskelhias
@Muskelhias 3 ай бұрын
Cool! Was this your main job?
@james.lambert
@james.lambert 3 ай бұрын
My full time job is web development but I have been making games as a hobby for a very long time
@trashtrash2169
@trashtrash2169 3 ай бұрын
This is the way. Just having a main job and making games on the side, web development specifically sounds like a drag, like working a job where you just make excell sheets all day.
@marksmod
@marksmod 3 ай бұрын
6:27 to be fair, the number still is a reference, its just a managed one.
@james.lambert
@james.lambert 3 ай бұрын
That is true
@ellielikesmath
@ellielikesmath 3 ай бұрын
i probably will never understand why people care this much about the n64, but i'm glad people are working on it anyway.
@James_Kosmo
@James_Kosmo 2 ай бұрын
Idk if it is possible, but lately I've been experimenting with re-coding a game through the game it self, for example in Minecraft each block has a binary code to identify it, there is a way to "combine" the first part of one block and the last part of another, therefore combining two blocks into a new , deferent one. What I'm saying is that couldn't you glitch the game when you use an id? With classes I don't think its possible, but with ids it can be done.
@james.lambert
@james.lambert 2 ай бұрын
I'm not entirely sure what you are asking but I if there are two separate configurations for a block then you want two separate pieces of information on the block. I would also not use the entity/gameobject system for each individual block. I would have a single game object manage groups of blocks.
@James_Kosmo
@James_Kosmo 2 ай бұрын
@@james.lambert I wrote the comment while in a hurry. What I meant was that you can glitch games into doing something else by doing certain actions. For example in super Castlevania, you can skip the whole game by performing a boosted jump and enter the next screen, if you do that the game checks the state of the character through a number. For example if the player is idle the number is 1, if he attacks 2 etc. The game is designed for the character to enter in the walking state but if you enter in the attacking state the game gets confused since the number happens to glitch the game. If it used classes (which was impossible) then this wouldn't have happened. It is very complicated to explain, I hope that I cleared things out. If not , just search super Castlevania Speedrun and I think you will understand that I'm saying.If you are reading this love your vids!
@inxomnyaa
@inxomnyaa 3 ай бұрын
That is very much like my current ECS works (in PHP. OOP is definitely overrated) 👍🏻 I wish i would've had that advice earlier, I've always added more and more features 😅 Though, i have developed that behavior because i kept rewriting everything in my code, especially APIs
@legoboy7107
@legoboy7107 2 ай бұрын
"You might be optimizing code that only gives you nanoseconds of improvement." Kaze Emanuar: And?
@insu_na
@insu_na 3 ай бұрын
And now to make it scalable use a message queue paradigm 🤣🤣 Edit: I'm mostly joking because I don't know what N64 systems are capable of and most of my game dev knowledge comes from server-side code. I'm nevertheless curious if zeromq or the like can run on N64. Tho given that N64 seems to be single-threaded I doubt there's much efficiency to gain here, except maybe to simplify the code required for batch processing of multiple events as an optimization.
@zanagi
@zanagi 3 ай бұрын
I'm not sure if you can publish a game that used proprietary engine on steam without contacting them directly...
@anon_y_mousse
@anon_y_mousse 3 ай бұрын
My tip for writing a game for a limited system is to A) don't do it B) if you really insist then use one of the open source engines such as Doom [1-3] or Quake [1-3] and go from there. However, I do completely disagree with you regarding object oriented programming in C. You absolutely can do it and I do it all the time. There are only two concepts in programming that you should always say no to using and that's recursion and recursion. For all else, moderation is the key. Use a moderate amount of the concepts, only as they apply to the problem you're trying to solve. Towards that end, you absolutely can create an object system for your game engine, but if you're targeting an N64, maybe consider something much more simple.
@9a3eedi
@9a3eedi Ай бұрын
Got a question... for a limited platform like the N64, it makes sense for you to write your game from scratch Does this also apply for modern platforms, if your game is relatively simple? I've studied game development and I generally have a good understanding of how games and game engines work. However, the general advice these days is to use a pre-made engine. But in my experience with Unity, it often feels like most of my time is figuring out how to get my solution to work in a way that Unity likes, not actually solving problems that I might have. This is especially the case if you're trying to make a simple 2D game. It makes me dislike working with engines like Unity. Despite the amount of work involved, I found it more satisfying and flexible to write everything from scratch
@timmis15
@timmis15 10 күн бұрын
Hey, How hard would it be to port a N64 game conker's bad fur day to the PS Vita
@nintendo4life132
@nintendo4life132 4 күн бұрын
Somehow, it's going to be very difficult for me to learn
@useless2784
@useless2784 19 күн бұрын
good video as always, shame youtube seems to be pushing your content out less
@SpaghettiEnterprises
@SpaghettiEnterprises 2 ай бұрын
Ugh I felt this. Was looking at some stuff today that I wrote a few years ago and hoo boy... Definitely solving some imaginary problems there
@PauLtus_B
@PauLtus_B 3 ай бұрын
I always find it painful to see how many massive budget games are still just made with the Unreal engine. These games have so many resources yet they're still not building an engine that would specifically serve the game they're creating. I really wonder how many unnecessary calculations are constantly being made.
@RealTal.
@RealTal. 2 ай бұрын
Yeah stale refference manipulation is what breaks OOT its serious stuff
@salcarreiro6756
@salcarreiro6756 3 ай бұрын
do you think a game like Zelda: Phantom Hourglass for the NDS would run on N64?
@cakestealer5983
@cakestealer5983 3 ай бұрын
Well first you gotta know how coding works... Hence I’m not making my own engine
@ElasticSea
@ElasticSea 29 күн бұрын
Ok that Brilliant plug was really well done, super useful.
@celebraces2
@celebraces2 2 ай бұрын
Ah, my favourite error message that means nothing to the user: "object reference not set to an instance of an object"
@Mecha-sanic
@Mecha-sanic Ай бұрын
Imagine bubsy 3D on the Nintendo 64 XD
@LeopoldPeters
@LeopoldPeters 2 ай бұрын
He says objectoriented is overrated and then makes his own object orientation😂
@hoffer_moment
@hoffer_moment 3 ай бұрын
would love more videos kinda like this :)
@fisch37
@fisch37 3 ай бұрын
Can I get those 30 days free in a bag for later, please?
@rayflyers
@rayflyers 3 ай бұрын
I'm a data scientist who uses high-level languages, and I want to learn a lower-level language for game design as a hobby. I can't decide between C and Rust. Thoughts?
@albinekb
@albinekb 3 ай бұрын
Rust is amazing but it takes a long time to get good at managing all those types. Maybe start with C since its surface area is a lot smaller, then when you got the hang of pointers and stuff you can start with Rust. But of course it depends on what your level is now and how much time you got to spend. I would go straight to Rust again, coming from node/npm i feel right at home with cargo and crates.
@Starwort
@Starwort 3 ай бұрын
If you're coming from high level languages, I would probably recommend jumping straight into Rust - it has one of the best type systems you will ever use. Rustlings is a great starter resource, though there are of course plenty of other ways to learn
@Irockman1
@Irockman1 3 ай бұрын
I haven't used Rust, but I've heard from other game developers that it's slow to iterate and experiment in Rust because of things like the borrow checker that try to make you program things "correctly", when what you want in game development is the ability to program things stupidly at first so you can rapidly try things out. Someone wrote an in-depth article on this called "Leaving Rust gamedev after 3 years".
@samuelschwager
@samuelschwager 3 ай бұрын
I would offer two alternative recommendations: Odin and Zig. Both are more powerful than C but not as complex as rust.
@NickAndWolf
@NickAndWolf 3 ай бұрын
yeah i try to stick to C and think around stuff like OOP. While people love C++, C#, and Python; C (to me) allows the most flexibility in the long run regardless of project.
@lfarrocodev
@lfarrocodev 3 ай бұрын
A question about one entity doing something to another one (eg. damage). Is an unit authoritative enough to direct apply damage to another one? Or that's up to another system?
@james.lambert
@james.lambert 3 ай бұрын
I would say that depends on what your game needs. I found it typically works fine for one actor to directly apply damage to another.
@jumhig
@jumhig 3 ай бұрын
The games I write for retro systems almost always end up using a "game object behaviour" system. Then there is also rendering and audio systems to implement too.
@thenamelessavenger
@thenamelessavenger 3 ай бұрын
I'm not a programmer and I understood what you said. Thank you! And looking forward to more of your game updates.
@watercat1248
@watercat1248 3 ай бұрын
To be fer the are many stuff in game engine like unity that you forsh to use, That you don't have to use in every component if you make your own game with your own engine, For the transform many system like 2D sounds don't need transform in the order to work, This just only one off the multiple examples The Truth game engine are great and easy to work especially wean you Solo developer like my self and try to make big project, However the have very specific architecture and if your trying to make big project like I did you may end up found the limitesion those software's have. For example I'm using unity to make this fps game and I have already found multiple limitesion this game engine have.
@johnsimpson1507
@johnsimpson1507 3 ай бұрын
Nice video james. I want to get into n64 programming. I am an experienced c programmer but know nothing about n64 programming or graphics. Is the official sdk running on xp a good way to start? Thx
@CCCP-sr9ou
@CCCP-sr9ou 3 ай бұрын
Is it possible to hack the processor on a real Nintendo 64 console and increase the frame rate per second like MiSTer FPGA does? turns on the Turbo BOOST
@MrVampify
@MrVampify 3 ай бұрын
The second rule in my opinion is the most important rule in all of programming. At my work, we have a colleague who was tasked with making an automation script for our infrastructure, related to our monitoring. I had a couple other colleagues berate him with feature requests. I kept telling him, if a feature is not needed for the usability of the task, it can be made later. I am now re-writing it from scratch because it became a complex unmovable and unusable spaghetti code with hard-coded values that were inflexible, and dependant on external systems. I wrote the entire thing in 3 classes, and can be configured with 1 configuration file. I have added 2 features since, which allow us way more flexibility and not only automate what needed to be automated, but we can extend the original capabilities of what we were using. Simple, is better than capable.
@flythereddflagg
@flythereddflagg 3 ай бұрын
I'm not sure I want to go back and refactor my code but this makes a lot of sense. Especially the entity ID system.
@JamieBainbridge
@JamieBainbridge 3 ай бұрын
I'm just a tinkerer who fell into the hole of writing an engine. It's really good! Anyway I wanted to write something new and I banned myself from my own engine, just use something that exists and get on with it. I've made more progress on my ideas than I ever have before lol
@angryparrot
@angryparrot 3 ай бұрын
OOP is overrated. *gasp* Yes. Yes it is.
@PatinaGames
@PatinaGames 3 ай бұрын
I wish i had the skill, i’ve been trying to re create all the effects and texturing techniques for modern game engines and making encoding and light baking tools in blender
@qwfp
@qwfp 3 ай бұрын
My bonus tip would be: know whether you want to make a game or a game engine. Sometimes you just want to make a game engine and that's fine. That can be a lot of fun as well. Just make your goals clear.
@Mark_Rober
@Mark_Rober Ай бұрын
The portal shirt is amazing
@r.g.thesecond
@r.g.thesecond 3 ай бұрын
One tiny but smart thing I picked up looking at other game engines is that EntityID can just be pointer. No need to keep a special count. On modern hardware you might incur a pointer indirection and caching issue but even then sometimes it's no biggie.
@ojregnier
@ojregnier 3 ай бұрын
out of bounds, is 6tf UNDER OUT OF BOUNDS
@Krbydav328
@Krbydav328 3 ай бұрын
we love ECS in this house
@dansnull
@dansnull 3 ай бұрын
Great advice! Thanks for making these videos!
@Didomations
@Didomations Ай бұрын
Or just use unreal for pc
@nowicando7651
@nowicando7651 2 ай бұрын
you said you are making your own engine? can you release some? I will be trying to get JavaScript to run with this. send me some.
@james.lambert
@james.lambert 2 ай бұрын
Here is what I have so far github.com/lambertjamesd/spellcraft I don't know how much of this will apply to your environment
@nowicando7651
@nowicando7651 2 ай бұрын
@@james.lambert #include int main() { const struct { void (*log)(const char *); } console = { .log = printf }; console.log("Hello world from an edge of JavaScript"); } we have to get this lib to provide the ability to understand JavaScript. I want to use your lib in the future.
@nowicando7651
@nowicando7651 2 ай бұрын
@@james.lambert can you make this lib an installer, please?
@al_capad
@al_capad 3 ай бұрын
Wouldn't bitflag array of let's say 16bits (elements) be simpler and quicker?
@sanderbos4243
@sanderbos4243 3 ай бұрын
In the specific examples he showed here that's absolutely the way to go, assuming you won't need more than 64 bits. In terms of ECS, he explained tagging stuff, but you usually also want to be able to store information in the tag, which is called a component. So think of having a "health" component that you can slap onto anything and just contains a double.
@quackcharge
@quackcharge 3 ай бұрын
appreciate the insight! excited to see more from your new project
@CYON4D
@CYON4D 3 ай бұрын
Nice one.
@trashtrash2169
@trashtrash2169 3 ай бұрын
I like the animations in the untitled game.
@daveloomis
@daveloomis 3 ай бұрын
where'd you get the shirt??
@thomassynths
@thomassynths 3 ай бұрын
You made C++ sad.
@GhibliNova
@GhibliNova 3 ай бұрын
If you ever need a writer for a game I'd love to send in some work as an audition! 😁
@james.lambert
@james.lambert 3 ай бұрын
Send me a message on discord and we can talk. I don't have a huge need for writing right now as I am still working on gameplay mostly but I wouldn't mind the help later on. lambertjamesd#3921
@GhibliNova
@GhibliNova 3 ай бұрын
@@james.lambert Awesome! Thanks for responding! I couldn't find a way to message so I sent a friend request. I hope that's okay, I've never really used Discord before 😅
@tediustimmy
@tediustimmy 3 ай бұрын
You can do object-oriented programming in C. It's an abomination, but it's possible.
@jimmyhirr5773
@jimmyhirr5773 3 ай бұрын
"Write reusable code" conflicts with "only solve problems you have right now" and "keep it simple." The desire to write reusable code is what causes writing a game engine instead of a game. The way I avoid this is by extracting reusable code. I write code without thinking about reuse, and if I notice duplication, I remove it by refactoring. This is easy to do in the refactor step of the Red-Green-Refactor TDD loop.
@SnakeEngine
@SnakeEngine 3 ай бұрын
Well, "keeping it simple" is hard. And "writing reusable code" is hard, so that you have then a simpler time ;)
@RC-1290
@RC-1290 3 ай бұрын
Writing re-usable code is hard, because you don't know how you'll want to re-use later, and you're likely to end up with code that's annoying to use twice. It's much easier to write the same-ish code twice, and compress them into one if it makes sense.
@lexacutable
@lexacutable 2 ай бұрын
I absolutely disagree. Writing reusable code is a habit, and you can develop an instinct for how to write pretty much anything in a reusable way. It's not really a case of trying to decide what you'll want to reuse and maybe getting it right or wrong.
@Clodd1
@Clodd1 3 ай бұрын
4:23 HOT TAKE! (I agree!)
@SpaceCond0r
@SpaceCond0r 3 ай бұрын
Why do you think so? Genuinely curious.
@Raspredval1337
@Raspredval1337 3 ай бұрын
btw, what do u think about embedding a scripting lang, like Lua, in a N64 environment? Would that even be possible? 🤔
@ArneChristianRosenfeldt
@ArneChristianRosenfeldt 3 ай бұрын
What do you want to Skript? Events in the level?
@randomcatdude
@randomcatdude 3 ай бұрын
maybe possible but it would really be a better idea to create a custom scripting system for the specific purpose embedding lua into an n64 game is overkill imo
@Raspredval1337
@Raspredval1337 3 ай бұрын
@@randomcatdude the Lua runtime is rather compact, plus it has a nice C interface. It would be much easier to make the mentioned entity system in a dynamic type lang, than in C
@ArneChristianRosenfeldt
@ArneChristianRosenfeldt 3 ай бұрын
@@Raspredval1337 and we be slow as hell. Static types give you speed, especially in an Array.
@Raspredval1337
@Raspredval1337 3 ай бұрын
@@ArneChristianRosenfeldt maybe, since the N64 bottleneck is memory access and dynamic type langs add significant memory overhead. Still, it might be ok for some tasks. Plus, it can be as performant as C code with a JIT compiler.
@DamianReloaded
@DamianReloaded 3 ай бұрын
You could potentially use a pool of pre allocated data in an array and use their position in the array as entity id, then have a bit array of the same size indicating whether a given entity is in use or not, thus avoiding the hashmap look up. In c you don't have classes but you still have structs, which are essentially the same thing, only that you would have the methods/functions operating on a struct outside and no inheritance which is looking every day more like a good thing really. I'm just rambling out loud in case anyone didn't know this XD
@ArneChristianRosenfeldt
@ArneChristianRosenfeldt 3 ай бұрын
Why are your structs all the same size? Any strings?
@DanielKierkegaardAndersen
@DanielKierkegaardAndersen 3 ай бұрын
Sounds a lot like an archetype ECS :P
@MatthewBakke
@MatthewBakke 3 ай бұрын
You always give off “smartest and most relaxed college professor” vibes. Always great videos!
@CYXXYC
@CYXXYC 3 ай бұрын
man described ECS (Entities-Components-Systems) and complains at not having OOP, for some reason
@snesmocha
@snesmocha 3 ай бұрын
game objects follow an oop behaviour tho. ecs is basically just game objects but without the class component. though they're inherently a completely terrible idea both implementations for a game on the n64 since memory bandwidth is awful at best.
@ArneChristianRosenfeldt
@ArneChristianRosenfeldt 3 ай бұрын
@@snesmochaRamBus goes vroom. C structs and arrays are localised. Align to 16 byte cache boundaries. The bad thing about MIPS is that it blocks on a cache miss, while AtariJaguar only blocks when we access the register which we load to.
@DanielKierkegaardAndersen
@DanielKierkegaardAndersen 3 ай бұрын
​​​@@snesmochaECS is not inherently OOP, nor is GameObjects. At least based on most metrics of OOP you can go by, clean code, solid, filled with inheritance etc. However, it is correct that ECS can have a performance impact as nothing beats a linear array of cache friendly memory. That's why Archetype based ECS stores things in section of linear memory (which his is currently sadly not which is okay because of what he calls rule 2). ECS is especially good for a middle strategy approach. That is, in the beginning linear array is easiest to program, then when it gets hard to maintain, go ECS. At some point performance concerns hits, and you pull some of it back. Thus the reason I'm calling it a middle strategy
Why You Shouldn't Make A Game Engine
25:39
Theodore Bendixson
Рет қаралды 16 М.
🍉😋 #shorts
00:24
Денис Кукояка
Рет қаралды 3,6 МЛН
Стойкость Фёдора поразила всех!
00:58
МИНУС БАЛЛ
Рет қаралды 4,8 МЛН
小路飞嫁祸姐姐搞破坏 #路飞#海贼王
00:45
路飞与唐舞桐
Рет қаралды 7 МЛН
Why Do Video Game Studios Avoid Blender?
6:49
The Cantina
Рет қаралды 602 М.
Why Slopes are Shockingly Difficult for Indie Game Devs
17:20
Inbound Shovel
Рет қаралды 153 М.
I Created a Game Engine Just to Optimise This
4:50
Vercidium
Рет қаралды 1 МЛН
I Made My Own Game Engine
6:24
n8dev
Рет қаралды 250 М.
How to Start Making Games with No Experience
10:55
Goodgis
Рет қаралды 75 М.
I Optimised My Game Engine Up To 12000 FPS
11:58
Vercidium
Рет қаралды 684 М.
Why Solo Developers Should Use Unreal
9:51
Thomas Brush
Рет қаралды 388 М.
I Created My Own Custom 3D Graphics Engine
26:29
Inkbox
Рет қаралды 80 М.