Language…
12 users online:  Atari2.0, Cristian Cardoso, Danik2343, Green, Hammerer, howardadam1126, marvisjj, masl, Oskise, RenkoV2, SpacePea,  Telinc1 - Guests: 233 - Bots: 324
Users: 64,795 (2,377 active)
Latest user: mathew

Yoshifanatic's ASM Showoff: The Prequel

Hi guys! :) It's been a while since I was last on SMWCentral. So, how have you guys been?

Anyway, some of you might be curious about what I've been up to lately, huh? Well, other than a bunch of things unrelated to this thread, I've been taking a break from SMW hacking for a while. Then, about a month ago, I decided to get back into working on my next hack. However, I quickly realized that if I continued with my hack the way it was, it would potentially become unmanageable,due to how messy things were getting. So, I decided to port things over to a new ROM. And by that, I don't mean that I ported over stuff to a clean copy of SMW (which would be impossible to do anyway, due to how my hack is set up). Rather, I'm building a new ROM using code from the old one with some new code to tie things together.

In other words, my hack is more like a homebrew now than it is a SMW hack.

Yep. My hack may look somewhat like SMW on the surface, but with some new additions or omissions, but it's definitely not SMW internally. If any of you think I'm kidding, I can post the source code* or you could step though the code of my hack with a debugger and you'll notice that it barely has anything in common with SMW besides a handful of routines (and even then, those routines use different RAM addresses, are located in a different place, and may have additional code or been shortened). But anyway, by making my hack more like a homebrew, I have far more control over things compared to before. I'm able to change whatever I like to suit my needs as well as optimize stuff further than would be possible otherwise. Of course, this comes at the cost of being able to edit my hack in Lunar Magic, but it's not going to be too big of an issue (plus, LM will still be useful to me for some things, like its map16 editor).

There is still quite a few things I've yet to implement into my hack, but I've got a decent amount done. Here is a few things I've done:

