Hi there, and thanks for your patience! Making videos always seems to take longer than I think. (And I'm still finding my way towards better audio too.) Either way, hope you can get some enjoyment out of this video. :)
Elated to see your progress! I'm sure you're very busy right now but my offer from the first video still stands. I would love to hire you! I'm sure that you would find the complexity challenging but familiar. If the idea of bringing a project to life with more than a decade dedicated to the visual design of it is in any way appealing... i encourage you to reach out! You certainly seem to have a wonderful head on your shoulders as far as problem solving is concerned. All the best. -Digby
@@digbyfraze Thanks, glad you're enjoying it! I have a few projects of my own to take care of, so I'm not available for hire. Thanks for the offer though, and all the best for your endeavor too. :)
This is Big Boo, the legal counsel of Nintendo Co, LTD. I am writing to inform you that you have been served a cease and desist from using the Nintendo Co, LTD copyrighted term "Plumber". Nintendo Co, LTD owns all plumbers throughout the universe in perpetuity. In fact, don't even use your sink. Pipes belong to us as well.
And Bricks, Turtles, Dinosaurs, Mushrooms, Water, Air, Fish, Squid, Squid People, Swords, Gravity, Castles, Princesses, Bombs, And Planets, Will Take This All Away From Earth.
I thought you meant the turn blocks, but then I looked closer. You’re right! I never would’ve realized that the question blocks are literally just turn blocks with a moving ? on them if it wasn’t for your comment lol.
No way, you're lying.. *Checks video* WHAT. How have i never noticed that?! in all my years of playing that game and i never noticed what was in front of my face for decades. incredible. I mean it's only really visible for 2 frames but still! Now i can't Us-see it!
One thing worth mentioning for eventual code release: make sure you address copyrighted enemy names in code/don't release re-recreated sprites. Make enemy names something really generic (i.e. this isn't a bullet bill- it's a shooting bullet). Sprites should be fairly obvious as to the why, so maybe include in the readme expectations for the sprites the user provides themselves. You could just fire-and-forget and not have to worry about this, but it would help future sustainability for whomever ends up adopting/extending this project to not have to first strip copyrightable works out of DMCA fears.
I think they're aware enough, I'd hope they would release the basis as a standalone generic "classic platformer" package and have SMW stuff be a separate repo
Honestly, imo, it's a very unique scenario that makes it useful. If you need to have any export variables set for the scenes in the tileset, I don't believe there's a way to easily set these in the scene version in a tileset. I'm replying with my own comment when I get done with the video, I am wondering if composition would have been better than inheritance for the blocks. That being said, for the way it's setup in this video, yeah it's a great option! Ex. in my game I wanted to set a color. I tried this route first, only to realize you can't really set export variables (if I'm remembering right). I ended up having to add the sprites to a standard tile map, then basically have a function delete the tiles out and instantiate the scenes in place. This was a bit simpler than you'd think. But since in a standard tilemap you can add custom data it was much easier to set things like colors and health. Otherwise, I would have needed up to 15 scene variants and that's before I added other stuff like different types, etc. Edit: To clarify, some tutorials use export variables as variables you want to easily change/tweak for example player speed. However, to me, the really powerful way to use export variables is to let you easily set values on instances of scenes. To me, when creating a level and adding question blocks, an export variable would be great for what item should spawn. Then you could easily set the item that should spawn each time you place a block.
The tilemap trick at 8:40 is incredible! And this series has been a great source of inspiration as a total novice to Godot and game development as a whole. My current goal is to make small projects to gain experience and work towards developing a feature-rich game with satisfying mechanics and controls, but it feels like an overwhelmingly daunting task to do from scratch for anything more complicated than pong or breakout; but watching you recreate Super Mario World's offers has been really encouraging! These videos are entertaining on their own, but I've also learned about nodes, paradigms, and problem-solving approaches that I haven't seen anywhere else. So thanks again for making this series, I can't wait for future installments and to see what else you get up to!
If you aren't already, I would encourage you to try some game jams! They have been helpful to me when it comes to getting started. I still have a long way to go, but ultimately, the big thing is knowing the tool you use better and how to go about using the tools (nodes in Godot's case) you have to create the feature you want. Ex. My first game jam, I wanted to add a way for the player to respawn close to where they died. I could have added checkpoints anywhere, but instead I checked to see if the player was on the ground for longer than x amount of time and if so, I set that as the respawn point. This worked great!.... until the player died on the moving platforms haha. That was the only thing I couldn't get to work and I ultimately ran out of time. But considering it was my first non-tutorial project, I think my solution turned out pretty solid. I think ideally, I would not allow the value to be set on the moving platform but at the time, I couldn't come up with that idea as I worked through various other things for the jam.
My dude, you are super underrated with this. I love the deep dive into SMW's physics and code and implementing those intricate and detailed concepts in the modern game engine. Super awesome, and I can't wait for the next episode!
5:14 I noticed the value you put for the timer got truncated by the inspector. If you'd like to use more precise values you can go to Editor Settings -> Inspector -> Default Float Step, and turn it down to a much lower value.
About the statement at ~11:02 As someone who's been making a collision system in pygame which is similar to the one described, you probably wouldn't have to put the code to "push Mario away" in every solid. Rather, Mario himself could have code that pushes away whenever he touches any solid. This info probably won't affect your trajectory (and tbf my code is far from bug-free), but I thought it was worth putting out there.
''Dayum, this video is so cool, fresh, positive and-'' ''When you make money, you make enemies''. ''DAYUM THAT'S COLD!'' Awesome vid! I'm learning just watching/listening to you! Keep it up! :D
So many different skills on display here. The obvious ones are your game development and programming skills, but there's also the entertaining script, concise explanations, and engaging visuals to accompany the dense subject matter and make it consumable without much effort on the viewer's end. Really good stuff! Can't wait for more.
Wow! I've been recently saying "A Plumber for all Seasons is the best romhack I've ever seen". And I had this video reccomended separately and.... here you are! Bravo!
Duuuude, I've been using godot for years and I just realized you can inherit scenes from this one video! I've inherited scripts a lot but I didn't know you could do the same with scenes!!
5:33 It is possible to detect the collisions with the blocks even without the Area2D nodes. CharacterBody2D has get_slide_collision_count() and get_slide_collision() methods, which you can use to get information about the collisions.
16:55 it is CRAZY how unsatisfying it is to see mario bounce on multiple enemies in a row and not hear the bounce sound change pitch with each successive bounce
Man, I've been having so many troubles making my own game in Godot and you somehow managed to solve a good majority of the problems I couldn't. This was super eye opening and I really appreciate you putting it out there!
Amazing video as always! Here are my recommendations :) 4:18 - > -Tilemaps can have scenes as tiles, it'll probably make your scene tree much cleaner!- Dammit, you're too competent for my advice! (8:40) 4:30 - > -I think a KinematicBody2D would be better suited here? Not 100% sure but like 98%- Nevermind (6:23) Yeah I... don't really have any advice! You're straight up just good at what you do! Can't wait for the next one! I of course say all of this with *immense* respect for you and this project. I've just been using Godot for years and want to help you with some small tips here and there on how to best do things :) (if anyone is wondering why it's edited, it's because youtube's markdown is unlike every other markdown I've used)
I'm not a Godot developer, I use another much less popular engine, but it's nice to see someone that actually understands SMW trying to remake it! I have my own project to make the most accurate remake of SMW, something to replace rom hacking.
@@saroule I have a video of it in my channel, I believe it has a download link. That's actually an old version, I rewrote it from scratch and that ended up being used on a demo game from a friend, the game is named TeamJumpers 2.
My buddy sent me this video as we were discussing Godot game dev. He made it sound like the series was all done, haha, so the withdrawal hit with full force as this video ended. I went and looked through the entire channel’s upload history and I found the Super Mario World stuff very delightful. Even the 15 year old videos are enjoyable and a little inspiring. It’s a very nice UA-cam channel. This new video series is especially great, though, and your voiceover is very effortlessly good, friendly and clear. I’m excited to see where things head.
I am so glad you're turning this into a series! Learning about the physics and game mechanics underlying Mario has been so interesting, and I really appreciate your approach to teaching Godot by first understanding the problem and then exploring the various ways it can be solved. Can't wait to see the next one!
I think I've learned more from your 2 videos than I have any other tutorial. I really want to make games that emulate the Snes, but I always end up fighting godot instead of working along side it. Thank you so much, very inspirational.
As someone who's been playing Super Mario World and Super Mario Advance 2 since they were four, the physics in your remake look incredibly accurate (minus maybe the hitboxes on certain things). Super good work
As someone who's been learning Godot recently as well, it's fun to see/learn alongside all this progress Keep it up ! (Also, using packed scenes in a tilemap is insanely useful information I never even thought of before ! very neat)
Hey, love this series of video ! Highly entertaining and lots of learning value. Waiting to see what's next ! At 4:13 you say you can't put logic in a tile form a tilemap. If you don't already know that, you can write a script that looks for block tiles in your tilemap, erase them and create an instance of your block scene at that coordinates. Pretty neat !
Super Mario World was a HUGE part of my childhood and it makes me so happy to see you put a lot of effort into this small project! I'm also really glad you're doing it "the better way" with Godot's systems and not the exact SMW way. Please continue this project, I am SO EAGER to play it.
Nerd here, I really loved your video!! I was patiently waiting for Part 2 and it was worth it!! I like the way you're referencing the original Game and explain everything. There is so much to learn ❤
Hi there! I'm just barely starting out on my journey of making a 2d platformer and I've been absolutely adoring this series so far, it's super informative, relaxing to watch and for my little ADHD having brain it really manages to hold my attention, keep up the great work Wye!
studying stuff that already exists is a good way to learn how to make stuff. i've already tried my hand at pong and flappy bird, which aren't the most exciting projects, but trying to add my own twists is hard. i've got a lot to learn
really interesting learning about the inner working of mario world, one of my favorite games, and seeing you recreate it so well. really insightful stuff, also relaxing. keep up the great work!
heres a interesting, more performant way to tackle the blocks, theres a function in the tilemap node that converts in game coords into tile coords, which then allow you to basically check what tile of the tileset is at that tile coords of the tilemap. then you can just check the tile at the position above mario when hes jumping up (not when falling ofc), allowing you to simplify the block bounce fx to more of a visual fx rather than normal objects you have to place manually in the level basically the standard way for object to interact with tilemaps : 1. get object position 2. convert position to tile coords 3. check data of tile at tile coords 4. code goes here after
Loving this series! As for the source code, as long as all the basics are there, I'll be infinitely grateful! I've been wanting something like this forever and I started making my own, but I couldn't quite get Mario's physics right. Having the source code will help me learn better as well as give me the foundation to make something I've always dreamed of making! Looking forward to it!
I'm making a platformer in Godot and these videos are helping me a lot in which things should i consider when making these types of games. its a cool job you're doing here 👍
This is amazing as I'm just now learning Godot myself. The only thing a total noob like me could probably tell you (if you don't already know) when you are setting up collision for your tiles in the tilemap is to create the physics layer, select all the tiles you want to have collision, then in the select tab under your physics layer hit "F" on the image. It will create the default square shape on all the tiles so you aren't having to create all 4 points every time and then you can just select one tile at a time to edit it the way you would like.
Little suggestion/musing/whatever- while using inheritance for block behaviors is good, I think it would be a better idea for the Mario controller to be the one checking for interactions with blocks and then 'asking' the block scripts what should happen. You can also replace the area2d interaction points with raycasts, but it doesn't matter too much. While the main reason to do this is because it reduces the amount of collision checks being done and thus is a performance benefit, I find it significantly easier to debug in the long run also. Plus, without having too much familiarity with SMW source code, I reckon it would be more accurate to the original - as you said, in the original game the 'blocks' are not sprites but background tiles.
I'm really glad you're trying to follow the same transpiled logic as the original game, I really wanna do something similar and this series makes me happy because it's literally what I would imagine myself doing.
18:47 I noticed that little bump off side of the one-way platform. Pretty sure that's not in the original, so I wonder if we'll see that fixed next episode.
man as you dive into the mechanics it's like... as complicated as you imagine any given part of the game was to develop, it's probably actually 5 times more complicated than you thought. it's a miracle they ever managed to make it.
im really enjoying this series so far ! as someone who's got no experience with godot yet and is looking into making a 2d mario fangame, it certainly helps with my confidence to see someone else tackle a similar goal. i'll probably reference your code a lot when you release it haha
Welp, you just taught me two things about Godot 4 which would become really handy. I didn't know TileMapLayers could hold objects, too, nor did I know that autoload is a thing. Thank you! Also, with the coins, you can just use a custom signal. That's how I'd do it, at least.
I have an ambitious coding project using what was going to involve snes register values during SMW gameplay as live value inputs for a custom program that drives a wholly unrelated piece of tech. But this project of yours seems like it will blow the doors wide open for more possibilities! It’s exciting to see your progress!!
Didn't think this video would be this good, it exceeded my expectations. I'm starting to learn Godot but I might go with something simpler than that... GG vid keep it up
The nice thing about composition over inheritance is that you can swap out the inner object during runtime, which can be very helpful for things like dependency injection. I'm curious to see how you'd use it here! Awesome video!
I've also been doing some Mario prototyping myself in Godot. Upon watching your video, I realize I should probably group game entities a lot more than I currently am. So thanks for your insight, wye!
This video seriously gave me inspiration to try to learn Godot again! Thank you for the high quality videos you produce, i seriously can't wait for the next video or the next project!
Another awesome video in this series! A few thoughts: - For blocks that can be hit, I'm curious if an AnimatableBody2D would serve you better for stuff like interaction with other objects. The key change for this one is you can actually update the position and have it affect the position of other things in game. - Collision shapes can actually tell you what has hit them, but only when using move_and_collide which doesn't make sense in this game. I just wanted to point it out in case you end up needing move_and_collide in the future. - I will be curious about your experiments with composition for blocks/entities! Godot much prefers that method. I wonder if you end up with some sort of combo. Composition for base entity/enemy then some inheritance for types of koopa troopas for example. - For Mario's collision, I wonder if a capsule shape would work instead? This would allow you to slide around blocks just a bit and not get stuck on things? This is somewhat common in platformer to get some of this. Really excited to see more and be able to look at the player controller more if you get to post the code! Edit: cape physics..... that will be interesting to see if you decide to try to create it!
Love the video! one thing I'd like if i could tell what's your recreation what what's the original game. but every thing else is incredible can't wait for part 3!
Hell yeah, king wye is cooking again! Many of the things you talked about here sound awfully familiar to things I'm doing in my job. We also handle "level collisions" and "entity collisions" separately. (And yeah, we also call them "entities"). If you ever get further into implementing enemies, I'm really curious to see how far you'll get using just inheritance alone. In my experience, inheritance can be a very useful tool for a limited range of use cases, but you'll eventually run into issues once things diversify too much. I had this problem when creating entities in our prototype using inheritance. Let's just say it really wasn't a long-term solution. For our acual game, we've created our own implementation of an ECS (entity component system), which solves many of those issues. Basically, whereas inheritance tries to describe entities based on what they are, an ECS more so tries to describe them based on what they can do. An ECS an inheritance can be combined, though the latter will usually be used quite sparingly in that case. I'd say it only makes sense between entities that are very, very similar. I don't know if Godot actually features any built-in ECS implementation (even Unity and Unreal Engine only added support for ones in recent years), but I feel it would work wonders for an SMW recreation. In fact, I'm like 70% sure the original SMW featured something similar to an ECS (based on some code I saw in a disassembly, and also based on the fact you can customize original sprites so easily via the Tweaker application). So hey, since you probably want to gain some general game dev experience along the way as well, it's probably worth looking into an ECS. There's even some open-source implementations around, like EnTT or flecs.
Holy cow was this worth the wait. This is so fun to follow and I am learning about concepts and features I never knew existed in Godot! Keep up the awesome vids!
I have decided I will watch this series and apparently there are only two videos for now so I’m subbing and hitting the bell. Please don’t end the series.
For updating the coin count, you night want to look into creating an Signal/Event Bus autoload node to help manage communication between different nodes. The idea is that it's an autoloaded node containing lots of different signals, which any node can connect it's own functions to through code (using the Observer pattern to be technical). In your coin case, you might have the UI subscribe to a 'give_coin' signal on the Signal Bus that coins will fire off when they are collected, so it knows when to update it's internal counter. As it is right now for your coin implementation, you'd be trading out one autoload for another, but a Signal Bus could be reused in many different ways for lots of different signals to facilitate communication between far more than just the coins and players (meaning you can just add a new signal for something like lives).
Excellent, informative, entertaining and chill. Very nice video overall about the pinnacle of platformers, well done! You briefly mentioned SPAWNING/DESPAWNING and this is one aspect that I find fascinating and there's a huge variety in how games from that time period handle that. If memory serves me well, SMW does have a bit more complex system, whereas many other games simply make the "entities" disappear when exiting the screen. At this time it was quite normal that you couldn't freely move back around the level, so that was basically the reason why a complex system was not needed. A common strategy in some games was to get the enemy outside of the screen instead of killing it. In SMW you need to at least save some of the information about what has been interacted with and how entities are still "alive" and what they are doing when outside of the screen. This would be interesting to hear more about - if you find it interesting too ;) Cheers and all the best! Looking forward to the cape physics but also the different Yoshis and the really convoluted special stages with lots of secrets and hidden exits - if you have the patience to go that far.
This is just fantastic. I have been playing the original (off and on) since the 90's and yours is difficult to distinguish from it ( apart from some animation change silliness when mario goes from running to jumping.) Very well done. Please be careful not to draw the attention of Nin***** .. I want to see more of this and they ruin everything!
i know well im not into coding or anything but man your videos are just super entertaining, i never fully watched game development videos except you and dani, keep it up you will grow big one day!
I'm wanting to get into solo game development as a hobby and honestly watching this makes me so excited to get started (after finals are done of course lol)
That's actually a fun & smart idea! I could imagine replacing all the sprites with custom Godot adjacent themes and likeness this project could easily become like a preview/project demo for the engine's capabilities and simplicity in features.
@@AkaNoBaka Ok cool idea... but I feel that's a lot of thought stemming from a pun I thought of in 2 seconds. But I'd certainly watch a series on that.
Hi there, and thanks for your patience! Making videos always seems to take longer than I think. (And I'm still finding my way towards better audio too.)
Either way, hope you can get some enjoyment out of this video. :)
yay pt.2 :)
Elated to see your progress! I'm sure you're very busy right now but my offer from the first video still stands. I would love to hire you! I'm sure that you would find the complexity challenging but familiar. If the idea of bringing a project to life with more than a decade dedicated to the visual design of it is in any way appealing... i encourage you to reach out! You certainly seem to have a wonderful head on your shoulders as far as problem solving is concerned. All the best.
-Digby
If you make a third part, you would make over world.
@@digbyfraze Thanks, glad you're enjoying it! I have a few projects of my own to take care of, so I'm not available for hire. Thanks for the offer though, and all the best for your endeavor too. :)
@@___wye Will you make the game widescreen? Because a functional way to play SMW wide-screen would be amazing
"i'm gonna be releasing the code..."
Somewhere in japan the cease and desist siren just started sounding.
Can't wait for someone to make "super legally distinct plumber world"
(Legally Distinct) Epic Carpenter Place
Hyper Marty's planet
@@miguelpina2006 sounds like a rip-off you'd find on google play 💀
This is Big Boo, the legal counsel of Nintendo Co, LTD. I am writing to inform you that you have been served a cease and desist from using the Nintendo Co, LTD copyrighted term "Plumber". Nintendo Co, LTD owns all plumbers throughout the universe in perpetuity. In fact, don't even use your sink. Pipes belong to us as well.
And Bricks, Turtles, Dinosaurs, Mushrooms, Water, Air, Fish, Squid, Squid People, Swords, Gravity, Castles, Princesses, Bombs, And Planets, Will Take This All Away From Earth.
Watching this video, I only just realized the Super Mario World question mark blocks have eyes.
im sorry what
Wtf you're right
I thought you meant the turn blocks, but then I looked closer. You’re right! I never would’ve realized that the question blocks are literally just turn blocks with a moving ? on them if it wasn’t for your comment lol.
Oh my God.
No way, you're lying.. *Checks video* WHAT. How have i never noticed that?! in all my years of playing that game and i never noticed what was in front of my face for decades. incredible. I mean it's only really visible for 2 frames but still! Now i can't Us-see it!
Really appreciate the added SMW sound effects and graphics to your explanations. Adds a lot of charm to the video.
One thing worth mentioning for eventual code release: make sure you address copyrighted enemy names in code/don't release re-recreated sprites. Make enemy names something really generic (i.e. this isn't a bullet bill- it's a shooting bullet). Sprites should be fairly obvious as to the why, so maybe include in the readme expectations for the sprites the user provides themselves.
You could just fire-and-forget and not have to worry about this, but it would help future sustainability for whomever ends up adopting/extending this project to not have to first strip copyrightable works out of DMCA fears.
I think they're aware enough, I'd hope they would release the basis as a standalone generic "classic platformer" package and have SMW stuff be a separate repo
Nintendo PTSD
i can't hear you ... what? sorry what was that
8:40 why have i never seen this in any other godot tutorial this is such a useful tip
Honestly, imo, it's a very unique scenario that makes it useful. If you need to have any export variables set for the scenes in the tileset, I don't believe there's a way to easily set these in the scene version in a tileset. I'm replying with my own comment when I get done with the video, I am wondering if composition would have been better than inheritance for the blocks. That being said, for the way it's setup in this video, yeah it's a great option!
Ex. in my game I wanted to set a color. I tried this route first, only to realize you can't really set export variables (if I'm remembering right). I ended up having to add the sprites to a standard tile map, then basically have a function delete the tiles out and instantiate the scenes in place. This was a bit simpler than you'd think. But since in a standard tilemap you can add custom data it was much easier to set things like colors and health. Otherwise, I would have needed up to 15 scene variants and that's before I added other stuff like different types, etc.
Edit: To clarify, some tutorials use export variables as variables you want to easily change/tweak for example player speed. However, to me, the really powerful way to use export variables is to let you easily set values on instances of scenes. To me, when creating a level and adding question blocks, an export variable would be great for what item should spawn. Then you could easily set the item that should spawn each time you place a block.
The tilemap trick at 8:40 is incredible! And this series has been a great source of inspiration as a total novice to Godot and game development as a whole.
My current goal is to make small projects to gain experience and work towards developing a feature-rich game with satisfying mechanics and controls, but it feels like an overwhelmingly daunting task to do from scratch for anything more complicated than pong or breakout; but watching you recreate Super Mario World's offers has been really encouraging! These videos are entertaining on their own, but I've also learned about nodes, paradigms, and problem-solving approaches that I haven't seen anywhere else.
So thanks again for making this series, I can't wait for future installments and to see what else you get up to!
If you aren't already, I would encourage you to try some game jams! They have been helpful to me when it comes to getting started.
I still have a long way to go, but ultimately, the big thing is knowing the tool you use better and how to go about using the tools (nodes in Godot's case) you have to create the feature you want.
Ex. My first game jam, I wanted to add a way for the player to respawn close to where they died. I could have added checkpoints anywhere, but instead I checked to see if the player was on the ground for longer than x amount of time and if so, I set that as the respawn point. This worked great!.... until the player died on the moving platforms haha. That was the only thing I couldn't get to work and I ultimately ran out of time. But considering it was my first non-tutorial project, I think my solution turned out pretty solid. I think ideally, I would not allow the value to be set on the moving platform but at the time, I couldn't come up with that idea as I worked through various other things for the jam.
FINALLY IVE BEEN STALKING FOR WEEKS!
Relatable
Same lmao
aweonasogang!?!?!?
Friggin nerd
Same
My dude, you are super underrated with this. I love the deep dive into SMW's physics and code and implementing those intricate and detailed concepts in the modern game engine. Super awesome, and I can't wait for the next episode!
5:14
I noticed the value you put for the timer got truncated by the inspector. If you'd like to use more precise values you can go to Editor Settings -> Inspector -> Default Float Step, and turn it down to a much lower value.
About the statement at ~11:02
As someone who's been making a collision system in pygame which is similar to the one described, you probably wouldn't have to put the code to "push Mario away" in every solid. Rather, Mario himself could have code that pushes away whenever he touches any solid.
This info probably won't affect your trajectory (and tbf my code is far from bug-free), but I thought it was worth putting out there.
''Dayum, this video is so cool, fresh, positive and-''
''When you make money, you make enemies''.
''DAYUM THAT'S COLD!''
Awesome vid! I'm learning just watching/listening to you!
Keep it up! :D
So many different skills on display here. The obvious ones are your game development and programming skills, but there's also the entertaining script, concise explanations, and engaging visuals to accompany the dense subject matter and make it consumable without much effort on the viewer's end. Really good stuff! Can't wait for more.
Du leistest erstaunliche Arbeit, man sieht, dass du mit ganzem Herzen dabei bist!
Wow! I've been recently saying "A Plumber for all Seasons is the best romhack I've ever seen". And I had this video reccomended separately and.... here you are! Bravo!
Duuuude, I've been using godot for years and I just realized you can inherit scenes from this one video! I've inherited scripts a lot but I didn't know you could do the same with scenes!!
5:33 It is possible to detect the collisions with the blocks even without the Area2D nodes. CharacterBody2D has get_slide_collision_count() and get_slide_collision() methods, which you can use to get information about the collisions.
16:55 it is CRAZY how unsatisfying it is to see mario bounce on multiple enemies in a row and not hear the bounce sound change pitch with each successive bounce
Man, I've been having so many troubles making my own game in Godot and you somehow managed to solve a good majority of the problems I couldn't. This was super eye opening and I really appreciate you putting it out there!
Amazing video as always! Here are my recommendations :)
4:18 - > -Tilemaps can have scenes as tiles, it'll probably make your scene tree much cleaner!- Dammit, you're too competent for my advice! (8:40)
4:30 - > -I think a KinematicBody2D would be better suited here? Not 100% sure but like 98%- Nevermind (6:23)
Yeah I... don't really have any advice! You're straight up just good at what you do! Can't wait for the next one!
I of course say all of this with *immense* respect for you and this project. I've just been using Godot for years and want to help you with some small tips here and there on how to best do things :)
(if anyone is wondering why it's edited, it's because youtube's markdown is unlike every other markdown I've used)
Thank you very much! Glad I'm heading in the right direction. :)
I'm not a Godot developer, I use another much less popular engine, but it's nice to see someone that actually understands SMW trying to remake it!
I have my own project to make the most accurate remake of SMW, something to replace rom hacking.
share the url ;)
@@saroule I have a video of it in my channel, I believe it has a download link. That's actually an old version, I rewrote it from scratch and that ended up being used on a demo game from a friend, the game is named TeamJumpers 2.
@@NaitorStudios thanks good to know. I saw it on steam. thanks. Oups windows only. I can't use ;)…
My buddy sent me this video as we were discussing Godot game dev. He made it sound like the series was all done, haha, so the withdrawal hit with full force as this video ended.
I went and looked through the entire channel’s upload history and I found the Super Mario World stuff very delightful. Even the 15 year old videos are enjoyable and a little inspiring. It’s a very nice UA-cam channel. This new video series is especially great, though, and your voiceover is very effortlessly good, friendly and clear. I’m excited to see where things head.
I am so glad you're turning this into a series! Learning about the physics and game mechanics underlying Mario has been so interesting, and I really appreciate your approach to teaching Godot by first understanding the problem and then exploring the various ways it can be solved. Can't wait to see the next one!
I think I've learned more from your 2 videos than I have any other tutorial. I really want to make games that emulate the Snes, but I always end up fighting godot instead of working along side it. Thank you so much, very inspirational.
As someone who's been playing Super Mario World and Super Mario Advance 2 since they were four, the physics in your remake look incredibly accurate (minus maybe the hitboxes on certain things). Super good work
As someone who's been learning Godot recently as well, it's fun to see/learn alongside all this progress
Keep it up !
(Also, using packed scenes in a tilemap is insanely useful information I never even thought of before ! very neat)
Hey, love this series of video ! Highly entertaining and lots of learning value. Waiting to see what's next !
At 4:13 you say you can't put logic in a tile form a tilemap. If you don't already know that, you can write a script that looks for block tiles in your tilemap, erase them and create an instance of your block scene at that coordinates. Pretty neat !
Glad you enjoyed it! I ended up using scene collections (see 8:40), which I think are achieving basically the same thing.
glad I subbed yesterday, didn't have to wait that long for part 2 :)
Super Mario World was a HUGE part of my childhood and it makes me so happy to see you put a lot of effort into this small project! I'm also really glad you're doing it "the better way" with Godot's systems and not the exact SMW way. Please continue this project, I am SO EAGER to play it.
These are the most entertaining Godot videos I've ever seen. You are a really talented communicator.
I was just rewatching the first one! Can't believe it! Going to watch *quite* attentively.
the marios popping out of the question blocks had no right to make me laugh so hard
FINALLY!! I just watched the previous episode a few weeks ago, and it was probably my favorite devlog thingie videos I've watched, and so is this one!
Nerd here, I really loved your video!! I was patiently waiting for Part 2 and it was worth it!! I like the way you're referencing the original Game and explain everything. There is so much to learn ❤
Hi there! I'm just barely starting out on my journey of making a 2d platformer and I've been absolutely adoring this series so far, it's super informative, relaxing to watch and for my little ADHD having brain it really manages to hold my attention, keep up the great work Wye!
your videos have been teaching me godot better than any tutorial i could ever find, i really enjoy your explanations and id like to see more !
This is truly incredible, whether it feels the same is hard to tell, but visually it looks like you nailed it
Super amazing series which uses a familiar game with fantastic physics to explain. Thank you so much for making this!
It's here! I waited weeks and part 2 is here!!
ive been using Godot for 4 years and i still get a lot from watching this... GREAT VIDEO !!! LOVE IT !
studying stuff that already exists is a good way to learn how to make stuff. i've already tried my hand at pong and flappy bird, which aren't the most exciting projects, but trying to add my own twists is hard. i've got a lot to learn
really interesting learning about the inner working of mario world, one of my favorite games, and seeing you recreate it so well. really insightful stuff, also relaxing. keep up the great work!
This devlog series is probably one of my favorites on youtybe. Endlessly entertaining and super high quality stuff.
Sick video on all fronts! Writing, editing, development, voice over, etc!
heres a interesting, more performant way to tackle the blocks,
theres a function in the tilemap node that converts in game coords into tile coords, which then allow you to basically check what tile of the tileset is at that tile coords of the tilemap.
then you can just check the tile at the position above mario when hes jumping up (not when falling ofc), allowing you to simplify the block bounce fx to more of a visual fx rather than normal objects you have to place manually in the level
basically the standard way for object to interact with tilemaps :
1. get object position
2. convert position to tile coords
3. check data of tile at tile coords
4. code goes here after
Loving this series! As for the source code, as long as all the basics are there, I'll be infinitely grateful! I've been wanting something like this forever and I started making my own, but I couldn't quite get Mario's physics right. Having the source code will help me learn better as well as give me the foundation to make something I've always dreamed of making! Looking forward to it!
Woah, I didn't know tilemaps could manage scenes like that! That's so useful!
I'm making a platformer in Godot and these videos are helping me a lot in which things should i consider when making these types of games.
its a cool job you're doing here 👍
First of all, love this series 👏 👏 👏 Learning that I can put scenes in a TileMap is a GAME CHANGER. THANK YOU 🙏 ❤
So far Im really enjoying the in-depth explanations of all of these mechanics that seem so simple at first glance. I like.
This is amazing as I'm just now learning Godot myself. The only thing a total noob like me could probably tell you (if you don't already know) when you are setting up collision for your tiles in the tilemap is to create the physics layer, select all the tiles you want to have collision, then in the select tab under your physics layer hit "F" on the image. It will create the default square shape on all the tiles so you aren't having to create all 4 points every time and then you can just select one tile at a time to edit it the way you would like.
Little suggestion/musing/whatever- while using inheritance for block behaviors is good, I think it would be a better idea for the Mario controller to be the one checking for interactions with blocks and then 'asking' the block scripts what should happen. You can also replace the area2d interaction points with raycasts, but it doesn't matter too much. While the main reason to do this is because it reduces the amount of collision checks being done and thus is a performance benefit, I find it significantly easier to debug in the long run also. Plus, without having too much familiarity with SMW source code, I reckon it would be more accurate to the original - as you said, in the original game the 'blocks' are not sprites but background tiles.
Excellent work. This really sells how useful Godot is for game-making too.
13:52 i can imagine some fun wacky levels with this
I'm really glad you're trying to follow the same transpiled logic as the original game, I really wanna do something similar and this series makes me happy because it's literally what I would imagine myself doing.
I did not realize you could add generic sprites to tilemaps. Super useful to know! Great work! Enjoying the series!
18:47 I noticed that little bump off side of the one-way platform. Pretty sure that's not in the original, so I wonder if we'll see that fixed next episode.
man as you dive into the mechanics it's like... as complicated as you imagine any given part of the game was to develop, it's probably actually 5 times more complicated than you thought. it's a miracle they ever managed to make it.
The videos are honestly just a really nice overview of how you can do certain things in godot, even if they aren't explicitly a "tutorial"!
i saw the first part a few days ago and the idea had me hooked. glad to see more, ty
Excited for you to tackle the world map!
I CAN NEVER KNOW I CAN PUT SCENE IN TILEMAP WITHOUT THIS VIDEO THANK YOU SO MUCH
This is one of my favorite series on youtube and its only episode 2. You're so good at explaining things! Keep it up bro this is top tier stuff.
im really enjoying this series so far ! as someone who's got no experience with godot yet and is looking into making a 2d mario fangame, it certainly helps with my confidence to see someone else tackle a similar goal. i'll probably reference your code a lot when you release it haha
Wait, this is a great video, I love it. I definitely didn't expecting to find gold. Keep up the good work!
Welp, you just taught me two things about Godot 4 which would become really handy. I didn't know TileMapLayers could hold objects, too, nor did I know that autoload is a thing. Thank you!
Also, with the coins, you can just use a custom signal. That's how I'd do it, at least.
I have an ambitious coding project using what was going to involve snes register values during SMW gameplay as live value inputs for a custom program that drives a wholly unrelated piece of tech. But this project of yours seems like it will blow the doors wide open for more possibilities! It’s exciting to see your progress!!
I love how random dev logs can teach a lot about coding. Still kinda new so I had no clue about inheritance or putting scenes in time maps.
One of the best tutorials on here. Please keep it coming.
Didn't think this video would be this good, it exceeded my expectations. I'm starting to learn Godot but I might go with something simpler than that... GG vid keep it up
The nice thing about composition over inheritance is that you can swap out the inner object during runtime, which can be very helpful for things like dependency injection. I'm curious to see how you'd use it here! Awesome video!
watching the progress on this is soo cool, hoping to see more of this!!!
I've also been doing some Mario prototyping myself in Godot. Upon watching your video, I realize I should probably group game entities a lot more than I currently am. So thanks for your insight, wye!
These videos are so well made and the music just perfectly matches whatever you're doing.
This video seriously gave me inspiration to try to learn Godot again!
Thank you for the high quality videos you produce, i seriously can't wait for the next video or the next project!
Another awesome video in this series!
A few thoughts:
- For blocks that can be hit, I'm curious if an AnimatableBody2D would serve you better for stuff like interaction with other objects. The key change for this one is you can actually update the position and have it affect the position of other things in game.
- Collision shapes can actually tell you what has hit them, but only when using move_and_collide which doesn't make sense in this game. I just wanted to point it out in case you end up needing move_and_collide in the future.
- I will be curious about your experiments with composition for blocks/entities! Godot much prefers that method. I wonder if you end up with some sort of combo. Composition for base entity/enemy then some inheritance for types of koopa troopas for example.
- For Mario's collision, I wonder if a capsule shape would work instead? This would allow you to slide around blocks just a bit and not get stuck on things? This is somewhat common in platformer to get some of this.
Really excited to see more and be able to look at the player controller more if you get to post the code!
Edit: cape physics..... that will be interesting to see if you decide to try to create it!
You have no idea how long I have waiting for this. Thank you.
As a new game dev using Godot, it's so fun to learn along side you! Keep it up please ❤
Please more! your audio is fine and I love your descriptions!
Love the video!
one thing I'd like if i could tell what's your recreation what what's the original game.
but every thing else is incredible
can't wait for part 3!
Hell yeah, king wye is cooking again!
Many of the things you talked about here sound awfully familiar to things I'm doing in my job. We also handle "level collisions" and "entity collisions" separately. (And yeah, we also call them "entities").
If you ever get further into implementing enemies, I'm really curious to see how far you'll get using just inheritance alone. In my experience, inheritance can be a very useful tool for a limited range of use cases, but you'll eventually run into issues once things diversify too much. I had this problem when creating entities in our prototype using inheritance. Let's just say it really wasn't a long-term solution. For our acual game, we've created our own implementation of an ECS (entity component system), which solves many of those issues. Basically, whereas inheritance tries to describe entities based on what they are, an ECS more so tries to describe them based on what they can do. An ECS an inheritance can be combined, though the latter will usually be used quite sparingly in that case. I'd say it only makes sense between entities that are very, very similar.
I don't know if Godot actually features any built-in ECS implementation (even Unity and Unreal Engine only added support for ones in recent years), but I feel it would work wonders for an SMW recreation. In fact, I'm like 70% sure the original SMW featured something similar to an ECS (based on some code I saw in a disassembly, and also based on the fact you can customize original sprites so easily via the Tweaker application). So hey, since you probably want to gain some general game dev experience along the way as well, it's probably worth looking into an ECS. There's even some open-source implementations around, like EnTT or flecs.
Awesome. I appreciate that you will open-source the project
An amazing explanation of Inherited Scenes.
11:09 : that's a lots of detailed ❤
Super fun watch! Learning more about Godot every day! And hey, quality so good that even UA-cam thinks it's Super Mario World!
I'm loving these videos so far! Godot is a really nice engine and it is nice to see that it is beginner friendly enough to learn from scratch!
Holy cow was this worth the wait. This is so fun to follow and I am learning about concepts and features I never knew existed in Godot! Keep up the awesome vids!
I have decided I will watch this series and apparently there are only two videos for now so I’m subbing and hitting the bell. Please don’t end the series.
For updating the coin count, you night want to look into creating an Signal/Event Bus autoload node to help manage communication between different nodes. The idea is that it's an autoloaded node containing lots of different signals, which any node can connect it's own functions to through code (using the Observer pattern to be technical). In your coin case, you might have the UI subscribe to a 'give_coin' signal on the Signal Bus that coins will fire off when they are collected, so it knows when to update it's internal counter. As it is right now for your coin implementation, you'd be trading out one autoload for another, but a Signal Bus could be reused in many different ways for lots of different signals to facilitate communication between far more than just the coins and players (meaning you can just add a new signal for something like lives).
awesome video , i like your way of talking and the approach on making some existing things but in the godot way( modern way)
Excellent, informative, entertaining and chill. Very nice video overall about the pinnacle of platformers, well done!
You briefly mentioned SPAWNING/DESPAWNING and this is one aspect that I find fascinating and there's a huge variety in how games from that time period handle that. If memory serves me well, SMW does have a bit more complex system, whereas many other games simply make the "entities" disappear when exiting the screen. At this time it was quite normal that you couldn't freely move back around the level, so that was basically the reason why a complex system was not needed. A common strategy in some games was to get the enemy outside of the screen instead of killing it.
In SMW you need to at least save some of the information about what has been interacted with and how entities are still "alive" and what they are doing when outside of the screen.
This would be interesting to hear more about - if you find it interesting too ;)
Cheers and all the best! Looking forward to the cape physics but also the different Yoshis and the really convoluted special stages with lots of secrets and hidden exits - if you have the patience to go that far.
This series is completely awesome. Thanks for sharing! :D
my god, i didnt realize how hellish cape physics were gonna be until you mentioned it!
This is just fantastic. I have been playing the original (off and on) since the 90's and yours is difficult to distinguish from it ( apart from some animation change silliness when mario goes from running to jumping.)
Very well done. Please be careful not to draw the attention of Nin***** .. I want to see more of this and they ruin everything!
i know well im not into coding or anything but man your videos are just super entertaining, i never fully watched game development videos except you and dani, keep it up you will grow big one day!
I am indeed a nerd and this video is epic! You have some real talent.
I'm wanting to get into solo game development as a hobby and honestly watching this makes me so excited to get started (after finals are done of course lol)
Dope, remakingg one of the first games i've ever played in my life, Nice deep dive!
I feel this series should be called "Making Super Godario World", though it's probably just me thinking that.
That's actually a fun & smart idea!
I could imagine replacing all the sprites with custom Godot adjacent themes and likeness this project could easily become like a preview/project demo for the engine's capabilities and simplicity in features.
@@AkaNoBaka Ok cool idea... but I feel that's a lot of thought stemming from a pun I thought of in 2 seconds. But I'd certainly watch a series on that.