Тёмный

Adding Multiplayer, Colored Lights, and More | Coding Minecraft Devlog #2 

GamesWithGabe
Подписаться 59 тыс.
Просмотров 367 тыс.
50% 1

Join the Discord: / discord
Follow me on Twitch: / gameswthgabe
Watch my brothers video of him playing the game!
• Crumble WITH COLORED L...
In this devlog I go over how I added a multiplayer mode to my Minecraft clone. I go over some basics of how the Internet works, and then dive in deep to understand how you can use that when creating a multiplayer game. Next, I talk about how I added colored lights to the Minecraft clone using the same techniques as before. I also go over how I added ambient occlusion and smooth lighting and crafting to the Minecraft clone. Finally, I end the video with a showcase of the game in action.
0:00 Intro
1:02 Implementing Crafting
2:43 Multiplayer
10:01 Lag Compensation
12:13 Ambient Occlusion & Colored Lights
15:05 Different Block Types
16:45 Current State of the Project
18:10 The Game
Like the music at 16:38 ?
Support my friend! Follow Madebit on Spotify:
open.spotify.com/artist/2gEqH...
Images:
"World Map" by Vemaps.com
Music from Music Vine
“Dominoes” licensed via Music Vine: HQMBKYEAEFOJP188
“Skippy” licensed via Music Vine: FZC0DZD3LIMHB7HR
“Complex World” licensed via Music Vine: B1QPB4LIVF98HJUE
"Morrow by Blomma" licensed via Music Vine
“Look Up” licensed via Music Vine: TDVS4LVTIVO5A0HZ
---------------------------------------------------------------------
Website: ambrosiogabe.github.io/
Github: github.com/ambrosiogabe
Here are some books I recommend if you want to learn about game engine development more thoroughly. I do not profit off any of these sales, these are just some books that have helped me out :)
My Recommended Game Engine Books:
Game Engine Architecture: www.gameenginebook.com/
Game Physics Cookbook (Read this before the next physics book): www.amazon.com/Game-Physics-C...
Game Physics (Ian Millington): www.amazon.com/Game-Physics-E...
Game Programming Patterns (Free): gameprogrammingpatterns.com/
My Recommended Beginning Game Programming Books:
JavaScript Game Design: www.apress.com/gp/book/978143...
My Recommended Java Books:
Data Structures/Algorithms: www.amazon.com/Data-Structure...
LWJGL (Free, but I haven't read this thoroughly): lwjglgamedev.gitbooks.io/3d-g...

Опубликовано:

 

2 июл 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 525   
@GamesWithGabe
@GamesWithGabe 2 года назад
About the *crafting table algorithm*. A lot of you have pointed out that it is grossly inefficient, and I should swap it out for some hash and compare algorithm. This is true, but let's do a little thought experiment. According to the table here: www.agner.org/optimize/instruction_tables.pdf, it looks like comparing two 32 bit integers takes about 3 cycles for Intel Sandy Bridge (an i5 processor), assuming no cache misses etc. You need to move two numbers, which requires 1 cycle each (also ignoring reciprocal throughput), then compare, which takes 1 cycle (ignoring reciprocal throughput). My crafting table consists of a 16 bit number for the item id, and an 8 bit number for the item count for each slot. So, let's round it up to 32 bits and assume comparing two slots is the same as comparing two 32 bit numbers. That means it takes around 3 cycles each to compare two slots. If I compare my crafting table to one recipe, that's 9 slot comparisons total, or around 9 x 3 = 27 cycles. So, if I go ahead and say that I have 1,000 recipes to check against, then that's a whopping 27 x 1000 = 2,700 cycles. On an Intel i5 with a clock speed of 1.6 GHz, or 1.6 billion cycles per second. One frame of a game is 16ms, so lets say we have 1.6 billion * 0.016 = 25,600,000 cycles in one frame of our game at 60fps. This means that checking if the user got 1 recipe out of 1,000 possible recipes would take around 0.01% of our total frame time, or around 1.69 microseconds :). If we have 10,000 recipes, that would take around 0.1% of our total frame time, still not even 1% of our processing power in one frame. Now of course this ignores cache misses and all that stuff, but the point I'm trying to make is brute force is not always the worst solution. It's often the simplest algorithm, which it definitely is in this case, which leads to less bugs. Keep in mind that I only run this algorithm when the player updates a block in the crafting table. Human reaction speed is around 0.186 seconds at its fastest according to Google. In other words, they probably won't be clicking fast enough to ever have a lag spike because of this algorithm. Collin Ames did some calculations with cache misses taken into account in the comments, and calculated it to around 20 microseconds for comparing 1,000 recipes if you're interested :) I *always* profile my code *before* trying to optimize stuff, and my hottest path is anything that has to do with updating a chunk. One chunk is 16x16x256=65,536 blocks, each 64 bits. That's a much much larger loop than checking a crafting recipe, and that's where I focus most of my attention when optimizing my code (it also turns out to be the hottest path every time I profile it). So, when I completed this algorithm, and it didn't show up as a hot path, I moved on to other problems since I only have so much bandwidth as a solo developer :) TLDR; Don't assume where the hot paths in your code are, profile it. You'll learn way more that way ;)
@GamesWithGabe
@GamesWithGabe 2 года назад
@Harrison I definitely have the same problem of optimizing stuff that probably doesn't matter :pain:. And the hashing is still an awesome solution that's pretty straightforward and I wish I would have thought of :). It's also pretty simple, so I'll go ahead and implement it if I have some spare time, but when I coded this my gut feeling was "this probably won't effect performance as much as most of my other code", and I probably should have verbalized that a bit better in the video :)
@alejandroalzatesanchez
@alejandroalzatesanchez 2 года назад
try to check what minimun ingredients at look up table are in the grid (careless of position) And you get busted a lot of recipes with one shot, then brute force it as before and the amount of test will be less
@HayashiKaiji
@HayashiKaiji 2 года назад
I understood some of these words. :)
@dallasjohnson2635
@dallasjohnson2635 2 года назад
I want to start out by saying that it's great to see your analysis of this, and you have a good process for solo development. I'm just responding to this as a thought experiment :) IMO, there are two flaws in your logic that make the original implementation unjustifiable: 1. You talk lots about the performance of this algorithm. Let's assume that Collin is right, and this takes 20μs to compare 1,000 recipes (b/c I'm a lazy programmer and don't want to do the math myself). If you expand that information to your 10,000 recipe example, it's now taking 1.2% of your processor cycles at 60Hz. I'm not sure why 1% of a frame at 60Hz is where you drew the line, but that's already quite substantial for what should be a cheap algorithm, and it's entirely possible to go over 10,000 recipes with recipe variations in modded Minecraft. 2. You say "[Brute force is] often the simplest algorithm, which it definitely is in this case, which leads to less bugs." The only way this could possibly be true is if you've never heard of java.util's Map class (or C++'s std::map). This class trivializes recipe checks so much that I can write the Java implementation legibly in a youtube comment: recipeMap.containsKey(currentRecipe). There's no way that an iterative method could be simpler or have fewer bugs than a single function call from a standard library. A couple other corrections (though they don't change your argument much): 1. You say "Human reaction speed is around 0.186 seconds at its fastest according to Google. In other words, they probably won't be clicking fast enough to ever have a lag spike..." Here, you are looking up information that doesn't measure what you're talking about. What you're looking for is clicks per second, which seems to top out around 14 clicks/sec. That results in one click about every 0.07 seconds, which means this algorithm could run three times in a single frame at 60Hz, tripling its cost to 3.6% of your budget in the worst case. 2. You say "One frame of a game is 16ms." This is obviously false, but I understand that you meant to say "I'm targeting 60Hz for this game." Your rounding (16.66... -> 16) also causes your estimates to be more conservative, so there's no problem there. The underlying assumptions you're making, though, are increasingly problematic. More and more consumers are buying displays that support 120Hz and variable refresh rates, and new consoles are taking advantage of these features. To support both VRR and people who don't use V-Sync, you should be looking at your frame pacing (time between frames) as well. Also, just a general comment on profiling - there are times when you'll have to profile one specific scenario to "light up" a code path. This specific code path isn't run for 99.9% of frames, so it obviously won't show up as a hot path if you profile with normal gameplay. That doesn't mean that players won't notice it when it does show up, and if you wait until you get user feedback ("Every time I craft something, my mouse lags"), it will probably take a lot longer to figure out what's happening.
@GamesWithGabe
@GamesWithGabe 2 года назад
@@dallasjohnson2635 maybe I should have phrased the original comment as "this is just some napkin math to illustrate a point" haha. I appreciate the response, but I'm just trying to illustrate that this algorithm runs on such a small data set that it's not worth my time to optimize it for a microsecond (at most) performance improvement per frame. A lot of people like to look at one specific algorithm, but a game is thousands of algorithms running simultaneously, and it's _always_ better to look at the algorithm _in context_ :) 1. I chose 1,000 recipes as a crazy outrageous number that I'll most likely never reach. According to the Minecraft wiki minecraft.fandom.com/wiki/Crafting#Recipe_system there are only 379 recipes in vanilla Minecraft as of 1.16. So I think I have plenty of time before I begin reaching 1-10,000 recipes lol 2. I think this is a bit disingenuous. Sure the API for a Java Map or C++'s std::unordered_map is simple, but you still have to implement the equality operation to ensure that it knows how to check if two recipes are the same (which is the same code I wrote anyways). You also have to implement a good hash, otherwise the map doesn't help much at all, and can often be just as bad as a regular linear search, check out this SO question stackoverflow.com/questions/1757363/java-hashmap-performance-optimization-alternative . This requires a lot of extra knowledge and implicit complexity. For your last two comments, I am targeting 60 fps, maybe I'll target a higher frame rate in the future. And once again, the reaction speed was just for napkin math to do some quick comparisons :) And when I profile, I do target specific events when I'm profiling a certain section of code (Visual Studio allows you to actually select the time period you would like to profile which is very helpful in this regard). My point was that comparing crafting recipes is literally orders of magnitude less then simply iterating over one chunk (400 recipes compared to 65,536 blocks in one chunk). There's usually 12 x 12 x 3.14 chunks in the game at the default settings (that's around 29,600,000 blocks, 74,000 times larger than all the recipes). This means that if a player is going to be noticing lag, it's most likely going to be when doing anything with chunks. All this to say, yes I know the hash is a better algorithm. But right now, as my code is, I'm not going to spend a bunch of time optimizing an algorithm for a few more microseconds per frame. If the requirements change, and I have to find 1 recipe out of 10,000, then I'll change the algorithm :)
@asherhaun
@asherhaun 2 года назад
That plan to make your own game based on the engine is really exciting. That ambient occlusion really makes it look good.
@GamesWithGabe
@GamesWithGabe 2 года назад
Thanks Asher! And yea I figured it was time for me to try to actually create a game instead of just a fancy tech demo haha
@memelord4006
@memelord4006 2 года назад
@@GamesWithGabe What's next, mobs or smth?
@somefish9147
@somefish9147 2 года назад
@@memelord4006 nah i think that ai would be too hard for now
@memelord4006
@memelord4006 2 года назад
@@somefish9147 isn't it literally just a shader + a normal unity game
@D-sket1234
@D-sket1234 2 года назад
@@somefish9147 the ai on the mobs on Minecraft its dumb, it wouldn't be so hard
@artman3
@artman3 2 года назад
I love this Minecraft has a very old lighting system that I wish they can change or update, is almost been the same for years now, and I love any mod that had dynamic lighting for Minecraft
@cez_is_typing
@cez_is_typing 2 года назад
I literally just want coloured lighting, ive had a concept I've wanted to make for forever but I cant cus no matter which mods and shaders I install, I cant find any that allow coloured lighting
@nur-aminjawad2035
@nur-aminjawad2035 Год назад
Rethinking voxel may work for colored lights but they are under development
@abelrashid5184
@abelrashid5184 2 года назад
This channel is criminally underrated.
@battosaijenkins946
@battosaijenkins946 2 года назад
@GamesWithGabe, Bro stick to one subject video. You're all over the place and your title was about multiplayer. And you're wrong @ 7:17. UDP packets never disappear into the void. They arrive at their destination in the wrong sequence which can be resolved by using a hybrid of TCP and UDP.
@GamesWithGabe
@GamesWithGabe 2 года назад
I appreciate the feedback @Battosai Jenkins! And I was referring to dropped packets at 7:17 which is a pretty common issue with UDP jvns.ca/blog/2016/08/24/find-out-where-youre-dropping-packets/#:~:text=lost%20on%20the%20way%20out&text=The%20Linux%20kernel%20deals%20with,So%20you%20will%20drop%20packets. . And I titled this video about multiplayer because that's what the bulk of it was about haha. This is a devlog and I want to cover everything that I've done in the past few months, but I also want to give weight to the most difficult feature I implemented over that time period
@Reclinesmc
@Reclinesmc 2 года назад
@@battosaijenkins946 chill
@jgouken3636
@jgouken3636 2 года назад
Glad it was recommended. Been trying to find more things like this for ages.
@sum_mann
@sum_mann 2 года назад
@@battosaijenkins946 bro chillllllll
@r033cx
@r033cx 2 года назад
You can actually use both TCP and UDP. Just connect to a server twice on two different ports. We used that in our own multiplayer. We sent important messages like player join notifications and chat messages on one and player position data on the other Instead of sending packages every single frame and delaying them you can just send them more rarely and interpolate between received results. It's a lot easier on the server and delay is as short as possible. Once you received a package where player started moving in certain direction you can just complete that movement until new package arrives, when you will just correct player's course to align with new data Also slabs are horizontal in Minecraft :)
@seekyunbounded9273
@seekyunbounded9273 2 года назад
sup, do you have any tips how to start understanding how to code multiplayer
@BusinessWolf1
@BusinessWolf1 2 года назад
@@seekyunbounded9273 The video explained a lot, you can google search the rest
@MommysGoodPuppy
@MommysGoodPuppy Год назад
@@seekyunbounded9273 by now you can probably use chatgpt
@masela01
@masela01 Год назад
this TCP and UDP thing is actually what minecraft does
@rostikmogila3868
@rostikmogila3868 Год назад
Yes. And it seems wrong to me using only one of them, since UDP is better for some features than TPC. Voicechat or moving the playes in some games for example
@neonstrawberry
@neonstrawberry 2 года назад
You said "Surely, I can achieve the same thing right now" right as I noticed how long that chapter is.
@GamesWithGabe
@GamesWithGabe 2 года назад
Haha yea, the time I spent on it reflects how long it actually took me to code it. Crafting took a couple days, colored lights and custom blocks took a week, and multiplayer took 3-4 weeks :D
@Zukoloid
@Zukoloid 2 года назад
Threw this on while playing minecraft. I could listen to this guy ramble all day, seriously.
@maxpoppe
@maxpoppe 2 года назад
I love these types of video's just because it's a good way to get to know new interesting concepts
@framegrace1
@framegrace1 2 года назад
Crafting matching would had been better (and much faster) by using hashes. Will just be a hashmap search. A formula like sum((x^y*materialtype))%something would work for the key.
@GamesWithGabe
@GamesWithGabe 2 года назад
Ooh thanks for this insight Marc! I don't know why I didn't think of that haha, but I'll definitely be adding this to the code :)
@mrmaniac9905
@mrmaniac9905 2 года назад
@@GamesWithGabe Yeah just simply match the materials your crafting with a subset of "possible" recipes for the given materials, then just loop through that smaller subset of craftable recipes.
@mrmaniac9905
@mrmaniac9905 2 года назад
as Marc said, using hashmaps would do the trick. Just build a database at the start of the game (or once everytime you add new recipes) that contains grouped recipes based upon their ingredients, when you match all the ingridients that you have in your crafting gui with the "group" that uses said materials, then loop through all possible recipes inside that caches group. This should reduce from O(N) to O(log N)
@framegrace1
@framegrace1 2 года назад
@@mrmaniac9905 Was thinking on an even simpler way, with a continuous hash, you just have to store all possible recipes on a hashmap using sum(x^y*materialtype) as hash function. Then just start with a current hash of 0 and an empty crafting grid, everytime a material is added on a position, calculate (x^y*materialtype) add it to the current hash, and every time it's removed, substract it. After every click, just search the hashmap. If there's a matching recipe, it will be returned.
@mrmaniac9905
@mrmaniac9905 2 года назад
@@framegrace1 Ah, I see what you're saying, that's actually very smart. That in theory would work in constant time. I'm actually gonna implement that in my own game.
@m4rt_
@m4rt_ 2 года назад
4:45 the solution is do the calculation on your side, then checking with the server, and if it is wrong, the server corrects you, this is commonly known as rubber banding.
@thennoth2860
@thennoth2860 2 года назад
Client side prediction
@dealloc
@dealloc 2 года назад
Rubber banding is a side effect of client prediction that is incorrect from the server. You can avoid rubber banding with interpolation to make perceived latency less noticeable. Of course, this compromise also means that hit boxes aren't accurate and optimistic updates can cause data loss (i.e. crafted item wasn't received or verified correctly by the server) in high latency servers.
@LuisCassih
@LuisCassih 2 года назад
@@dealloc that's why the hit reg feels horrible in games like Valorant which is heavy on client prediction.
@dealloc
@dealloc 2 года назад
@@LuisCassih It will definitely will feel bad when you have a long latency. I don't know how Valorant client prediction works and when it kicks in. But a common practice is to use server reconciliation to solve desynchronization issues by sending a sequence number with the data, which can then be used to reconcile commands later on the client. Then reapply those commands that haven't yet been predicted by the client. That way it doesn't need to re-run commands that have already been predicted, while ensuring consistency with the server for both high and low latency players. This is how QuakeWorld (and Half-Life et el.) works.
@koye4427
@koye4427 2 года назад
The more technical term for rubber banding is rollback netcode, since if you do something the server doesn't like you get "rolled back" to whatever the server saw last
@danisob3633
@danisob3633 2 года назад
it feels weird to be following the game engine tutorial series and then seeing you here on the present with a different vibe. Good progress on the game! And the video is also a masterpiece
@Pedroxboy100
@Pedroxboy100 2 года назад
Dude, I love you. I really wanna see more of this game building process. Hope you all the best
@dingas5632
@dingas5632 2 года назад
Amazing video, thank you for explaining what you did every step of the way. Someone who is an amateur like me can understand everything you’re talking about, and that’s just amazing to me :) keep up the great content, loving these dev logs
@benpope10
@benpope10 2 года назад
Awesome video as always! I would love to see more in-depth technical videos on a single feature with those animations, you do a great job of explaining this stuff
@GamesWithGabe
@GamesWithGabe 2 года назад
Thanks benpope! The minecraft tutorial series that I'm creating should hopefully do just that :)
@oguzhantopaloglu9442
@oguzhantopaloglu9442 2 года назад
I hope you achieve your goals man all of this is really impressive I hope I will be a good programmer like you one day
@Soulis98
@Soulis98 2 года назад
You will be a legendary one.
@GamesWithGabe
@GamesWithGabe 2 года назад
I agree with Ozzy's script! Good luck with your programming endeavors, and I'm sure you'll do some great things :)
@oguzhantopaloglu9442
@oguzhantopaloglu9442 2 года назад
@@GamesWithGabe thank you
@oguzhantopaloglu9442
@oguzhantopaloglu9442 2 года назад
@@Soulis98 thank you
@oguzhantopaloglu9442
@oguzhantopaloglu9442 Год назад
@Buis Bo Going great! I had some mental issues lately but I have my big programming projects that I am constantly working on :)
@TitanTubs
@TitanTubs 2 года назад
This is so cool. I love the breakdowns of techniques and reasonings. Although you lost me when your started talking about feeding data to the gpu, because that's high level stuff there mate. I find It's hard going from some coding classes, game design c# and python to actually implementing and creating something all by yourself.. Great videos.
@Autumnly24
@Autumnly24 2 года назад
This could turn out amazing! I can't wait to see what kind of things you end up doing with it!
@gameo7
@gameo7 2 года назад
This was surprisingly easy for me to understand, especially the multiplayer and lag compensation segments!! Usually I really suck at understanding something like this but you explained it very well. :)
@darao99
@darao99 2 года назад
Your ability to simplify complex concepts is amazing. I hope to build that super power.
@metallicakevin1
@metallicakevin1 2 года назад
I've been following this series just because the vids randomly appear at my yt homepage. I finally subscribed, and I'm looking forward to the new project!
@devRat
@devRat 2 года назад
idk what engine you are using, but I have tried to clone the minecraft inventory system before. IT IS HARD. The amount of work you did to not only get its base functionality working, but even more subtle features is not unnoticed. You're a legend.
@ninjasploit
@ninjasploit 2 года назад
Ayyyyyooooo I saw this on my "home" page and I just knew I'd love it. Subbed at 00:07, this is gonna be a blaaaaaast
@komradesnoipah1036
@komradesnoipah1036 2 года назад
i learnt more in this video than i did in most of my ICT classes, amazing vid!
@linus3662
@linus3662 2 года назад
Omg, manim always makes me so happy to see! Good video!
@jixster1566
@jixster1566 2 года назад
Never thought I'd find the clearest explanation of TCP/UDP in a damn minecraft video. Well done!
@martinl6790
@martinl6790 2 года назад
Very cool project! Can't wait to see more
@wilebaldoalvarez
@wilebaldoalvarez 2 года назад
Thanks for your videos, really I learn a lot. Right now I’m not working as programmer but I have a plans to create a game and all this information will help me in the moment when I start to create my game. Thanks a lot.
@Daytonious
@Daytonious 2 года назад
Wonderful video! I'm not a game developer by any means, but the way you put the video together is very entertaining! I've subscribed and can't wait too see where you take the project! Don't push yourself though, your mental and physical health is much more important! Good luck with the game!
@synka5922
@synka5922 2 года назад
I have only the very barebones basics of coding so far, but this video still gave a ton of cool insights for the future!
@gersomwastaken
@gersomwastaken 2 года назад
Just found out about your channel, this content is really good! Please continue on making these!
@GamesWithGabe
@GamesWithGabe 2 года назад
I have no plans of stopping anytime soon :)
@Mr_Spaghetti
@Mr_Spaghetti 2 года назад
8:03 “240 seconds, that’s three minutes!” I’m learning so much from this video
@pumkin610
@pumkin610 2 года назад
180 seconds
@EddyVinck
@EddyVinck 2 года назад
Very good video! I don’t do any gamedev but I find these so interesting!
@Infinity-fj2li
@Infinity-fj2li 2 года назад
Making my complete own version of Minecraft is something I've really wanted to do as well, but I have very little programming experience. It's nice to see someone else actually achieving it though!
@ThibsWorkshop
@ThibsWorkshop 2 года назад
These devlogs are very good quality!
@pieTone
@pieTone 2 года назад
Holy its good to see where the project went.
@sid-bn2gy
@sid-bn2gy 2 года назад
Bro really had me watching the entire video without understanding shit, the explanations were awesome the video was even more awesome good job
@dergus8833
@dergus8833 2 года назад
really cool concept for a game!
@neoqwerty
@neoqwerty 2 года назад
Thank you robot overlords for shoveling me in this direction. I don't have the spoons to watch this right now (ironically, I'm learning to code a minecraft datapack and occasionally yelling at brackets i SWEAR I counted before) but it's now in my "to revisit later" playlist.
@Freddy-BA
@Freddy-BA 2 года назад
Your devlogs are really inspiring to small developers like myself. Please keep making these videos! 🙏
@GamesWithGabe
@GamesWithGabe 2 года назад
I definitely will, it just takes a really long time to make anything significant haha
@Freddy-BA
@Freddy-BA 2 года назад
@@GamesWithGabe yeah, that would make sense, haha!
@madebit
@madebit 2 года назад
This look awesome!!
@danilgaijin8366
@danilgaijin8366 2 года назад
Great! You're doing a great thing!
@FrozenSnowDropRoses
@FrozenSnowDropRoses 2 года назад
This is cool and I don’t know a thing about programming or game dev. 😂 Very informative, best of luck w the rest of the labor on this project
@j1_dev
@j1_dev 2 года назад
this is just awesome
@bradley1995
@bradley1995 2 года назад
I would love to see the tutorial detailing time, ticks, etc for multiplayer. Can't wait!
@hazelyokouji2005
@hazelyokouji2005 2 года назад
Underrated channel
@Raven319s
@Raven319s 2 года назад
Good stuff. I'm trying to make a LEGO game for myself. Coming from zero game dev experience, this stuff gets confusing/frustrating but then there are those brilliant moments of clarity when things work perfect. I'm currently trying to create a master flight template so I can just customize flight attributes and control ship specific animations.
@r.iyushofficial5318
@r.iyushofficial5318 2 года назад
Good job 👏
@Ioquackss
@Ioquackss Год назад
Love this! Instantly subscribed! Little suggestion for the future updates: maybe add some fancy shaders? Or at least an option to toggle on/off a RTX-style shading, to make the game pop off and look really beautiful?
@Aldraz
@Aldraz 2 года назад
This is amazing! Making your own game out of this is brilliant, finally someone has that idea! I've seen so much potential in these Minecraft copies devs make, but they never try to actually make a game out of it that would be better than Minecraft, something different. There's so many things I wish Minecraft would be like, but it never happened. From simple things like improved physics to more realistic crafting to making cubes smaller, so that there's a lot more options to create things and how they would look like. Also, congrats on making multiplayer possible, I bet it wasn't easy. UDP is the best choice and there are also different types of UDPs like RUDP. I just think about if 300 ms of buffering would be good enough for PvP for example. I imagine CoD MP has figured this out in much more complicated way. They are probably checking who fired first and what were the real locations on their client side, but somehow it has to calculate probability most likely. And there are also problems with hacking and all that crap. There also have to be the distance prioritization to sync player's location. Multiplayer is just very difficult to make. Anyway congrats on making your AO, that's very hard as well! I love the progress!
@GamesWithGabe
@GamesWithGabe 2 года назад
Thank you so much for the awesome comment! I do imagine the CoD devs have some insane code for multiplayer PvP (at least I hope they do haha). The multiplayer is still definitely a WIP in my game right now as well, so we'll see if I completely change it in a month or two 😁
@ItsGamein
@ItsGamein 2 года назад
Block story was really cool, it has its problems but I loved it when I played it years ago
@averagezing
@averagezing 2 года назад
This is all really cool. I wonder if you could do a similar video to your Technical Feat video on how 1.18 is a feat too, and how it's changed even more than we know about
@valentin4711
@valentin4711 2 года назад
your videos are amazing!
@sigurdvetti3659
@sigurdvetti3659 2 года назад
Legend! Keep it up!
@bradley1995
@bradley1995 2 года назад
Release the multiplayer background guide video!! Been so interested in all these topics and would to implement them myself. Cheers!
@eboatwright_
@eboatwright_ 2 года назад
Very interesting. I've done multiplayer before, (with an engine, and without an engine) but, I've never actually known the differences between UDP and TCP :)
@thennoth2860
@thennoth2860 2 года назад
Great work on this so far. At some point it would be good to see a non constant velocity when moving, using acceleration and deceleration, in Minecraft this is subtle but it makes a big difference. Another thing I can suggest is to work out the longest time a player takes to ping on the server and set the buffer time accordingly; if two players on the same LAN network have to deal with 300ms of ping it could be quite annoying. For a larger server you'd probably want to take the median ping of all players and set the time to that, so one player having a hugely high ping does not affect everyone else too much. Also, consider that players can cheat as the clients are just telling the server where they are going, the server is not confirming or denying whether this is possible or not. Some games solve this by only sending what inputs are being given and the server confirming what should happen, while the client predicts what it believes should happen.
@GamesWithGabe
@GamesWithGabe 2 года назад
My brother also mentioned adding a quick acceleration to the player controller haha. And I'll be adding some anti cheat mechanisms and stuff in the future, as well as some more intelligent buffer times for all the players :)
@s0fl813
@s0fl813 2 года назад
Feels like I'm watching a 3blue1brown video, great editing!
@GamesWithGabe
@GamesWithGabe 2 года назад
Thanks! I use the manim library for my animations, which grant Sanderson developed and the community had created a version based off of. So full credit to 3blue1brown for the awesome software :)
@silencedandshadowbanned7277
@silencedandshadowbanned7277 2 года назад
Thanks for the video
@Chamarel
@Chamarel 2 года назад
Really cool, you should make a tutorial on how to implement multiplayer in the java game engine!
@imJeNaiKe
@imJeNaiKe 2 года назад
Amaaazing! I personally love minecraft in the way you can build factories, but mods only carry it so far Interested in the way you will take this gamestyle
@johnwicked1132
@johnwicked1132 2 года назад
Do you play create mod?
@andrewsamoil8570
@andrewsamoil8570 2 года назад
great video
@tsalVlog
@tsalVlog 2 года назад
A full 3 minutes is 180 seconds; 240 is the windows default of 4 minutes. the true default is anywhere from 5 minutes to 15 minutes, depending on the RFC / standard you're going by.
@VoylinsLife
@VoylinsLife 2 года назад
you really inspire me to make a game from scratch like you do ( Not completly from scratch as I want to use OpenGL :p )
@justin-hurd
@justin-hurd 2 года назад
I would be very interested to see notch giving insight into this. That would be really cool
@Dorbellprod
@Dorbellprod 2 года назад
I've seen enough "I remade minecraft but this and that" videos. This is much more entertaining in my opinion.
@flamendless
@flamendless 2 года назад
I learned so much from this
@LioncatDevStudio
@LioncatDevStudio 2 года назад
Awesome :o
@maroso_
@maroso_ 2 года назад
awesome video
@Takehere
@Takehere 2 года назад
very cool !
@filipmajetic1174
@filipmajetic1174 Год назад
15:35 One of my best CS professors said "everything can be solved with enough layers of indirection"
@silvertakana3932
@silvertakana3932 2 года назад
just imagine how cool the modding community would be!
@neck-o
@neck-o 2 года назад
I always thought that the secret within multiplayer games is that the data you give and receive is from dedicated places in your place or country. Add to that some prediction, interpreting and compressed data, also perhaps cache like method.
@lancearmada
@lancearmada 2 года назад
So its been a while since i thought about this sort of thing so i might be wrong, but would the crafting recipe be faster if it just hashed what was currently in the table into a pointer that lead to the result of the recipe instead of checking the spaces?
@akhira.over.dunya99
@akhira.over.dunya99 2 года назад
the math parts and coding parts of this video is too smart for me to understand 🙃
@JabeGabe
@JabeGabe 2 года назад
I am not smart enough to understand half of what you were saying but it's super cool seeing it happen
@JimmySchlosser
@JimmySchlosser 2 года назад
Nice! Now I wanna try doing this! Lol
@Budder99
@Budder99 2 года назад
Finally, :D
@rykusengi4051
@rykusengi4051 2 года назад
That crafting table comment your very smart my sir bc I understand 0 of that info but I'm high and that sounds right too me
@projectjinc.5152
@projectjinc.5152 2 года назад
The fact this guy is taking the chance Mojang or Microsoft dont come and give you a: naughty boy message saying go to court now kid is brave You hav my respec
@vincentcasey
@vincentcasey 2 года назад
You could also translate the recipes to the upper corner then check.
@cc3
@cc3 2 года назад
I think using a hashset to determine the recipe would be more efficient if you were to have a large number of recipes
@synthcqt
@synthcqt 5 месяцев назад
btw if that's supposed to be seattle or tacoma on the internet map it's a bit off if it's supposed to be portland it's nearly there
@mmgmismas
@mmgmismas 2 года назад
17:00 this really sounds like idea I had basically minecraft + dont starve in short
@ninjabaiano6092
@ninjabaiano6092 2 года назад
I an Loving your *DigFabric* game. It very original.
@codegeek98
@codegeek98 4 месяца назад
I heard that on cellular connections, you should consider TCP for games, due to last-hop retransmit abilities being better than anything you could build yourself on top of UDP
@GuyApollo
@GuyApollo 2 года назад
Does it check the blank boxes on the input? Seems like that would slow it down a little. Your example implies it does. I'm just curious.
@theloader7579
@theloader7579 2 года назад
Nice
@justinbrown6433
@justinbrown6433 2 года назад
not sure but would adding categories for the recipes and grouping them like wood item iron etc?
@hooolas1
@hooolas1 2 года назад
Wow! Congrats for your amazing work! I'm stuck with inventory's GUI. How did you deal with this?
@GamesWithGabe
@GamesWithGabe 2 года назад
Thanks! And for the inventory GUI I just used a couple of for loops and some ImGui style logic haha. If you've ever worked with a library like Dear ImGui it helps solving these types of problems. And if you take a look at the drag and drop implementation in Dear ImGui, you can definitely see where I get inspiration from :)
@bucky5269
@bucky5269 2 года назад
I like your funny words magic man
@t4g2s
@t4g2s 2 года назад
Everyone says that the crafting could be made better by hashes but I think the real optimization would be this: When we are checking recipes that could be crafted in different shapes( torch for example) we should firstly somehow normalized the recipe. In this case the great normalization would be shift everything to the left and to the top as much as possible and then only checking one recipe and not different combinations
@zarodgaming1844
@zarodgaming1844 2 года назад
" hopefully in 1080p " me in 240p * awkwardly watches to the side *
@goobertfroobert5572
@goobertfroobert5572 2 года назад
I hope they implement RGB lighting into vanilla at some point in the future.
@zperk13
@zperk13 2 года назад
Did you use 3b1b's python library for the video animations? (Like the crafting animations)
@epiccturtle
@epiccturtle 2 года назад
now i realize how much effort was put into those free "minecraft" games on the app store when i was 10
@nolan412
@nolan412 2 года назад
Multicast sounds nice.
@givowo
@givowo Год назад
have you thought about adding an fov slider? the fov in the footage is too zoomed in imo (i usually play games with 120 fov)
@PantherHytale
@PantherHytale 2 года назад
yo try making hytale lmao. Especially the PVP shown recently. It looks fun to play with and good video! I can imagine implementing those things very tough..
@TinyDeskEngineer
@TinyDeskEngineer 2 года назад
For the "recipes that don't take up the whole grid" couldn't you just program it so that the items in the grid are shifted as much as possible into the top left corner, and then check recipes in that way so you don't have to try the same recipe multiple times? Also, recipes could be sorted into categories based on the dimensions they take up, and then you could search for only those specific ones.
@g45h96
@g45h96 2 года назад
I would check minecraft mods like fastcrafting or fasttables to see how some mods devs improved crafting overhead. But just off the top of my head (plc programming, not games, but still) I would think assigning numeric item id's which can be put into an array to represent a recipe, and real time conversion of the gui into a an array to cross-check.
@g45h96
@g45h96 2 года назад
Making a database builder could simplify shapeless crafting by generating multiple recipes (9 in the case of a stick) at the cost of waaayyy more recipes to cross check. You could possibly categorize the recipes by the first item id encountered to reduce the number of recipes the engine needs to cross-check?
@dj13579100
@dj13579100 2 года назад
When port forwarding for a private minecraft server you have to use both tcp and udp
Далее
The Tyrannical Mods of Stack Overflow
12:15
Просмотров 373 тыс.
The last one surprised me! 👀 🎈
00:30
Просмотров 5 млн
How Minecraft ACTUALLY Works 💎⛏️
46:02
Просмотров 1,4 млн
I Coded Minecraft in *Only* 3 MONTHS!!!!
8:56
Просмотров 154 тыс.
Optimizing my Game so it Runs on a Potato
19:02
Просмотров 451 тыс.
I Coded a Video Editor (and it kind of sucks)
18:35
Просмотров 232 тыс.
This is NOT Minecraft... ?!
12:14
Просмотров 1,9 млн
Better than Adventure: Minecraft Beta Persisting
19:51
Просмотров 195 тыс.
Minecraft's most Addicting Modpack
15:41
Просмотров 298 тыс.