- Changed the level data format to allow me to have much larger levels of various dimensions
- A file select screen, which has an options screen, a name entry screen, a difficulty selection, and a copy file function, in addition to a file select and erase file function.
- A free look camera, allowing you to pan the camera around freely in levels, but only while the game is paused.
- A new NMI routine that is both quick and very flexible (I'll post a link to it, since I'd like to get some feedback on it).
- Ported over various patches, such as the 64x64 Nintendo Presents logo, AddmusicK's engine (+Vitor Vilela's sample streaming), Lunar Magic's VRAM patch, VWF Dialogues, LevelASM, and more.
- Converted Mario into a normal sprite and made his logic and graphics code run on alternating frames.
- Moved the main sprite loop to be within the main program loop and added a few slots reserved for non-sprite related tasks (ex. The game stores the pointer to the level camera routine to this table when loading a level. If I need a different camera routine to be used, I can change the pointer so that the previous camera code is no longer processed at all).
- Mode 3 title screen (I'll likely make it so that a demo will play if you wait on this screen, but that will be for later).

For a full list of all the stuff I implemented, I provided a text file in the download.

Speaking of which, here is a link to my hack if you guys want to see it:

Link

Here is my NMI routine:

Link

And here are a couple .gifs showing some of the stuff in my hack:


Huh, who would have thought that the SNES also had blast processing?


Whoa, slow down Mario! I don't think even Sonic runs that fast!

Yeah, I raised the speed cap in my hack, though not so I could have faster speeds, but rather so that I could speed up the routine that handles that. Me being able to define a greater range of speed for stuff to move at is a side effect. In the first .gif, Mario is moving at 16 pixels a frame (though because Mario is running his logic code at 30 FPS, it's more like 8 pixels visually). In the second .gif, Mario is moving 24 pixels (12 visually). I don't think I'll be using crazy speeds like that though, unless I can think of a different way to handle block collision that can handle high speeds like this.


This is a 4 screen by 4 screen level in all its glory.

I changed how my hack handles level data so that, rather than SMW's rigid way of doing it, my hack uses a more flexible way of doing it, where the game stores the level data based on how many rows and columns it has. So, the first X bytes are the topmost row of the level, the next X bytes are for the row below that, and so on, where X is the number of columns. Since I allocated 16 KB for the level data, the max level sizes are 73.1x0.9 screens, 1x64 screens, and 8x8 screens.


Introducing the free look camera! It lets you see stuff! Mind blowing, ain't it?

This works pretty much like you'd expect. Scroll around with the D-pad, camera won't scroll where it wouldn't normally, press A/Start to snap the camera back to Mario and exit free look mode. Currently it doesn't take sprite loading into account, but I have yet to implement my sprite loading code or any non-Mario sprites in my hack, so that will be for later.


File select 2.0

Here is a quick overview of my file select screen. What you see here is 100% of my code (not counting the stuff that occurs outside the file select game mode, of course).
Fun fact: In my hack, if your save gets corrupted and the backup of that file is fine, then the game will overwrite the corrupt save with the backup file's data. That way, you won't be forced to start over if something went wrong. SMW doesn't do this even though it keeps backup saves.

Also, since I changed how things are handled internally (in addition to how the level data is handled), some of you might be wondering: "Yoshifanatic, how are you going to make levels for your hack when you can't open your hack in Lunar Magic anymore?" Yeah, I realized that that would be an issue when I decided to recode my hack. But to answer this hypothetical question, the answer is pretty simple:

I made my own level editor.

Since creating level data through hex editing would have been too tedious, I decided to use my ASM knowledge to create an SNES ROM that functions as a level editor for my hack. It's currently a beta, but at the moment, it can:
- Place individual map16 blocks on layer 1
- Place sprites
- Place entrance locations
- View the current palette
- Change level settings

It's nothing compared to Lunar Magic, but it gets the job done and it allows me to be able to visualize the levels as I'm making them. There is still a lot of things that I'd like to add to it, though. Specifically:
- Support for controller 2, so I can map more functions to buttons
- A layer 2 editor (only for level data. BG tilemaps will be made with other tools).
- An HDMA editor (if I can figure out how to implement it in an elegant way)
- The ability to edit the palette in the palette editor
- A gradient function for the HDMA and palette editors (assuming I can figure out how to do that)
- Audio
- The ability to place a formation of map16 blocks down so things that require multiple map16 tiles to look/work right like pipes are easier to place.
- Making the cursor change its appearance so it looks like the object you're placing down.
- Make the VWF dialogues update all displayed text instantly when needed.
- Change the UI to make it more intuitive.
- Various bug fixes

Here is a link to my level editor if any of you would like to try it out:

Link

I provided a patch that will let you insert the level you make into my hack, although only a handful of things you can change in the editor are actually implemented in the main hack.

Anyway, I'll likely make a video or two showing off the level editor, but I'll do that later. For now, here is a .gif giving a quick overview of my level editor, plus a video showing off a bit more:


Hey, I found a use for Mode 4!
Video Link

If you're going to change the map16 values you're placing here are some pictures showing what the tiles look like:



Also, there isn't any error checking in place if you try to place something invalid, so I recommend making a savestate before trying to place a new thing down or load a GFX file.

Also, regarding the stuff I showed off last C3, almost none of those things were touched recently. The only things I did touch were the dynamic sprites (made more sprites dynamic and modified my upload routine) and the name entry screen (rewrote it as part of my new file select screen). I was also in the process of converting every sprite into a normal one for the purposes of simplifying how they are handled (extended/coin/minor extended/score/etc. sprites would still get their own slots though, it's just that they would use the same RAM and routines as normal sprites for the most part).

Anyway, I hope you guys liked what I had to show off this C3! :)

Bonus:

As if the death animation in my hack couldn't get more over the top. XD
Video Link

This is not present in the new version of my hack currently, but it is in the version before I decided to start over. This is a mode 7 cutscene I made a while back that will serve as a special death animation in my hack. It's still a WIP, but it's almost done regardless. The only things missing are an explosion effect and sound, and making Mario's head move differently (the only reason he moves diagnally before moving towards the screen is because I was testing the code that allows me to manipulate a Mode 7 tilemap. It's handled similarly to how SMW's title screen demo is handled)

*Note: The source code has some disassembled LM code in it, which I told FuSoYa I wouldn't post. However, the only LM code present is 2 small routines (one related to the extra map16 pages and one used during loading that delays the loading from finishing until NMI ends (I think that's what it does)). There is also the VRAM patch, but that's technically smkdan's patch, and the I'm not really using the code that LM added to that patch.
My Hacks:
Mario's Strange Quest V1.6
Yoshi's Strange Quest V1.3 / V1.3.1 Beta 4.6
Mario & Yoshi's Strange Quests (2/10/2023 Build)

Other stuff:
My SMW/SMAS/SMAS+W disassembly
Yoshifanatic's Discord Server: A place for fans of my stuff and/or Yoshi to chat with others.
I'm astonished. Especially with the free look camera and file select.
MK2TDS
Wow, this is... Incredible! Anything homebrew is mind boggling in its complexity, and I applaud you for the effort and guile.
Wow, I'm blown away with what you've done. Especially that level editor and the file select.
Layout by RanAS, modified by yours truly.

