Пікірлер
@lln6123
@lln6123 2 күн бұрын
A very big thank you, I was able to rebuild it in my own little 2D engine and saving it as bmp. Next will be something like using Fragment-Shader instead saving and loading the image all the time...
@DobinSergei
@DobinSergei 26 күн бұрын
It would be nice to add one rule to algorythm. Before all make a mask of bytes, with sizes of map. Using on it a diamond sqare algorythm, with height range = 0..1, we get natural looking areas. Now, we do default diamond square generation of map. But we using not constant rougness, instead we control it with our premade mask. It makes more interesting heights variation. With smaller regions more rough heights variation, and with more steep and smooth plains and hills overall.
@NikoKun
@NikoKun Ай бұрын
Neato. The maps this generates remind me a little of the level design from the old Sega Genesis game Sub Terrania.
@theHiddenStone
@theHiddenStone 2 ай бұрын
Reminds me a lot of the old C64 game Ancipital by Jeff Minter. This is a good thing.
@romeo9015
@romeo9015 3 ай бұрын
You are my FAVORITE KZfaqr rn. I’ve been playing pygame recently and your videos have been instrumental for visualizations.
@andisarifi5805
@andisarifi5805 5 ай бұрын
great video!
@sushismitcher225
@sushismitcher225 5 ай бұрын
It's really cool, but I'm having performance issues. I'm probably going to create a chunk system so that the tiles only have to check nearby tiles, but I'd love to learn about other optimisation methods. Great video!!
@Dent42
@Dent42 5 ай бұрын
6:17 I thought the point of fractal noise was that it looked "similar", independent of the zoom-level? Is this not the same as 1/f (a.k.a. "pink") noise? (Very informative video, btw!)
@marcuthdev
@marcuthdev 6 ай бұрын
14:00 como você fez aquele ruído ficar assim? Estou há alguns dias tentando fazer algo parecido em TypeScript, mas sem sucesso. É para gerar cavernas em um jogo como Minecraft 2D
@lastvirtualdomain
@lastvirtualdomain 6 ай бұрын
im doing something wrong, the edges are great... but at large scales.. it looks mostly square.
@umtbmt2395
@umtbmt2395 6 ай бұрын
Thank you for your tutorial, but i don't quite get it what's the difference between step and iteration?
@WhiteBoxDev
@WhiteBoxDev 6 ай бұрын
I use the two terms interchangeably.
@llpBR
@llpBR 6 ай бұрын
I was looking for a different algorithm to make my maps. I've created one from my mind and necer thought it was a cellular automata also. This one is way simpler and effective. I'll try and it!
@monkey7218
@monkey7218 7 ай бұрын
Hi! Great video :D I know this is quite an old video by now but, do you know why you get quite "jagged" walls a lot of the time? Any clues on how to fix that?
@sdbadik
@sdbadik 3 ай бұрын
For every wall cell, try to apply this: If the wall has 0 neighbors to the left or right, destroy it. If the wall has 0 neighbors to up or down, destroy it as well.
@hatac
@hatac 7 ай бұрын
What happens if the four corner values are the same? I presume you get a flat sea bed, 'swamp', plains or plateau. This gives a uniform sea level. How would you get a highland lake or pond? I presume that would require another algorithm with added passes.
@LKamodon
@LKamodon 7 ай бұрын
Great video! At 8:55 it was a bit confusing seeing the whole grid being re-generated from scratch as you narrated "you will notice as the iterations increases", maybe you could have increased the iteration counter by pressing 6 multiple times instead. I don't mean to be rude, just trying to provide a bit of constructive feedback. Thank you for making the video.
@WhiteBoxDev
@WhiteBoxDev 7 ай бұрын
Thanks for the feedback! Since the demos are not scripted like the rest of the video, my error-ridden brain takes over and thus we see some explanation quirks.
@svenskazengrodan
@svenskazengrodan 7 ай бұрын
I really appreciated all your map generation videos. Very pedagogical.
@daka.notatp
@daka.notatp 8 ай бұрын
i followed the tutorial... and it works! but my maps are mirrored diagonaly, from upper left to bottom right, anyone knows why?
@Sketchaphone
@Sketchaphone 8 ай бұрын
Thanks for demoing all these different techniques. It's really useful to compare the difference in terrain generation methods for my use cases
@WhiteBoxDev
@WhiteBoxDev 8 ай бұрын
No problem, they were fun to make.
@Sketchaphone
@Sketchaphone 8 ай бұрын
what a simple yet effective tweak to generate landmasses. I was looking for different techniques for generating terrain and I'm delighted to see that a modified floodfill does the trick
@sergodobro2569
@sergodobro2569 9 ай бұрын
Respect to pseudocode!
@PolarTop6260
@PolarTop6260 9 ай бұрын
bro this channel is so underated, this channel teaches you procedural generation methods you might of never heard of, that are simple to understand and looks very good, and also teaches you how to implement them
@hamsterbyte
@hamsterbyte 10 ай бұрын
Very interesting algo. I'm curious though, did you try any aside from exponential decay? Perhaps logarithmic, linear, or quadratic? I'm not suggesting there is anything wrong with this implementation as it is really quite clever, I'm really more interested in how the decay would fall off if it were implemented with another algo. Gonna throw you a sub for getting me thinking. Great job.
@NathoSteveo
@NathoSteveo 10 ай бұрын
Awesome video mate thanks
@GbyP
@GbyP 10 ай бұрын
I really needed this so I can finally understand my CS projects for class
@francescocarbone8466
@francescocarbone8466 10 ай бұрын
Best work.
@felipecruz9567
@felipecruz9567 11 ай бұрын
nice explanation
@WhiteBoxDev
@WhiteBoxDev 11 ай бұрын
After reaching the 2nd square step at 4:45, I make a handful of manual arithmetic mistakes. I'm sorry about this! Thank you to the people who did the math and commented. My solutions of <6, 7, 7, 5> should actually be <4, 5, 5, 3>. Similar situation with the 2nd diamond step at 5:34. Please follow the algorithm as explained and your answers will be correct. Disappointing mistake.
@jamesmunroe6558
@jamesmunroe6558 11 ай бұрын
You lost me at 5:23. "The math for calculating each of these values is the exact same as before." Only with our new squares, we have the average of the corner values for x as (2+4+6+5)/4 = 17/4 + R, for y as (4+8+5+4)/4 = 21/4 + R, for z as (6+5+5+4)/4 = 20/4 = 5 + R, and for w as (5+4+4+1)/4 = 14/4 = 7/2 + R. Am I missing something?
@WhiteBoxDev
@WhiteBoxDev 11 ай бұрын
Yes, you are correct, I made some arithmetic mistakes while doing the calculations manually. I'll post a standalone comment about this. Thank you.
@jamesmunroe6558
@jamesmunroe6558 11 ай бұрын
@@WhiteBoxDev OK thanks, I'm glad I wasn't off the beam - I was worried I'd messed up. I'll stay tuned for your comment so I can complete the exercise.
@gokudomatic
@gokudomatic 11 ай бұрын
I find your work very interesting. Thanks for making those videos. I'm trying to implement a credible infinite world in Godot. I have already a basis, but I struggle to make real continents and oceans. And there's the topic of lakes and rivers that I didn't even begin to think about. That's why your videos are giving me helpful hints. Extra hints for my specific goal would of course be very welcome, as I'm still a real beginner in procedural worlds.
@WhiteBoxDev
@WhiteBoxDev 11 ай бұрын
Good luck with your projects! I suppose the best hint I can give to beginners is that procedural generation is never about just one perfect algorithm or method. A generated world is built with all kinds of algorithms layered on top of each other. The result of each layer can be interpreted by the programmer however they like. It’s all about creative thinking and breaking down the end vision into a series of steps.
@gokudomatic
@gokudomatic 11 ай бұрын
@@WhiteBoxDev Thanks. Indeed, multiple layers are necessary, even just for creating biomes. What I have in mind for continents was the Voronoi noise and opensimplex on top of that. I'd love to find an article containing the good practices for worldmap generation, though. Advanced math isn't exactly my strong point.
@DrCaesarsPalace_MD
@DrCaesarsPalace_MD Жыл бұрын
So cool!! In the pseudo code at 8min you would want to regenerate the random number for each (i,j) cell in the grid 👍
@jwawa17
@jwawa17 Жыл бұрын
Nicely done tutorial
@davdav4804
@davdav4804 Жыл бұрын
Thanks man, your video is a blessing, I really look forward to try to implement this in my projects ! Thank you so much for sharing and explaining it so well because I work with Unity and I already have a vague idea of how I will try to implement it!
@mikamulperi
@mikamulperi Жыл бұрын
Thank you! Very clear and understandable video.
@jaxonpetersen5942
@jaxonpetersen5942 Жыл бұрын
The for loop makes no sense
@bike_n_fish
@bike_n_fish Жыл бұрын
Every time I discover a knew procedural generation algorithme I'm like a child before christmass wondering what stupid things I will do with my new toy
@WhiteBoxDev
@WhiteBoxDev Жыл бұрын
The cool thing about procgen is that you can create your own quirky algorithms just by thinking of little tweaks that might align better with whatever you're making. There are many established algorithms, but what makes them really come to life are the little changes you make.
@emmaccode
@emmaccode Жыл бұрын
Nice. Well explained, good code. Thanks. This will be easy to reinterpret and implement :p
@panos3620
@panos3620 Жыл бұрын
Nice!
@zentek5989
@zentek5989 Жыл бұрын
This is a cool vibe
@zentek5989
@zentek5989 Жыл бұрын
Love how you included two options for playtime, I know a few games that get annoying to listen to because it’s so repetitive
@zentek5989
@zentek5989 Жыл бұрын
This one’s my favorite!
@zentek5989
@zentek5989 Жыл бұрын
Wow this looks fun! Adding it to my wishlist
@thatdiamondminer2673
@thatdiamondminer2673 Жыл бұрын
I really loved this game idea you posted there. Glad to see it more in action! And uh, why'd you named it Cx6? Anyways awesome work!
@WhiteBoxDev
@WhiteBoxDev Жыл бұрын
The name Cx6 is a play on VVVVVV (a popular indie title), where "C" is short for "carrot" or "^", which is an upside-down "V".
@shamsathbegum9152
@shamsathbegum9152 Жыл бұрын
Really Cool!
@WhiteBoxDev
@WhiteBoxDev Жыл бұрын
Hi everyone! I've been working hard on this arcade-style bullet hell game the past month and a half. If you're interested, check the description for a link to the Steam store page and click the "Add to your wishlist" button! Thank you.
@homelessdorito2263
@homelessdorito2263 Жыл бұрын
What did you do in your demo to get the generation to have more irregular shapes rather than tend towards circles? More irregular shapes would be ideal for my project
@WhiteBoxDev
@WhiteBoxDev Жыл бұрын
The implementation I explained in the video is exactly what I wrote in the demo project.
@homelessdorito2263
@homelessdorito2263 Жыл бұрын
@@WhiteBoxDev Thank you for the quick response! I am certain that I implemented it correctly; I suspect it might be due to a difference in math.random implementation in the engine i'm using. Looks like i'll need to find a different generation method
@aleksandersabak
@aleksandersabak Жыл бұрын
5:11 I did the math myself and it seems like you miscalculated the values. For example average of the corners of the x square is (2 + 4 + 6 + 5)/4 = 4.25, but you show 6. I think this is because instead of dividing by 4 you kept the division by 3 from the previous step, getting 17/3. This seems to also work for other values. Is it right?
@WhiteBoxDev
@WhiteBoxDev 11 ай бұрын
Hi from six months in the future. Sorry for not replying back then, must have missed your comment. Yes, you are correct, I made some arithmetic mistakes while doing the calculations manually. I'll post a standalone comment about this. Thank you.
@aleksandersabak
@aleksandersabak 11 ай бұрын
@@WhiteBoxDev No worries! It was an enlightening video nonetheless, and I enjoyed implementing and playing with the algorithm you presented.
@alexanderabramov2719
@alexanderabramov2719 Жыл бұрын
Great tutorials, I’ll put the notifications on in case you ever decide to come back from that cigarette run
@user-oh6jx7pl5k
@user-oh6jx7pl5k Жыл бұрын
Thank you! This video so much helpful to me, that was simple but strong enough!
@_gamma.
@_gamma. Жыл бұрын
All of your tutorials are awesome, wish there were more!
@spectrecular9721
@spectrecular9721 Жыл бұрын
Any chance to get a tutorial on how to remove unconnected islands of a certain volume, and/or connect islands of a certain volume?
@WhiteBoxDev
@WhiteBoxDev Жыл бұрын
Unlikely, however thinking on my feet, I might do the following: 1. Use flood fill algorithm to scan all areas on the map and keep track of their volumes. 2. Average the position of each tile in each volume to get the "center tile" of each volume (or somewhat close to it). 3. If any volume is less than some threshold, then it should be either filled (eliminate it) or connected to the nearest volume. Hope this gives you an idea of how to go about doing this. I'm sure there are plenty of alternative ways, but this would be my first approach.
@spectrecular9721
@spectrecular9721 Жыл бұрын
@@WhiteBoxDev ​Thanks for the advice! I assume after performing a flood fill (but before actually filling in the cells), the volume would simply be how many elements were to be filled? That's a lot simpler than I thought it would be
@WhiteBoxDev
@WhiteBoxDev Жыл бұрын
@@spectrecular9721 Based on your term "volume", yes I figured you meant "group of similar cells". The actual connecting of distinct volumes would be up to your creativity. Glad to help. :)