CodingQuest
CodingQuest
  • Видео 25
  • Просмотров 338 767
Procedural world generation with Perlin Noise
Procedural generation of game worlds using perlin noise.
In this video I show how to generate random game worlds, like those in the game civilization.
The worlds are 2d tilemap worlds, and the implementation is in Python/PyGame.
☕️ ☕️ No coffee, no coding! 🔥 🔥
If you like to support my work with a small donation:
www.buymeacoffee.com/CodingQuest
Thank you!!
You can find the source code, and tile set here:
github.com/CodingQuest2023/Algorithms (WorldGeneration/PerlinNoise)
Music: Imagine by Auixe is licensed under a Creative Commons License.
creativecommons.org/licenses/...
Support by RFM - NCM: bit.ly/2xGHypM
Music: Imagine by Auixe
Soundcloud: soundcloud.com/auixe
RUclips: /@auixemusic4618
Просмотров: 7 529

Видео

Maze generating algorithms
Просмотров 2,3 тыс.Год назад
Generating random mazes using these 3 algorithms: - Binary tree - Aldous-Border - Hunt-and-kill ☕️ ☕️ No coffee, no coding! 🔥 🔥 If you like to support my work with a small donation: www.buymeacoffee.com/CodingQuest Thank you!! You can find the source code, and tile set here: github.com/CodingQuest2023/Algorithms (/MazeAlgorithms) Music: Imagine by Auixe Soundcloud: soundcloud.com/auixe RUclips:...
4. Loading the level - Creating a 2D platformer in PyGame
Просмотров 1 тыс.Год назад
In this series I will show you step-by-step how to create this 2d platformer in Python using the PyGame module. I will share all source code and game assets on my GitHub, see the link below. Episode 4: Using the PyTmx module to load the level that was designed in the Tiled editor into our game. We will load the platforms layer, and create sprites for each of the tiles in this layer. ☕️ ☕️ No co...
The Wave Function Collapse algorithm
Просмотров 285 тыс.Год назад
Generating random worlds using the wave function collapse algorithm. This video explains how the WFC algorithm works, and explains how to implement the WFC algorithm in python code. ☕️ ☕️ No coffee, no coding! 🔥 🔥 If you like to support my work with a small donation: www.buymeacoffee.com/CodingQuest Thank you!! You can find the source code, and tile set here: github.com/CodingQuest2023/Algorith...
x64 Assembly course: 16. Floating points, SIMD and SSE
Просмотров 925Год назад
Programming x64 Assembly language in Visual Studio crash course. Episode 16: In this episode we will look at some basic floating point calculations on SSE, both SISD and SIMD. ☕️ ☕️ No coffee, no coding! 🔥 🔥 If you like to support my work with a small donation: www.buymeacoffee.com/CodingQuest Thank you!! Source code: github.com/CodingQuest2023/AssemblyX64_Tutorial If you like to try the code f...
3. Sprite collisions - Creating a 2D platformer in PyGame
Просмотров 874Год назад
In this series I will show you step-by-step how to create this 2d platformer in Python using the PyGame module. I will share all source code and game assets on my GitHub, see the link below. Episode 3: Implementing sprite collision detection. GitHub: github.com/CodingQuest2023/PyGameDev
2. Main character sprite animation - Creating a 2D platformer in PyGame
Просмотров 831Год назад
In this series I will show you step-by-step how to create this 2d platformer in Python using the PyGame module. I will share all source code and game assets on my GitHub, see the link below. Episode 2: Creating the main character and add idle, running and attack sprite animations. ☕️ ☕️ No coffee, no coding! 🔥 🔥 If you like to support my work with a small donation: www.buymeacoffee.com/CodingQu...
1. Creating the first sprite - Creating a 2D platformer in PyGame
Просмотров 3 тыс.Год назад
In this series I will show you step-by-step how to create this 2d platformer in Python using the PyGame module. I will share all source code and game assets on my GitHub, see the link below. Episode 1: Drawing a background and creating animated bee sprites. ☕️ ☕️ No coffee, no coding! 🔥 🔥 If you like to support my work with a small donation: www.buymeacoffee.com/CodingQuest Thank you!! GitHub: ...
Creating a 2D platformer in PyGame
Просмотров 4,4 тыс.Год назад
In this series I will show you step-by-step how to create this 2d platformer in Python using the PyGame module. I will share all source code and game assets on my GitHub, see the link below. Episode 0: Introduction ☕️ ☕️ No coffee, no coding! 🔥 🔥 If you like to support my work with a small donation: www.buymeacoffee.com/CodingQuest Thank you!! GitHub: github.com/CodingQuest2023/PyGameDev
x64 Assembly course: 15. Creating a windows application
Просмотров 1,6 тыс.Год назад
Programming x64 Assembly language in Visual Studio crash course. Episode 15: In this episode we create a basic windows application in x64 assembly code using the win32 API functions. ☕️ ☕️ No coffee, no coding! 🔥 🔥 If you like to support my work with a small donation: www.buymeacoffee.com/CodingQuest Thank you!! Source code: github.com/CodingQuest2023/AssemblyX64_Tutorial If you like to try the...
x64 Assembly course: 14. A number guessing game
Просмотров 693Год назад
Programming x64 Assembly language in Visual Studio crash course. Episode 14: Let's have a look at a simple game fully programmed in x64 Assembly, that demonstrates the things we have learned in the previous episodes. We use Printf (episode 10), Scanf (episode 12), compare instructions and conditional branch instructions (episode 7). ☕️ ☕️ No coffee, no coding! 🔥 🔥 If you like to support my work...
x64 Assembly course: 13. Bitwise logical instructions
Просмотров 437Год назад
Programming x64 Assembly language in Visual Studio crash course. Episode 13: An introduction to the assembly instructions AND, OR, XOR and NOT for performing bitwise logical operations. ☕️ ☕️ No coffee, no coding! 🔥 🔥 If you like to support my work with a small donation: www.buymeacoffee.com/CodingQuest Thank you!! Source code: github.com/CodingQuest2023/AssemblyX64_Tutorial If you like to try ...
x64 Assembly course: 12. Calling Scanf from Assembly code
Просмотров 799Год назад
Programming x64 Assembly language in Visual Studio crash course. Episode 12: In this episode we will look at how we can call Scanf from Assembly code. Example 1 will read an integer value using Scanf, and example 2 will read a string. ☕️ ☕️ No coffee, no coding! 🔥 🔥 If you like to support my work with a small donation: www.buymeacoffee.com/CodingQuest Thank you!! Source code: github.com/CodingQ...
x64 Assembly course: 11. Cheating with Disassembly
Просмотров 708Год назад
Programming x64 Assembly language in Visual Studio crash course. Episode 11: In this episode we will look at how we can use the disassembly debug window to improve our Assembly coding. By first writing a small C program, and then look at the C-compiler generated assembly code we can learn a lot! ☕️ ☕️ No coffee, no coding! 🔥 🔥 If you like to support my work with a small donation: www.buymeacoff...
x64 Assembly course: 10. Calling Printf from Assembly code
Просмотров 1,1 тыс.Год назад
x64 Assembly course: 10. Calling Printf from Assembly code
x64 Assembly course: 9. Using the Stack
Просмотров 1,2 тыс.Год назад
x64 Assembly course: 9. Using the Stack
x64 Assembly course: 8. Debugging your assembly code
Просмотров 750Год назад
x64 Assembly course: 8. Debugging your assembly code
x64 Assembly course: 7. The CMP instruction and Conditional branches
Просмотров 849Год назад
x64 Assembly course: 7. The CMP instruction and Conditional branches
x64 Assembly course: 6. Conditional branch instructions
Просмотров 898Год назад
x64 Assembly course: 6. Conditional branch instructions
x64 Assembly course: 5. The Flags register
Просмотров 1,1 тыс.Год назад
x64 Assembly course: 5. The Flags register
x64 Assembly course: 4. The ADD, SUB, INC and DEC instructions
Просмотров 1,5 тыс.Год назад
x64 Assembly course: 4. The ADD, SUB, INC and DEC instructions
x64 Assembly course: 1. Programming x64 assembly in Visual Studio 2019 & 2022
Просмотров 15 тыс.Год назад
x64 Assembly course: 1. Programming x64 assembly in Visual Studio 2019 & 2022
x64 Assembly course: 2. General purpose registers and the MOV instruction
Просмотров 3,7 тыс.Год назад
x64 Assembly course: 2. General purpose registers and the MOV instruction
x64 Assembly course: 3. Directives and the call & ret instructions
Просмотров 2 тыс.Год назад
x64 Assembly course: 3. Directives and the call & ret instructions