Holy cow, that death animation! Funny as hell, man. NICE work on that one. Oh, and everything else. Everything else looks nice too.

NICE.
Your layout has been removed.
Well, I'm impressed. I really would like to see more people doing homebrew. I hope you continue work on the hack and ASM (not that I'll ever play it, if it's inspired by IWBTG).

Though I do have a few questions and things to point out:
- The intro and title screen are glitched in the newest higan (well, one of the newest ones, anyway...I currently have 0.98).
- Are Mario's physics supposed to be that slippery? Because if so, that would take a lot of getting used to. (Reminds me of when I tried to play that Donkey Kong Country 4 fangame...that was rather painful.)
- Is there any particular reason you used LZ2 rather than LZ3?
- Are you still planning on keeping block objects (things like pipes, doors, and ledges), or will the foreground data just be inserted as block numbers and then compressed?
- By "wide", don't you mean "tall" in the level settings?
- What are you doing with sprites that they need 16 bytes of data?! Even Tessera and Daiyousei only use 7 when maxing out the extra bytes (to 4), and expanding the level size like that shouldn't need more than 1 additional byte...
- Do levels support all 8 BG modes?

----------------

I'm working on a hack! Check it out here. Progress: 64/95 levels.
Originally posted by Blind Devil
I'm astonished. Especially with the free look camera and file select.


Originally posted by allowiscous
Wow, this is... Incredible! Anything homebrew is mind boggling in its complexity, and I applaud you for the effort and guile.


Originally posted by Mogu94
Wow, I'm blown away with what you've done. Especially that level editor and the file select.


Originally posted by amhunter
Holy cow, that death animation! Funny as hell, man. NICE work on that one. Oh, and everything else. Everything else looks nice too.

NICE.


Hey, thanks for the support! :)

Originally posted by imamelia
Well, I'm impressed. I really would like to see more people doing homebrew. I hope you continue work on the hack and ASM (not that I'll ever play it, if it's inspired by IWBTG).

Though I do have a few questions and things to point out:
- The intro and title screen are glitched in the newest higan (well, one of the newest ones, anyway...I currently have 0.98).
- Are Mario's physics supposed to be that slippery? Because if so, that would take a lot of getting used to. (Reminds me of when I tried to play that Donkey Kong Country 4 fangame...that was rather painful.)
- Is there any particular reason you used LZ2 rather than LZ3?
- Are you still planning on keeping block objects (things like pipes, doors, and ledges), or will the foreground data just be inserted as block numbers and then compressed?
- By "wide", don't you mean "tall" in the level settings?
- What are you doing with sprites that they need 16 bytes of data?! Even Tessera and Daiyousei only use 7 when maxing out the extra bytes (to 4), and expanding the level size like that shouldn't need more than 1 additional byte...
- Do levels support all 8 BG modes?


Thanks! :)

Also, my hack is inspired by IWTBTG, but I do plan on using this customized SMW engine for my future SMW hacks so it's not just going to be for my kaizo hack.

Anyway, to answer your questions:
- That's odd. I've been using a debug version of V073 in compatibility mode, so maybe I missed something. I'm not sure why it would be glitched, though.
- Mario's physics are a bit messed up because his logic code runs every other frame instead of every frame, and I had to adjust his physics to make up for that. Not to mention that I want to rewrite SMW's physics code because it looks messy and unoptimized. Getting the physics right is one of my top priorities, so the slippy physics shouldn't be a thing when I go to release a playable demo.
- No real reason. If LC3 compression is both faster and compresses better than LC2, I'll replace the LC2 compression routine. Is there a patch for it somewhere? If not, I'll have to disassemble LM's one.
- FG objects no longer exist in my hack, so it's the latter.
- Yeah, I meant tall. Stupid typos. XD
- I wasn't sure how many bytes I would need for the sprites in the sprite list, so I decided to set it to 16 for the time being. As for what they're being used for: 16-bit sprite number, 16-bit X position, 16-bit Y position, sprite table index*, and initial sprite properties. Not counting the last one, that's 8 bytes. With the last one, I don't know how many bytes I'll need. Those remaining bytes will be used to set sprite parameters, like how much HP the sprite has, what state it spawns in, how fast the sprite moves, etc.

Alternatively, since the sprite list is stored in RAM, I could set things up so that the game keeps track of where every sprite is in the level (but only X are actually processed at a time, of course), so if X sprite is loaded at Y position, then despawns at Z, then it will spawn again at location Z. Depending on how I handle this, I may have to reserve way more than 16 bytes. XD
- Not yet. However, since my hack uses layer 3 to display the game over text, that complicates things. Then again, since I'm going to eventually make it so that every section of the game is considered a level, I could use any of the other BG modes in the levels that aren't "levels" (ex. The file select screen).

