Thanks for the link, Richard! I have shading working:
The Wikipedia link that you provided served as a great starting point. The pseudocode in that article is not well-structured. (Talk about spaghetti code; Dykstra would throw a fit!) So, I did some poking around and found this:
I basically ported that to MakeCode Arcade. It’s a bit too slow, so I’m going to have to go with something a bit faster (even if it chews up additional memory). I’ll keep playing with this, though, to find an algorithm that balances efficiency for speed. For now, though, it does the job.
You’re all welcome to play in my current sandbox! The algorithm renders the dungeon from a tile map. You can walk around the dungeon with the arrow buttons, and you can pick the colors for the wall outlines and the wall textures. If you set the wall texture to zero, then you get a wireframe rendering (without the penalty of filling the polygons). Those three constants are at the top of the main.js file. It even works on hardware!
Don’t mind the hidden game.splash calls. Most of those were there to help me diagnose a problem when running the code on hardware (which I’ve since fixed).
Nota bene: Pathways can only be one tile wide right now. If you try to have pathways that are wider, I doubt highly that it will render properly.
You can see how I’ve been testing the different algorithms here:
There is a third algorithm there, similar to the one that @richard employs in the sprite editor. The stack gets too large to work on hardware, but switching to scanlines seems to keep us within the memory constraints of the devices.
This has been way too much fun playing with these different algorithms. It’s one of my favorite things in computer science: Dissecting and understanding different algorithms. There definitely are some additional ways to improve the performance of the shader, but this will do for now.
Made a little more progress on this today. Been having way too much fun with this. The dungeons can now have passages in the floor and in the ceiling so that you can build additional levels in your game. The rendering is a little off, but it’ll do for now.
Next steps (roughly in order):
Use an update loop with the movement animations instead of game.pause so that rendering is more consistent across platforms. (Done.)
Incorporate page flipping when updating the screen. (Done.)
Allow users to build wireframes (a.k.a. vector images) for enemies and other items and then be able to render them in the dungeon.
Allow for a cropped viewport, to allow for, say, information to be displayed on the bottom of the screen. (Done.)
Allow for diminishing visibility. Currently, the dungeon is drawn as if there is infinite light from all directions. I’ll add the option to render the dungeon as if the hero character is holding some sort of light source that diminishes with distance.
Transform the dungeon engine into an extension.
Eventually (to make it easier for Blocks users), allow web app to import and export vector images using MakeCode Arcade cartridges (i.e. the PNG files that contain the MakeCode Arcade code for a project).
Other ideas? Feel free to share them here (as y’all have already done, and which I appreciate).
OK … need to put this away and get ready for class tonight! Cheers, all!
That’s brilliant, Joey! I love the amount of thought that has gone into MakeCode. It’s an incredible platform as a user, and I’m learning more and more how brilliant its design is as a developer. Thanks for the tip; I’ll definitely be employing those mechanisms when I get to that phase of development!
I love it, Chase! I’ve been meaning to pick your brain a bit on something.
I’ll be creating some sort of mechanism for users to create wireframe objects for the monsters and such. Those objects, essentially, are vector images. In a thread many moons ago, you had mentioned that you had dabbled a bit in that space.
Nice work, Chase! I appreciate you sharing it. I particularly like the ability to set an alternate center point to make rotating the sprite more flexible.
For those of you following along, vector images are the next step on the to-do list. (I’ve already crossed-off some of the other items.) I’ll probably release vector images as a separate extension in case it’s of use to anyone. After that, I’ll add diminishing visibility to the dungeon, and then wrap all of this up into a beta-version of an extension.
I started programming when I was 10 years old, @Blobiy, and I remember thinking the same thing at your age (and long afterward, too!). Keep working at it! We all started somewhere, and all of us here probably started in different environments. MakeCode Arcade, though, is a wonderful place to learn programming!
If you like programming, and if you work hard at it, then you can make a career out of it. The world needs high-quality programmers … and, I think, we always will. Hang in there, and be sure to ask us for help when you get stuck!
P.S. I see that Joey replied to your other thread. If you’re still stuck, just let us know over there. If you get stuck with something else, just start a new thread. We’re all here to help!
You also can just roam around the built-in dungeon here:
I haven’t worked on this very much lately, but I’ll get back to this one when the schedule frees up a bit. This one’s been a lot of fun so far, and I’m looking forward to getting back into the dungeons to create some monsters!