Комментарии

  • @fabulousmom2281
    @fabulousmom2281 День назад

    thanks bro! Awesome video!😄

  • @anirudhkrishna1022
    @anirudhkrishna1022 16 дней назад

    Thank you so much for this video.

  • @Siroitin
    @Siroitin 28 дней назад

    FACT: Perlin noise has been canceled. Use diffusion

    • @balijosu
      @balijosu 10 дней назад

      Use what works 🤷‍♂️

  • @GonzaloDev-ww9un
    @GonzaloDev-ww9un Месяц назад

    :)

  • @nico6465
    @nico6465 Месяц назад

    Thank you very much for this playlist. I have a lot of fun following this course :)

  • @Jaun_
    @Jaun_ Месяц назад

    Great video (:

  • @SaniSensei
    @SaniSensei 2 месяца назад

    One thing I noticed, that might be difficult to achieve, is probably deterministic maps. e.g. like in minecraft you can set a seed for the randomizer, and will get the same map for the same seed everytime. With WFC, this will probably work fine if you generate the entire map right from the beginning and just set random.seed(...) at the beginning.. but if you want to dynamically grow the map (again like in minecraft where the world grows in the players walking direction), then you'll likely run into the issue that tiles might result in different outcomes, depending on from what direction you approach them. Addition: So WFC would no longer choose the tile with the lowest entropy *globally*, but limited to the players proximity. In a sense a nice feature, because it adds a source of randomness (player movement), practically guaranteeing that no map is like the other, but it also loses this nice feature of the ability to share a seed. But all the other features you can play around with, that have already been mentioned in the comments, are certainly worth to try it out.

  • @kingshahzad78
    @kingshahzad78 3 месяца назад

    Love it Sir

  • @ultimateownsz
    @ultimateownsz 3 месяца назад

    You could define your for loops more clearly, for i or for j doesn't make sense in reading the code. Still a great video nonetheless

    • @Franchescovisk
      @Franchescovisk 3 месяца назад

      you must be a beginner, but i and j represent just a number, No need to change anything.

    • @ultimateownsz
      @ultimateownsz 3 месяца назад

      @@Franchescovisk lmao, why would you assume this. For clarity the iteration can be named whatever, but for readability it is better practice if you name it something related to the context of your code.

    • @Franchescovisk
      @Franchescovisk 3 месяца назад

      @@ultimateownszthe for loop variable doesn't mean anything and is just the loop number, it doesn't make sense to name it since it doesn't mean anything besides that

    • @userk9
      @userk9 Месяц назад

      @@ultimateownszi j loops are standard practice afaik, at least in C# I believe k v is the standard in LUA

  • @ThomasJagust
    @ThomasJagust 3 месяца назад

    Hi i got two improvements but they are optional. Lets say u have a sprite for the tileMap which is bigger in size than the tileSize than the unit cant´go between lets say a coast north tile which has grass in the north an a forest north tile which has gras in the south cause its too big. So i figured that out with some lines of cde that between every partial grass tile and another partial grass tile always one grass tile is place so theres always enough space for bigger sized sprites to pass between those two partial sprites. And the other thing is, its just a tiny thing, when the connectors in the constrain method are added there dont need to be duplicates in the connectors cause the resulting connectors list only is a comparison list where a value like "0" only needs to be in once.

  • @AleksaAleksic-r1w
    @AleksaAleksic-r1w 3 месяца назад

    please make a real tutorial for like navigating in pycharm what is that config thing evrething i know a lil of python coding but i do not know how to order files and all that so if u could make it. In present of this coment i am still trying to find a tutorial.

  • @DanielMüller-r7m
    @DanielMüller-r7m 3 месяца назад

    Thank you for the nice tutorial. I'm currently trying to understand and apply object-oriented programming. When I saw your video I just thought: "Oh damn, this guy is really, really fast...way too fast for me :) After 10 times I was able to implement it. Best regards, Daniel

  • @clushsfg
    @clushsfg 3 месяца назад

    good

  • @rowanvanzyl426
    @rowanvanzyl426 3 месяца назад

    Amazing content as usual

  • @rowanvanzyl426
    @rowanvanzyl426 3 месяца назад

    Awesome video my guy

  • @rowanvanzyl426
    @rowanvanzyl426 3 месяца назад

    Awesome video my guy

  • @gsc8902
    @gsc8902 3 месяца назад

    I like your explanation thank you.

  • @firesickle
    @firesickle 4 месяца назад

    holy crap I am glad I am not the only one doing y, x

  • @gamalielgerona2391
    @gamalielgerona2391 4 месяца назад

    woah

  • @GameJam230
    @GameJam230 4 месяца назад

    One really interesting algorithm I saw recently on RUclips was used for a Minecraft randomly changing maze, but it wasn't generating a NEW maze from scratch, but instead had the ability to convert any EXISTING perfect maze into another one, only by needing to change the properties of two adjacent cells. It worked by representing the maze ad a tree structure with a root node, and having all other nodes have exactly one path to navigate back up the tree towards it. This means there are no loops, and no isolated areas. Starting with a maze of this format, you look at the root node and choose one of its adjacent cells (not diagonals). You go to that cell, and if the tree node representing it has any other nodes pointing TO it, you wall off that connection. Then, you make the OLD root node point to it, and now this node is the new root node. Every time you run this algorithm, one perfect maze becomes a new entirely valid perfect maze, and you get to choose how many times you run it. It could be as fast as O(1) if you choose to only run the algorithm a fixed number of times, but if the maze is significantly bigger than the number of times you run it, your maze might look extremely similar to previous versions, so I believe the creator recommended running it about 10 times for every cell in the maze if I recall? Maybe less than that, but ultimately it's up to the user.

    • @nneptdotnet
      @nneptdotnet 4 месяца назад

      This is very good info! What was the name of the video? Edit: I think i found it: ruclips.net/video/zbXKcDVV4G0/видео.html

    • @GameJam230
      @GameJam230 4 месяца назад

      @@nneptdotnet Yes, that's the one!

  • @eduardopozos5022
    @eduardopozos5022 4 месяца назад

    Do you know how to create custom libraries?

  • @papapspe5662
    @papapspe5662 4 месяца назад

    Best

  • @buriedbones-nh9xr
    @buriedbones-nh9xr 4 месяца назад

    Just because a game has a generated world that doesnt make your game more unique or interesting I mean how much does it make a difference if the tile is a grass texture tile or a tree I think indie game developers are still struggling with what makes a game interesting

  • @kcvinu
    @kcvinu 4 месяца назад

    Nice video. It is really helpful. Is there any option to use Visual Studio to create a dll file with MASM64 ? I am using VS 2022.

  • @yelle8647
    @yelle8647 4 месяца назад

    At 09:50, sorry, but I don't quite get why we add extra +1 to size_x, size_y. What we have seen before? At what minute I should have seen it.

    • @CodingQuest2023
      @CodingQuest2023 4 месяца назад

      To know which terrain tile you need, you need to have 4 noise values for each of the tile corners. So if you want a world with NxN tiles you need N+1xN+1 noise values. I hope this helps 😊

  • @sunnynayak9444
    @sunnynayak9444 5 месяцев назад

    THANKS A LOT I WILL USE IT IN MY CS PROJECT

  • @kevnar
    @kevnar 5 месяцев назад

    I once used wave function collapse for a procedural melody maker about 15 years ago. I didn't even know the algorithm existed. I just set up a system that decides what notes can come next, based on the current note. For example, if it's the 4th note in the scale, it has a higher probability to go to the 1, 5, or 8th note, and a lower probability to go to 2, 3, and 6. And so it just kept plinking along through the endless melodies. Great things happen when you're bored and curious.

  • @xCCflierx
    @xCCflierx 5 месяцев назад

    Just started watching and I'm already inspired. Putting a limit on how many times a tile can be used would mean only a certain percentage of the map will ever be that tule, and only if the condition to place that tile is correct. So if I want a small building I would only make 4 corner tiles, top tile, bottom tile, left tile, right tile, center tile. It only makes sense for them to connect to each other. And then I'm thinking the algorithm would look beyond just what's next to each square, otherwise i might start a building that cant be finished

  • @teamredstudio7012
    @teamredstudio7012 5 месяцев назад

    Fascinating! Ik ga dit zeker eens proberen gebruiken. Een ander interessant algoritme is met Perlin noise, maar dit lijkt simpeler.

  • @squareski
    @squareski 6 месяцев назад

    I quite like the hunt and kill algorithm, but it doesn't seem to generate any crossroads. I noticed this with the depth first algorithm too. Both 'carve' corridors so wonder if this method means it never generates a crossroads (that is a cell with 0 walls).

  • @indieBen
    @indieBen 6 месяцев назад

    Somehow, looks like an improved version of the Minesweeper game :)

  • @TheRawi
    @TheRawi 6 месяцев назад

    No idea why MSVC doesn't support inline asm64 :/

  • @connorjosh2088
    @connorjosh2088 6 месяцев назад

    5:48 wouldn't this be 3d not 2d? X, Y and brightnes?? GREAT video btw thank you 🙏

  • @timonix2
    @timonix2 6 месяцев назад

    You did not go through any back tracking. If it cannot find a solution it needs to undo some amount of assumptions

  • @bloggy6465
    @bloggy6465 7 месяцев назад

    can this be used for biomes cus it doesnt seem like it would?

  • @matt8ress
    @matt8ress 7 месяцев назад

    yall make this sound too simple, took me 4 months to make my own implementation. nonetheless, all videos i watched were great, but this one stands out to me because its about wfc and wfc only. 👍

  • @andewprod
    @andewprod 7 месяцев назад

    Thanks so much for this video! Greetings from germany :D

  • @tsogbayarsambuu9826
    @tsogbayarsambuu9826 8 месяцев назад

    Thank you very much

  • @Masemiliano_
    @Masemiliano_ 8 месяцев назад

    Continue with these great explanation videos!

  • @frontbro9571
    @frontbro9571 8 месяцев назад

    Is there any way I could contact you directly ?

  • @saminegamme
    @saminegamme 9 месяцев назад

    Is it in python ?

  • @SwapChain
    @SwapChain 9 месяцев назад

    Thank you very much! We need more content in this series!

  • @SwapChain
    @SwapChain 9 месяцев назад

    Great work! We need more of this win32 asm lessons!

  • @InCognite
    @InCognite 9 месяцев назад

    Thank you for uploading this video! Now I finally understand how wave function collapse works both in theory and code and managed to port it into my own project.

  • @po_decol
    @po_decol 9 месяцев назад

    best explaination so far

  • @papapspe5662
    @papapspe5662 9 месяцев назад

    Classs!

  • @ErwinLee-99
    @ErwinLee-99 9 месяцев назад

    This is something I would find very interesting to implement using F#. I am developing a simulation program in .NET for a research that I'm conducting, and generating terrains with diverse and realistic environment factors is one of the main problems I have to tackle. This video gave me great insight!

  • @GoobNoob
    @GoobNoob 9 месяцев назад

    Not a fan of this one, because you don't explain how to actually get those windows/views for debugging the registers and step through on VS2022

    • @DxXNA
      @DxXNA 9 месяцев назад

      - Run Your Program to a Break Point. If you don't know how to breakpoint you can right click any line in your code -> Breakpoint -> Insert Breakpoint - Click on Debug at Top in VS 2022 -> Windows -> Registers -> Memory -> Watch

  • @francescopiazza4882
    @francescopiazza4882 10 месяцев назад

    Very interesting, thanks !

  • @markmanning2921
    @markmanning2921 10 месяцев назад

    had to stop watching when you said "implemented in python" because i literally spent 3 months trying to learn that and i just rejected everything about it outright. can you do it again in C??? :)