*My sprite loading uses a linked list so that it skips over blank entries in the list. If it encounters a blank entry anyway due to a sprite deleting its entry in the list, then the game adjusts the index for the previous valid sprite so that it won't read the blank entry again on the next frame.
My Hacks:
Mario's Strange Quest V1.6
Yoshi's Strange Quest V1.3 / V1.3.1 Beta 4.6
Mario & Yoshi's Strange Quests (2/10/2023 Build)

Other stuff:
My SMW/SMAS/SMAS+W disassembly
Yoshifanatic's Discord Server: A place for fans of my stuff and/or Yoshi to chat with others.
Me while looking at these



Seriously, there way too few people doing homebrew, and even fewer making proper homebrew. I'm really looking forward to seeing your hack released nowadays.
And who knows, maybe someday your larger levels will be handled by Lunar Magic. Personnally, I'd find that awesome.
You have my vote for best ASM, that's for sure. #smw{:TUP:}
File select reminds me of super mario rpg.
Awesome stuff! Liked that IWBTB thing at the bonus!
Bye.

Holy Crap man, you have been busy o_O

Excellent work on all of these! And Welcome back ;)
Layout by LDA during C3.
DANG! This is awesome ASM'ery! I don't know who to vote for as the Best ASM showcase anymore...

The free camera thing might work in one of my hacks, if I can help it. Thanks for your showcase.
Just so you know, I'm very active on the site anymore like I was before; I'm mainly on Discord now.
This looks zany as hell. I love it.
Mirroring what others said, you've truly done a great job.
I wonder what a HFD opcode would do in ASM...
Alright, I made a video showing off the level editor a bit more in depth compared to the .gif. Here is a link to it: Link


Also, have any of you given the editor a try? While it's only intended to be used by me (unless I decide to partner up with someone or something), maybe one of you guys thought of something that could make it better? I'd love to get some feedback on it. :)

Originally posted by Mathos
Me while looking at these

*Insert picture here*

Seriously, there way too few people doing homebrew, and even fewer making proper homebrew. I'm really looking forward to seeing your hack released nowadays.
And who knows, maybe someday your larger levels will be handled by Lunar Magic. Personnally, I'd find that awesome.
You have my vote for best ASM, that's for sure. #smw{:TUP:}


Thanks! ^_^

Yeah, there are too few people doing homebrew stuff (at least on the SNES), but it doesn't surprise me. Creating your own game from scratch (or mostly from scratch in my case), especially if you're making a full fledged game, requires a lot of skill, time, and patience and not everyone is willing or capable of doing it.

As for my hack, I'll eventually release a demo with actual levels in it, but that won't be until I get the physics right and implement most of the things I have yet to implement.

Also, that would be cool if Lunar Magic actually supported my way of handling the expanded level sizes, but that's even less likely to happen than if Lunar Magic were to support Alcaro's way of handling larger levels. I'm not too sure how Alcaro's version works exactly, but it seems closer to how SMW handles its levels than my version does.

Originally posted by willian125677
File select reminds me of super mario rpg.
Awesome stuff! Liked that IWBTB thing at the bonus!

Thanks! :)

Also, the file select screen looks similar to the pause screen in SMRPG, other than the fact that the border graphics are different and they're not transparent.

Originally posted by Falconpunch
DANG! This is awesome ASM'ery! I don't know who to vote for as the Best ASM showcase anymore...

The free camera thing might work in one of my hacks, if I can help it. Thanks for your showcase.


Thanks! :)

As for the screen scrolling code, I'll likely release it at some point, but in its current state, I can't. It's because it doesn't take the sprite loading into account, meaning the player would be able to exploit this by spawning/despawning sprites at a different time than intended. I have yet to think of an elegant solution to prevent that.

The best idea I got is to preserve the RAM of all the sprites currently loaded, have the game ignore the "Process if offscreen bit while scrolling around, then when the camera snaps back to Mario, the game reloads all the sprite data as it was before. The main issue with this though, is that the game will despawn the sprites around Mario if you scroll back to Mario after scrolling away and they'll pop back into view after the camera snaps back.
My Hacks:
Mario's Strange Quest V1.6
Yoshi's Strange Quest V1.3 / V1.3.1 Beta 4.6
Mario & Yoshi's Strange Quests (2/10/2023 Build)

