Big thank you to everyone who has contributed on the GitHub so far! github.com/Hopson97/open-builder A few issues are on the github.com/Hopson97/open-builder/issues page for those who want to get started contributed, hope you all enjoy the video! Thanks!
@Sirvierl0ffel4 жыл бұрын
Why isn't the bell working on your channel?
@stacyardus38984 жыл бұрын
TheLappinator *•KZbin*•
@quinn45714 жыл бұрын
Hopson Nice video👌
@Danidev4 жыл бұрын
This is so cool! Can't wait for the next episode
@KelvinatorIsTaken4 жыл бұрын
Wow u is here
@gael84 жыл бұрын
@@KelvinatorIsTaken no
@mwguy4 жыл бұрын
Oh, hello milk man
@Warwipf4 жыл бұрын
I bet you can't make a 4d multiplayer game
@ERN468.4 жыл бұрын
@@Warwipf 5d
@TheBcoolGuy4 жыл бұрын
I admire programmers who lean as little as possible on engines and frameworks and just create their own things like this. It's very impressive.
@Sharku54 жыл бұрын
Yeah!
@petlahk41194 жыл бұрын
I'm actually here because I wanna learn to program during the ongoing pandemic and make a game that I've had floating around in my head, but I'm wary of getting myself too backed into a corner by existing engines and frameworks.
@LegoDinoMan2 жыл бұрын
@@petlahk4119 How’d that idea end up?
@anon1963 Жыл бұрын
@@LegoDinoMan probably idea was too complicated and was scrapped
@LegoDinoMan Жыл бұрын
@@anon1963 Such is game dev life.
@ViralVibesReal4 жыл бұрын
Friend 1: "Let's play Minecraft" Friend 2: "But we don't have any money" Friend 1: "Let me code it real quick I'll be back"
@trinity_null4 жыл бұрын
Better title: How to pirate Minecraft classic
@Hopsonn4 жыл бұрын
How to pirate cheap, offbrand Minecraft classic
@keastie66714 жыл бұрын
@@Hopsonn Minecraft: Tesco Value Edition
@diddlenfiddle73114 жыл бұрын
Nah, he's making it in c++ (I think) much better than in Java
@stacyardus38984 жыл бұрын
@@diddlenfiddle7311 yeah C++, the thing is he is making the server in the same language as the client, so he a smart boy. i make client in C# and server in C++. its 100% doable, trust me. it just makes you wanna die a little sometimes, lol but great cos i get to use my 2 faverout languages :D
@garorade4 жыл бұрын
Yeah but everyone can agree java is better than c++
@stacyardus38984 жыл бұрын
Your earlier videos where you make an engine in a week, and the 5-6 minute series videos "creating minecraft in openGL part one" and so on, have been one of the biggest drivers for my thoughts and actions and goals in game design, i dont want to just thank you and compliment you like one usually would, i just want to say that your work reaches a part of my soul not many things do. that being said, thank you for sharing your journeys in programming with us. and Keep us posted cos i wanna see where this goes q:D
@nicks47274 жыл бұрын
The only problem with your channel is that you don't have that silver play button yet
@fbob9874 жыл бұрын
But there was terrain in the thumbnail... we've been cheated lads
@Hopsonn4 жыл бұрын
I been found out oops 👀
@ammarassi70954 жыл бұрын
No Unity or any other engine You're a legend
@ammarassi70954 жыл бұрын
@killmoo No,he is using C++/OpenGl
@cacnus4 жыл бұрын
@killmoo He is using Unity, but not in this series.
@BradenLehman Жыл бұрын
This is looking really good! Once you implement procedural terrain generation you'll reduce the number of packets you have to send initially because instead of the server sending the position of every block to the client it will only have to send the world generation "seed" (a number) that the client can use to generate the initial pseudo-random block placements. After that, the server will only need to tell the client about blocks that were added/removed manually by players 🙌🙌
@Pipin064 жыл бұрын
The Legend is back
@_alnmgdev52362 жыл бұрын
man. this is the best minecraft recreating i ever seen
@SuperZachgames4 жыл бұрын
youre channel really inspired me to get into coding again. thank you very much :)
@giganooz4 жыл бұрын
You may have accidentally added "WORK WEEK IN MY LIFE: my 3 am to 12 pm job " by "Clancy Burke" to your "Making minecraft with OpenGL" playlist
@ThatGuyDownInThe4 жыл бұрын
this is beautiful man, really.
@floatingpointerror554 жыл бұрын
I thought that you wouldn't update anymore. Anyway, this channel has been an inspiration and thank you for this
@jackson11244 жыл бұрын
I saw people in the last video talking about the packet kick exploit. You realize replacing every block in the map with air is also really possible.
@Kevroa14 жыл бұрын
Woah.. a second episode within 1 month!?!
@Blaxpoon4 жыл бұрын
The music... I see you are a chosen one, congratulations on reaching the edge of internet, I wish you luck for your project and I am sure you will achieve it
@raduhabinyak68604 жыл бұрын
For the block modification you could just store all connected clients or at least all withing a certain proximity and just have one client send the data to all especially when the server is busy so goast blocks don't happen because then all clients would have the most up to date data no matter how backed up the server is and even if the server goes offline, basically pear to pear data transfer. and it would also a low you to play with others while in the same network.
@lengors16744 жыл бұрын
He can still play with others while on the same network even with a dedicated server, and p2p is a lot harder to make sure that everyone is on the same page
@cryptonicchronic81112 жыл бұрын
i just found this series, youre a god send brotha!!!! looove your work inspiring for someone looking to get into game developing
@et1184 жыл бұрын
These videos are very intresting to watch. Im looking forward to the next video.
@beron_the_colossus4 жыл бұрын
Oh yeah it's all coming together
@beron_the_colossus4 жыл бұрын
Great work btw, looks like the finished product will be amazing!
@johncola16344 жыл бұрын
Great work, it's awesome to be able to follow along with your journey.
@ctenebrous68883 жыл бұрын
Hi, love your videos. Wanted to mention though you probably don't need the server to send down any block data from the generated world. If the world is deterministically generated, given a seed that both client and server have, the client should be able to independently figure all the blocks and arrive at the same conclusion. All they need from the server is the world seed and of course a stream of block changes for any that are not deterministic. Like players placing and breaking.
@user-qv9ho1lj3z4 жыл бұрын
I love this series so much
@barry_crisp4 жыл бұрын
Super hyped for the next one, great progress so far!
@alessi42494 жыл бұрын
It would be great if you could include block physics. Many voxel clones don't have this and it would be a great exercise and really make yours stand out great job
@Hopsonn4 жыл бұрын
What sort of physics?
@alessi42494 жыл бұрын
@@Hopsonn I was thinking primarily liquid, sand, perhaps adding physics to have floating objects fall however it could be expanded in many ways you could have physics of portals perhaps it could be turned into a FPS where they're would be grenade, blast physics bullet drop. It depends how far you want to take the game and in what direction. But I think it's a great series you're doing and these could make for great videos. Focusing on the multiplayer aspect there's some great detail in having an efficient, reliable and anti-cheat netcode in implementing any of these ideas. Keep it up!
@MaxMatti4 жыл бұрын
When adding compression all you're doing is essentially pushing the problem further into the future rather than actually fixing it. Later when you add chests or books or other large structures it will come back. It think you should either use an own (larger) queue or implement a system where you can just render the parts that are already there while waiting for the remaining chunks.
@stacyardus38984 жыл бұрын
when there are complicated structures available then only chunks with the structures will be big, the rest will still be small, and the structure will be smaller still because it would have air inside or around it, and chest data is sent as a request for a chest id, and then the chest data is sent, so chest data not in chunk, and chest id is made of the chests world position. boom done, :D
@lengors16744 жыл бұрын
Adding chests won't really increase the size of the compressed data that much, the only way that would happen would be if every block is different from the next, which in a normal game world won't happend ever, and most of the blocks will actually be identical to the previous one (and this problem could me mitigated with more powerfull compressing algorithms). But yes, I agree that he should render the chuncks as soon as he receives them!
@n0n3x4 жыл бұрын
I love your videos, because you are coding a big game and explaining us what u do at the same time! I love to watch ur Videos! Go on!
@LideCantFly4 жыл бұрын
A very very great video. You really inspire me to work on stuff with all that power you put into that video!
@holden_fella4 жыл бұрын
still better than CubeWorld 1.0
@SPACEGAMESstudio4 жыл бұрын
This is so cool. nice job
@CharIie834 жыл бұрын
brilliant, inspiring
@theshinro4 жыл бұрын
FF9 - Dali theme
@jakehall444 жыл бұрын
Love these vids man.
@EpicVideoGamer77712 жыл бұрын
5:34 *cursed diagonal block placement*
@SDFTDusername4 жыл бұрын
yes! thanks for part 2
@hoseja4 жыл бұрын
Also be wary of network MTU. If your packets are too big (32kB definitely are), they get split up and reassembled, which costs performance.
@creativity51554 жыл бұрын
I can't wait for the next episode :D
@rhuib4 жыл бұрын
love this
@ianminnis484 жыл бұрын
when you can't afford Minecraft but you're smart af
@MrOnlineCoder4 жыл бұрын
Good job, waiting for next episode, especially the scripting part and how you would share same sctipt data between client and server)
@Rekongstor4 жыл бұрын
You can try to compress and send more than one chunk. Maybe it would be helpful to compress all surrounding chunks. Also you want to start collecting chunk updates after the moment you started transmission to the client, and after the operation was completed you can combine all the chunk updates in one but big update, compress this thing and send this data to the client until the latency would be really low. Maybe you want to compress every queue of chunk updates for each client at the runtime instead of sending each chunk update separately.
@alexpaww4 жыл бұрын
Couldn't you just have used a common compression algorithm like gzip?
@orocimarosay14474 жыл бұрын
I guess yes but it might be better to use a custom thing for custom data because for example you know for a fact that 99% of the time the chunks are going to be half filled with a lot of air and you might want to take advantage of that.
@dekrain4 жыл бұрын
@@orocimarosay1447 The DEFLATE algorithm (used in gzip, zlib and ZIP) already takes care of that (uses something very similar to the RLE).
@alexpaww4 жыл бұрын
@@tarunchand3159 but it's strictly worse than gzip, and gzip can be made to run in a few minutes using zlib
@jonathanberkeley41094 жыл бұрын
He could make many aspects of the project far easier with various libraries and plugins, though I get the impression that this project is supposed to be as vanilla coded as possible, with the exception of SFML
@eliaswenner78474 жыл бұрын
I guess his custom alhorithm is faster for what it is ment for.
@WaffelEdits4 жыл бұрын
episodewe uwu
@chrismorris52414 жыл бұрын
Keep up the good work.
@vitiacat4 жыл бұрын
Very cool!
@iDontProgramInCpp4 жыл бұрын
Why not send the compressed data through ENet? This reduces the overhead from other libraries. Additionally, you can use CRC32 checksums and enet_compress_with_range_coder, which is definitely useful.
@RamiSlicer4 жыл бұрын
Nice!
@SuboptimalEng4 жыл бұрын
This is epic
@kristupasantanavicius90934 жыл бұрын
Your explanation for why chunks were slow is incorrrect. The real reason is enet. The library is built on top of UDP, which is a lossy and unordered, meaning packets could be dropped and they are not guaranteed to arive in the order they were sent. Enet, however, builds abstractions on top of this to guarantee losless and ordered transmission. What this means is that if the server sends packets A, B, C, D; and the packet A is dropped, client will not receive B, C, D until packet A is received. Enet does provide an option to disable this functionality for specific packets being sent. ENET_PACKET_FLAG_UNSEQUENCED is the flag you want to set when sending a packet.
@coxcopi4 жыл бұрын
Yaaaas finally!!
@garorade4 жыл бұрын
Very nice
@aleksitjvladica.4 жыл бұрын
I was patiently waiting for this two years! I will give you mental support if you need, I truly want to see this video game bigger, better, stronger, since MineCraft is unplayable trash. Please give Me feedback so I know you read this.
@Hopsonn4 жыл бұрын
Next episode potentially coming out Friday 👀
@aleksitjvladica.4 жыл бұрын
Mate, I can't believe, it's too good to be true, I love you
@yh_hat_trick4914 жыл бұрын
That thumbnail tho
@BenjaminGoldberg14 жыл бұрын
Instead of having the server store uncompressed chunks, and compress them as they are transmitted, why not have the server store blocks in some form of compressed data structure, and throw away the uncompressed data? The first such structure which comes to mind is an octree, which can be thought of as a three dimensional version of run length encoding, but where the "length" doesn't need to be stored/transmitted, since it's implied by the depth in the tree.
@philipbrunn87064 жыл бұрын
I wish i could code like you.
@stacyardus38984 жыл бұрын
start, trust me, start. heres your tasks , each one will make you better and better at programming because they get harder and harder, until you know enough to start what learning by your self TASK-1: Hello world. TASK-2: ask for user input and say hello users name TASK-3: asks for 3 inputs does random number and picks one. TASK-4: Read file, display file, ask for input, write file out with input added TASK-5: simple calculator plus, devide, minus, times TASK-6:Quiz game, ask question check input, correct next question, wrong backto start TASK-7: you get the idea, the rest of journey is yours friend
@thecakeisalie63924 жыл бұрын
@@stacyardus3898 Well anyways they're years and years of learning and programming to do such thing as in the video, you really must be that type of person, bcs there're a lot of people who give up in the middle of the progress...
@stacyardus38984 жыл бұрын
Byeffel 100% agree. Wich is fine, cos if some people arnt interested its okay. You can do what you wanna do. And thats great, its called freedom. :D and right now we have it. So if you wanna try programming, try, if you change your mind, stop. Do what you wanna do :D just dont make me pay for it ahahahahaha.
@thecakeisalie63924 жыл бұрын
@@stacyardus3898 Oh, of course I'll do whatever I want, but don't try to sneak out, you're involved in this now.
@stacyardus38984 жыл бұрын
Byeffel involved in what?
@fleskimiso4 жыл бұрын
Tho amazing!
@pb-vj1qs4 жыл бұрын
I love it!
@redandcyanpower4 жыл бұрын
POGGERS!
@huntserston35794 жыл бұрын
This seems to rum better than minecrafts multiplayer
@Hopsonn4 жыл бұрын
It's an unfair comparison, Minecraft is doing a lot more than what this program does, so naturally would be slightly slower, but more what it does, minecraft is a pretty well running game
@huntserston35794 жыл бұрын
@@Hopsonn you have a point
@stacyardus38984 жыл бұрын
@@huntserston3579 plus minecraft usually works over far distances, hopsons game is working on the same machine, and obvoisly local loopback times are way faster then wlan.
@huntserston35794 жыл бұрын
@@stacyardus3898 never really thought of that I don't really know the code in minecraft because I kind of just lack the knowledge of java and just assumed that c++ was jusf fasy
@stacyardus38984 жыл бұрын
Huntsers TON c++ is alot faster, as in the program runs faster the java, but network and internet speeds have nothing to do with the program, so yes c++ is faster then java, but the internet is what it is :p
@bidkonic4 жыл бұрын
Have you ever considered doing OpenGL tutorials? I feel like yours would be really easy to understand. I tried TheCherno's but I can't understand anything he says.
@Hopsonn4 жыл бұрын
I did try to make some before but was not very happy with the quality of my own code and didn't want to promote these bad practices to other people. Besides, there are plenty of other opengl tutorials out there. Have you seen the ones by ThinMatrix? That's where I originally learned from.
@bidkonic4 жыл бұрын
@@Hopsonn I have seen them, however I haven't watched them as they were in Java. I guess it shouldn't really differ from C++. I could give them a try :)
@Hopsonn4 жыл бұрын
@@bidkonic Yeah I managed to follow in C++, it is basically exactly the same from an OpenGL code point :)
@KALTBLUTWOLF14 жыл бұрын
Did you just put a block at the corner of another block at 5:35? Your game already has more features than MC lol
@lal124 жыл бұрын
I think instead of using ENet (over UDP) you just should have used a TCP connection, you wouldn't have run into that issue. Yeah for some realtime games there might be issues, but I personally think they would not have been any issues for you. (AFAIK Minecraft PC only relies on TCP). And especially for getting started this might have been the better choice. If you really would like to get realtime data faster it would be probably a good idea to use TCP for the larger data like the chunks and a UDP based connection for player position and so on. Obviously compression should be used anyway.
@Hopsonn4 жыл бұрын
I think TCP would have had the exact same issue
@lal124 жыл бұрын
@@Hopsonn some googling shows that the same option actually also applies to TCP, so I assumed wrongly there. However I wrote many different networking programs (for linux) transfering much more data. The ones I remember on the top of my head are actually a TCP program transfering a firmware update, a TFTP Server (UDP) and a protocol which is purely ethernet based (directly above ethernet layer, so no IP or transport layer (TCP/UDP)). All of them handled transferring multi megabyte data very well. So I guess it is either the way you handle the packets or it is the way ENET handles the packets, what causes the problem.
@lal124 жыл бұрын
Of course it also might be a completly different problem. Did you investigate the problem it with a packet analyzer like Wireshark?
@tlacmen4 жыл бұрын
I had similar issue with enet. It was able to send only few KB/s and started dropping packets afterwards. It perhaps is possible to fix it with just some configuration options, I do not know, but I did not care any more because I also wanted ipv6 support, and so I wrote my own connection (and optional reliability with guaranteed ordering) on top of udp mysef. I can now handle 12 MB/s which is the limit at where the server is hosted. However, I would not recommend doing that this early in development. It took me several weeks to make it work good. You may look at it here: github.com/ucpu/cage/blob/master/sources/libcore/network/udp.cpp for inspiration (it is part of a much larger project, so not suitable for integration). BTW, most operating systems allow to enlarge the buffer: search for SO_SNDBUF and SO_RCVBUF, but again, I do not know if that can be done when using enet.
@silviogames4 жыл бұрын
Hey how about you compress a chunk and then send either the uncompressed or the compressed. Whoever of those two is smaller. So you will always send a max size that is equal to the uncompressed chunk. Since you are compressing all's chunks anyway, this should not add an overhead
@imlowercasebtwalso4 жыл бұрын
arround the end of the video, he builds a tower of grass and then places a grass block diagnolly????
@Z_Z.t4 жыл бұрын
Can we have marching cubes collision?
@alizardguy3 жыл бұрын
nice
@cringyclips7774 жыл бұрын
I wish I could code
@Raizazel4 жыл бұрын
I'm a genie! Wish granted! Now you are able to code, you just need to follow some random tutorial on how to make any language say "hello world" and keep coding until become good at coding when you reach that point just keep coding, it's fun.
@stacyardus38984 жыл бұрын
i am also genie second! i tell you this is correct! and along the road always compare yourself to yourself a week ago. and never compare your programming skills to people who are 4 years ahead or even 3 weeks ahead of you. after hello world you should do a dice simulator or something, to learn random numbers and if statments, so if random number is 6 then say 6 or whatever. :D good luck
@ajen0034 жыл бұрын
i'm the guy that tried to implement gamepad support and failed
@orocimarosay14474 жыл бұрын
Also where have you learned networking from ? I would like to try it miself
@stacyardus38984 жыл бұрын
google search [language name] tcp/udp example. or anything along those lines, its how i learned
@Hopsonn4 жыл бұрын
Multiple resources and a few months of random experimenting. Started off by making a terminal chat application that used tcp, then udp The made a few other random projects like pong using sockets etc Starred this project when I was confident enough to do such a thing. (which was about 3 or 4 months)
@sleebyrose4 жыл бұрын
2:00 array of bloq ITs.
@ThatGuyGEWP4 жыл бұрын
Saw this shit clicked on it right away
@orocimarosay14474 жыл бұрын
I think your oop manner of doing things is getting out of controll why do you need a ray class ? You are probably just going to use it only once or twice but you add a lot of code and I don't find it more convenient to read. I am not hating here because I love your videos but this is just my personal opinion.
@Hopsonn4 жыл бұрын
Believe me man, I try very hard to get out of control :P I actually started this project in ~November but started again in December, simply because my OOP has gotten out of hand and I was like "Nope nope nope this is terrible" and started all over again. Since then I have been very careful about what to make a class and what to not, and have been trying so hard to NOT get out of control with this, and tbh I think the code has become a lot more minimal as a result of this. (For example, I haven't bothered creating a bunch of rendering abstractions [eg, "ChunkRenderer" and "EntityRenderer" etc] and have just kept it all in one place in the Client::render function) In some cases, it has made creating this project a bit slower as it means I am more careful with code design decisions, but it is worth it in the end. But you are right, I don't really need a ray class at all, and I have no reason why I made one except it is "what I have done in the past", so I probably will remove that and whack that in place of where the block editing code is. Thanks for watching!
@orocimarosay14474 жыл бұрын
Some friend of mine recomanded me to use c from time to time so that I can concentrate more on the the real problem and less on what abstractions to make
@Hopsonn4 жыл бұрын
@@orocimarosay1447 Yeah definitely. It's been a really good way to make things easier to deal with. I find oop a lot of the time just sort of "blocks" certain solutions to problems, but just keeping everything together rather than spread over 182818 files has made life a lot easier and the code more easy to follow
@stacyardus38984 жыл бұрын
@@Hopsonn use a simple function or something instead
@stacyardus38984 жыл бұрын
@@Hopsonn make sure to be careful, because if you end up with a main.cpp that is 86KiB and 4 thousand lines long, which houses your entire program, your gonna be in for a bad time. so its all about finding the perfect ballence between to much, and just enough. like all things :)
@bringmichzumlicht44904 жыл бұрын
:)
@stacyardus38984 жыл бұрын
:)
@williamv.42344 жыл бұрын
Why not just use unity or any other game engine?
@Hopsonn4 жыл бұрын
Because I enjoy creating things from scratch a lot more than using a game engine. Additionally, one of the goals of this project is to learn how how all this works, and doing it myself and working out how different systems fit together is best way to do this for me.
@elektrikliklavye84064 жыл бұрын
Which ide?
@Hopsonn4 жыл бұрын
Visual studio
@halted_code4 жыл бұрын
block updates shouldnt be sent to all players, only the players that have that chunk loaded, with just your self it doesnt matter too much, and probably with less than 10 people it wont impact the server performance too much, but get enough players breaking or adding blocks, and you will start to see lag, you want to send the least amount of data as possible, further block updates shouldnt be done by the players, this can create a game vulnerability down the road with dupes, or greifing of protected spaces should you implement that, you might want to set up some sort of protocol for client server interactions, you should probably have a few messages at minimum: block update ( from client to server), Chunk fetch ( from client to server), Chunk (from server to client), block update accepted (from server to client), block update denied (from server to client), reload chunk x (from server to client). This way you can ensure that the updates are done by the server, and that the server can send the least amount of data over the network as possible, while still ensuring that all players that need to update do, this can also help with race conditions, what happens if 2 people try to place 2 different blocks at the same coordinate? with a well set and documented communications protocol you will have time stamps of each action and can determine which happens first.
@neelixchicote17764 жыл бұрын
How can i download it
@Hopsonn4 жыл бұрын
Atm you have 2 options 1. Download source code and compile (I have a guides on how to do this in the github repo) 2. Join my discord server, I regularly post random updates on it and test out multiplayer stuff with people
@marceid35784 жыл бұрын
Second
@kholland42354 жыл бұрын
Dude this is impressive. Keep it up. Also if you wanna check it out I've been working on something similar in JavaScript (albeit much poorer in quality; the core engine is pretty broken) -- kholland4.github.io/mc4/ -- any feedback would be appreciated
@benkyd78744 жыл бұрын
First!
@garorade4 жыл бұрын
Wtf short
@doot31224 жыл бұрын
A.K.A making a minecraft rip off
@JustSomeAussie14 жыл бұрын
why does it sound like you have something in your mouth
@Hopsonn4 жыл бұрын
Not sure what you mean :(
@JustSomeAussie14 жыл бұрын
@@Hopsonn I don't know... Just kind of sounds like you've just been to the dentist and you still have gauze in your mouth.
@Hopsonn4 жыл бұрын
Thanks for the kind words
@JustSomeAussie14 жыл бұрын
@@Hopsonn Not trying to be an asshole. Just telling it how it is. Hey I like your videos, though. :)