Other stuff:
My SMW/SMAS/SMAS+W disassembly
Yoshifanatic's Discord Server: A place for fans of my stuff and/or Yoshi to chat with others.
I actually saw your thread yesterday, but when I saw it my head exploded and I had to recover. Everything's AMAZING! That in-game level editor, the bigger levels, the death animation... You're breaking the limits like no tomorrow and it's amazing.
I saw you were inactive practically the whole time between now and the previous C3, I was scared you wouldn't come back, and I'm pretty sure I'm not the only one! If you ever leave I'll find you and I'll make you eat yoshi eggs. RAW.
Originally posted by yoshifanatic
Yeah, I raised the speed cap in my hack, though not so I could have faster speeds, but rather so that I could speed up the routine that handles that. Me being able to define a greater range of speed for stuff to move at is a side effect. In the first .gif, Mario is moving at 16 pixels a frame (though because Mario is running his logic code at 30 FPS, it's more like 8 pixels visually). In the second .gif, Mario is moving 24 pixels (12 visually). I don't think I'll be using crazy speeds like that though, unless I can think of a different way to handle block collision that can handle high speeds like this.


Is there a reason why it's only at 30fps?
DONT LET NINTENDO C&D THIS

GODDAMN

HackPortsASM"Uploader"

Just a quick update, but I've found a minor optimization to my NMI routine. I've updated the .txt file to show what I did. Basically, I'm using a different method to determine if the game is lagging or not that removes the need to preserve the registers at the start of the NMI routine. I also put in some untested code at the end of the routine that shows an idea I had to speed up the controller polling code.

Also, imamelia, I checked out my game in Higan V100 and yeah, I can confirm that there is something wrong with the intro and title screen.

For the former, it's likely caused by the fact that VRAM isn't initialized in any way and that layer 1 is set to be on the main screen (and therefore is visible). I could easily fix that by setting layer 1 to be invisible, but there is a reason why it's not.

For the latter, I'm not entirely sure why it's not loading the palette correctly. My guess is that the palette is being uploaded outside of a blank, but I do know that force blank is enabled when it does that, so I don't know.

Originally posted by Eminus
I actually saw your thread yesterday, but when I saw it my head exploded and I had to recover. Everything's AMAZING! That in-game level editor, the bigger levels, the death animation... You're breaking the limits like no tomorrow and it's amazing.
I saw you were inactive practically the whole time between now and the previous C3, I was scared you wouldn't come back, and I'm pretty sure I'm not the only one! If you ever leave I'll find you and I'll make you eat yoshi eggs. RAW.


Thanks! ^_^

Also, yeah, I was pretty inactive on SMWCentral. I really got to stop disappearing for months at a time. XD The problem though is that I just don't feel compelled to log in at times. I often feel that I don't have much to say or that hardly anyone will care when I do. It doesn't help that it always feels incredibly awkward when I try to start a conversation.

Would you believe me if I told you that it took me upwards of 5-10 minutes just to click the button to post this thread? And that it would have taken longer if I didn't force myself to do it?

Originally posted by Drex
Is there a reason why it's only at 30fps?


By making it so that sprites run their graphics and logic code on alternating frames, I'm able to reduce the amount of work the SNES has to do on a given frame, so it will be able to handle more. This only applies to sprites and certain other things, though. My game engine as a whole still runs at 60 FPS.

Of course, since Mario now runs his logic code at 30 FPS, that does means that it will have an effect on how my game plays. However, if I handle it right, then the player shouldn't be able to notice it under normal circumstances.

Originally posted by Leomon
DONT LET NINTENDO C&D THIS

GODDAMN


I don't really see why they would do that considering that I'm not making any money off of any of the things I've made). But, in the event that they do, I'd see if replacing every asset in my game that originally came from a Nintendo game with different assets would get them off my back.
My Hacks:
Mario's Strange Quest V1.6
Yoshi's Strange Quest V1.3 / V1.3.1 Beta 4.6
Mario & Yoshi's Strange Quests (2/10/2023 Build)

Other stuff:
My SMW/SMAS/SMAS+W disassembly
Yoshifanatic's Discord Server: A place for fans of my stuff and/or Yoshi to chat with others.
I just hope the actual game is smoother than the GIF images.
^lmao

yeah I cant believe I missed this thread! You never fail to amaze me with your incredible work, and this definitely exceeded all my expectations (as high as they were)!
Tho if I were you I'd probably stay away from the direct IWTBTG references, that looks like less of a homage and more directly copying. Stuff like that runs the risk of breaking player engagement. Just a thought.

I cant even pick a favorite. Everything here is just so awesome. Great job!! :D
ask me if i give a f*ck...