Language…
9 users online: AnEvilGhost, DasFueller, hoangng, RoboticMouse,  RussianMan, steelsburg,  Teyla,  Thomas, Tulip Time Scholarship Games - Guests: 119 - Bots: 239
Users: 64,666 (2,405 active)
Latest user: Dongulusrift

Yoshifanatic's ASM Showoff: The Sequel to the Prequel's Prequel

  • Pages:
  • 1
  • 2
Happy C3 guys! :)
Unlike my past C3s, I'm just going to cut to the chase and immediately show what I'm going to show off:

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

- My WIP SMW Disassembly
My WIP disassembly of Super Mario World. More info about this down below.

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

- Hammer Bro Fix
Bug Fix patch that allows you to have more than 1 hammer bro loaded in memory.
Note: Currently breaks with the SA-1 patch, and I don't know why.



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

- Bonus Game Midpoint Fix
Bug Fix patch that fixes the bug where dying in the bonus game sets the midpoint flag. Also frees up $7E1DE9 on the overworld.

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

- Fireball Conveyor Slope Fix
Bug Fix patch that fixes the bug where shooting a fireball at a conveyor slope causes the fireball to teleport.
(Note: Thomas already made a patch for this. However, I made this one before I realized that. My patch uses a different hijack location and takes up fewer bytes than Thomas's, though, but Thomas's might still be better).

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

- Yoshi Egg Fix
Bug Fix patch that fixes the bug where spawning 2 or more Yoshi eggs from blocks before the first egg hatches causes all of them to hatch into adult Yoshis.
Note: Currently breaks with the SA-1 patch, and I don't know why.



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

- Vertical Camera Panning Patch
Patch that adds the ability to scroll the screen vertically by holding up/down.
(Note: I posted this in a previous C3, but I'm now officially releasing it. It's also been updated to support the SA-1).



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

- Spike Swim Fix Update
Update to Alcaro's version of this bug fix patch, which truly fixes the bug. Alcaro's version doesn't fix the root cause of it, and it's still possible to trigger the bug (it's caused by swimming on the same frame you touch a hurt block. Holding down has nothing to do with it, it just makes it easier to trigger).

Here is a .gif showing me triggering this bug without pressing down in any way:


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

- WIP ASM Tutorial
For the past several months, I've been tutoring Final Theory on ASM coding. Here is an archive of the lessons I gave him ripped straight from the Discord chat with some slight changes. At the time of this writing, I've given Final Theory 5 lessons (Binary, Hexadecimal, SNES Memory map, Loading/Storing, Branching)

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

- My Discord Server
A link to my Discord server. If you have a Discord account, you're a fan of my work, are a fan of Yoshi or like ROM hacking, you're free to join.

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

Bonus:
HDMA Fade Fix

This patch will make HDMA gradients fade out during level end by buffering them into the RAM (which also means you can make your gradients dynamic if you know what you're doing). It also fixes a couple issues that cause HDMA gradients to disappear as well as prevent them from appearing on the Mario Start! screen. Must be used in conjunction with UberASM and is not SA-1 compatible yet.



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

Now that I've shown off everything I planned on showing off, for those of you that want to learn more about what I've posted just now, get your mountain climbing gear ready! : P

Alright, regarding the disassembly, some of you guys are aware of the update to my hack, Yoshi's Strange Quest, where I added the entirety of Mario's Strange Quest to it. That would not have happened without using galaxyhaxz's SMW source code. However, by April 2018, the incompleteness of it along with some bad decisions on my part (like not properly keeping track of where I made changes to SMW's code) was starting to become a problem. Since galaxyhaxz has pretty much lost interest in working on the source code, I've decided to take over this project and pick up where he left off. Here is a list of things I've done to the disassembly so far:

-----------------------------------------------
- Every known WRAM/SRAM/VRAM address reference uses a define.

- RAM addresses with multiple purposes other than scratch RAM get their own labels for each purpose

- Lots of different notes regarding glitches, code that can be optimized, and other things to note.

- Isolated the code/data for lots of routines to make it easier to tell what code/data belongs to which routine.
+ The vast majority of the various sprites types have been isolated. The only exceptions are bounce, scroll and cutscene sprites.
+ Every object has been isolated.
+ Everything executed during NMI/IRQ has been isolated.
+ Most of the ending code has been isolated (Credits/Enemy Rollcall/The End).
+ Banks 0, 1, 2, 4, 5, and C have at least half of all their contents isolated. Bank 3 is very close to being fully isolated, and banks D, E, and F have their entire contents isolated.

- Added a system where code/data that belongs to a given routine can be grouped together while being able to be inserted at seperate locations.

- Changed some of the label names to be more descriptive (ex. "NintenDMAINIT" to "UpdateEntirePalette").

- Various tables have been modified to better reflect how they're handled in game.

- Various Lunar Magic hijack locations are noted (none of this information is more detailed than what one would expect from the hijack map).

- A system to integrate asar patches into the disassembly with minimal changes to the original disassembly

- Fixed some oddities with the disassembly (ex. The weird spacing towards the end of bank 2, "DATA_02AABD" is not a table).

- Added two extra steps to assembling the ROM, one to generate a blank ROM that's the size you specify (needed to prevent asar from thinking there is no freespace when applying patches that need freespace and to prevent odd sized ROMs) and one to display the checksum of the generated ROM.

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

Here is a list of planned features:
- Every single routine being isolated into a macro.

- Support for all SNES versions of SMW (Japan, USA, Pal 1.0, Pal 1.1, SMAS+W USA, SMAS+W Pal). The latter two may only include the SMW portion of them (and hacked a bit to get the SMW portion running by itself) if I don't feel up to fully disassembling SMAS.

- Ability to tell asar to assemble a custom version of a given code/data macro.

- Ability to define a custom routine list.

- More defines for things

- A way to import data from a Lunar Magic hacked ROM

- A feature to warn you if your generated hacked ROM might not be compatible with Lunar Magic.

- A feature that hardcodes routines to their usual ROM location so that surrounding code/data doesn't get moved when moving a routine elsewhere.

- Adding more information regarding Lunar Magic hijacks, glitches, and other things.

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

This is something I feel will help out with the SMW hacking scene, especially once it's done. It's nowhere near done, but I still would like people to use it to give me suggestions to improve it. In it's current state, it will help with improving the ROM/RAM/Hijack maps, since I've documented things that aren't mentioned. It will also help with the sprite disassembly project since I've isolated the code for tons of sprites.


Also, as I've been working on this, I've been posting updates to it on my Discord server and sharing some of the discoveries I've made (some of which were turned into patches, hence why a lot of the stuff I posted for this C3 are bug fixes). Here is a sample of some of the things I found while working on my disassembly:

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

Did you know...
- That I found unused tile number data that corresponds to the positioning of the coin sprites in this image? (See $00FBA8-$00FBAB)

- That the Pokey shown during the enemy rollcall has two extra segments you can't see because they're drawn at the same position as its other segments?

- That there are turn blocks under the sumo bro on the enemy rollcall screen that are hidden under the used blocks?

- That there is partial data for a level tileset F? (Forcing a level to use it will cause the game to crash though).

- That the bonus game loading letters has data for two extra letters to be displayed? (though setting the bytes to anything besides $FF will cause garbage to display as the equivalent property bytes don't exist.)

- That the fact that you need to set $7E13CE to a non-zero value when entering the overworld to allow overworld events to run is due to a coding error/questionable coding choice? (See $048F35)

- That the Pal 1.1 ROM's graphics are compressed in a slightly different format from the other versions of SMW? (There's an extra XBA instruction in the decompression routine for whatever strange reason).

- That tile 2E in GFX 10 (loaded on the overworld in SP1) may have originally been a shadow tile? (See $04FE15)

- That loading the candle flame generator will cause the sprite in slot 03 to disappear? (See $02AA6E)

- That the glitch where bouncing on a note block can allow you to collect a coin positioned 16 screens away and one block above (as seen on screen 0B of Funky) is caused by a case of copy-pasted code? (To fix, change the $F0 at $0292AC, $0292BD, $0292FF and $029310 into $10)

- That the exploding turn block sprites may have originally spawned music notes before breaking? (Insert 2 NOPs at $02E427)


- That the layer 1 data seen on the enemy rollcall screens is actual level data that can be opened in Lunar Magic? (Use PC offsets 0x62E29, 0x62E3E, 0x62E53, 0x62E77, 0x62E9E, 0x62EC8, 0x62EDA, 0x62EEF, 0x62F04, 0x62F1F, 0x62F31, 0x62F3D, 0x62F52)

- That Bowser has a "default" palette you can't see without disabling his palette animations?


- That there is some unused castle destruction movement data? (See $00C6B6-$00C6C0)

- That the levels on the overworld are hardcoded in a very specific pattern? (Each 16x16 chunk is internally stored going from left to right, top to bottom. Within these chunks, the tiles assigned a level ID increase going from left to right, top to bottom. The fact you're not limited to placing levels this way is due to Lunar Magic's ASM)

- That the bonus game loading letters load their graphics differently from the other loading messages? This is why "TIME UP !" looks like this:

...and "GAME OVER" looks like this:

...when dying in during the bonus game. (This is caused by the SMW developers not allocating an extra 64 bytes to the loading letter decompression buffer even though they had plenty of spare RAM).

- That some things Lunar Magic displays are not hardcoded as one might initially think (ex. LM actually reads from the ROM to determine if a given level mode should display a level as horizontal/vertical)?

- That the reason the game crashes if you try to use generator D2 to stop the layer 3 smasher is because of the RTS at $02D421? (Should be changed to RTL ($6B))

- That the head of the green koopa seen during the enemy rollcall uses the wrong palette, but you can't see that due to the koopa head tile not using any of the palette specific colors of palettes A-D?

- That while THANK YOU appears on screen during the ending, the THANK gets cut off by the left edge of the screen due to not handling the high X Bit properly?


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

And that's about it. I hope you guys liked what I have shown off! :)

Oh, wait, there is one last thing. Here's a sneak peek at a small feature I plan on adding to MYSQ:


(Also, I wonder if anyone has figured out what all my ASM Showoff thread titles have been referencing?)
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.
Those are some great stuff!
For some reason I find that "Did you know..." fact about unused notes sprites the most interesting, because when I disassembled all Minors, I thought that those notes fit Whistling chucks (because whistling). Nice discoveries #smrpg{y}


The fixes looks great, Specially the Toshi egg and the spike one
You never seem to disappoint me. You're work is just... AMAZING!
Of course, the fact that you finish the assamble-able disassembly really helps on these fixes.

Also, the fun facts are quite interesting especially when looking into the code. Here are my comments to them, btw:
Originally posted by yoshifanatic
Did you know...
- That I found unused tile number data that corresponds to the positioning of the coin sprites in this image? (See $00FBA8-$00FBAB)

Given how SMW was supposed to be closer to SMB3 than it used to be and SMB3's coin graphics are all 16x16 instead multiple sizes, it makes sense (never looked at the unused data, though).

Originally posted by yoshifanatic
- That the Pokey shown during the enemy rollcall has two extra segments you can't see because they're drawn at the same position as its other segments?

- That there are turn blocks under the sumo bro on the enemy rollcall screen that are hidden under the used blocks?

Lol.

Originally posted by yoshifanatic
- That there is partial data for a level tileset F? (Forcing a level to use it will cause the game to crash though).

I wonder how the tilemao would have looked like... The crash happens.

Originally posted by yoshifanatic
- That the bonus game loading letters has data for two extra letters to be displayed? (though setting the bytes to anything besides $FF will cause garbage to display as the equivalent property bytes don't exist.)

Lol.

Originally posted by yoshifanatic
- That the fact that you need to set $7E13CE to a non-zero value when entering the overworld to allow overworld events to run is due to a coding error/questionable coding choice? (See $048F35)

SMW always was a weirdly coded game. :,D

Originally posted by yoshifanatic
- That the Pal 1.1 ROM's graphics are compressed in a slightly different format from the other versions of SMW? (There's an extra XBA instruction in the decompression routine for whatever strange reason).

Unnecessary version difference FTW!

Originally posted by yoshifanatic
- That tile 2E in GFX 10 (loaded on the overworld in SP1) may have originally been a shadow tile? (See $04FE15)


Originally posted by yoshifanatic
- That loading the candle flame generator will cause the sprite in slot 03 to disappear? (See $02AA6E)

Good that the candle flame is never activated in the middle of the screen.

Originally posted by yoshifanatic
- That the glitch where bouncing on a note block can allow you to collect a coin positioned 16 screens away and one block above (as seen on screen 0B of Funky) is caused by a case of copy-pasted code? (To fix, change the $F0 at $0292AC, $0292BD, $0292FF and $029310 into $10)

Never copy and paste codes for that reason!

Originally posted by yoshifanatic
- That the exploding turn block sprites may have originally spawned music notes before breaking? (Insert 2 NOPs at $02E427)

If the graphical difference couldn't tell you then already then the notes would have spotted the blocks immediatly.
It seems to be quite a few notes, though, and therefore limiting the amount of blocks you have onscreen. That, or the frequence might have been reduced.

Originally posted by yoshifanatic
- That the layer 1 data seen on the enemy rollcall screens is actual level data that can be opened in Lunar Magic? (Use PC offsets 0x62E29, 0x62E3E, 0x62E53, 0x62E77, 0x62E9E, 0x62EC8, 0x62EDA, 0x62EEF, 0x62F04, 0x62F1F, 0x62F31, 0x62F3D, 0x62F52)

Map16 for everything!

Originally posted by yoshifanatic
- That Bowser has a "default" palette you can't see without disabling his palette animations?

Seems like to be the turquise colour from the Buzzy Beetles.

Originally posted by yoshifanatic
- That there is some unused castle destruction movement data? (See $00C6B6-$00C6C0)

Would be interested to see them.

Originally posted by yoshifanatic
- That the levels on the overworld are hardcoded in a very specific pattern? (Each 16x16 chunk is internally stored going from left to right, top to bottom. Within these chunks, the tiles assigned a level ID increase going from left to right, top to bottom. The fact you're not limited to placing levels this way is due to Lunar Magic's ASM)

The fact that you can switch between levels 0xx to 1yy and vica versa really tells you how important Lunar Magic has become.
Also, that explains, why the level order in the overworld is sometimes a mess...

Originally posted by yoshifanatic
- That the bonus game loading letters load their graphics differently from the other loading messages? This is why "TIME UP !" looks like this:

...and "GAME OVER" looks like this:

...when dying in during the bonus game. (This is caused by the SMW developers not allocating an extra 64 bytes to the loading letter decompression buffer even though they had plenty of spare RAM).

Somewhat obvious if you know ASM but the existing space, though...

Originally posted by yoshifanatic
- That some things Lunar Magic displays are not hardcoded as one might initially think (ex. LM actually reads from the ROM to determine if a given level mode should display a level as horizontal/vertical)?

I always assumed it was the case here so not really new for me.

Originally posted by yoshifanatic
- That the reason the game crashes if you try to use generator D2 to stop the layer 3 smasher is because of the RTS at $02D421? (Should be changed to RTL ($6B))

They never were used together, so... Also possibly some development changes.

Originally posted by yoshifanatic
- That the head of the green koopa seen during the enemy rollcall uses the wrong palette, but you can't see that due to the koopa head tile not using any of the palette specific colors of palettes A-D?

Why in 8x8 tiles, though? ?_?

Originally posted by yoshifanatic
- That while THANK YOU appears on screen during the ending, the THANK gets cut off by the left edge of the screen due to not handling the high X Bit properly?

The cut of K also is something though that's more because Thank You are put together and don't use seperate graphics (though the T is more interesting). Well, both are hard to notice at the speed the text appears anyway, so...

You gotta submit some of the facts to the ROM Map!


Also, I have got a fun fact myself: Did you know that you can't enter boss doors with Yoshi at all even when small? That's because the game checks for Mario's position himself (specifically a point at around his neck) even when riding. When riding, Mario is shifted upwards which causes him to touch the top part of a door which we all know only let Mario in if he's small. Boss doors, on the other hand, are only enterable in the bottom part and riding Yoshi means that Mario is just high enough to touch the medium, non-interacting door part.
Wow thats a bunch of stuff

Originally posted by yoshifanatic
Bug Fix patch that allows you to have more than 2 hammer bros loaded in memory.

Why did you only show 2 hammer bros in the GIF then :thonk:

Originally posted by yoshifanatic
Yoshi Egg Fix

i liked that bug

Originally posted by yoshifanatic
Vertical Camera Panning Patch

wow that looks cool, didn't SMA2 do something similar?
Now this is some information density. #tb{'_'}

Everything you're showing here is fascinating! What I focused on (with this many things in one thread I'm not sure everyone can pay attention to all of it) was your SMW disassembly trivia and bug fix patches - and wow, there's so many things I didn't even know existed, let alone could do with fixing.

Can't imagine how much effort you must have put into all of this.

(title gimmick guess: the AVGN Zelda timeline video?)


 
Originally posted by yoshifanatic


lol I did a similar one, too, though in my case, I've entirely reprogrammed the vertical scroll routine to make it move "smoother" (as in, the camera accelerates and deccelerates depending on the needs). Originally, I didn't want to add a panning feature, but then I changed my mind and included an option because why not, fuck laziness.

Anyway, I'm quite fond of your work overall. Great stuff as always.
MK2TDS
Originally posted by RussianMan
Those are some great stuff!
For some reason I find that "Did you know..." fact about unused notes sprites the most interesting, because when I disassembled all Minors, I thought that those notes fit Whistling chucks (because whistling). Nice discoveries #smrpg{y}


Thanks! :)

Also, yeah, those notes would fit pretty well for the whistling chucks. When I take a deeper look at the chucks' code, I'll be curious to see if Nintendo considered doing that. However, currently, the only place I'm aware of that minor extended sprite 08/09 is referenced in a spawning routine is at $02C0CF, and this routine is not referenced in the chucks' code.

Originally posted by Big Brawler
The fixes looks great, Specially the Toshi egg and the spike one


Thanks! :)

It's a shame I didn't quite get it working with the SA-1 yet, though. It technically works with the SA-1, but instead of a 1-up, it spawns nothing.


Originally posted by MarioFanGamer
You never seem to disappoint me. You're work is just... AMAZING!
Of course, the fact that you finish the assamble-able disassembly really helps on these fixes.

Also, the fun facts are quite interesting especially when looking into the code. Here are my comments to them, btw:


Thanks! :)

Originally posted by MarioFanGamer
I wonder how the tilemao would have looked like... The crash happens.

I don't know. The FG/BG graphics loaded would be $14/$17/$14/$14, so it's impossible to tell what sort of theme it would have had.

Originally posted by MarioFanGamer
SMW always was a weirdly coded game. :,D

Yep. XD Some of the stuff I've come across while working on this make me think one of the programmers got drunk on occasion or that there had to have been some major code restructuring at some point. How else would one explain stuff like, for example, the Sumo Bros flames referencing routines not meant for cluster sprites?

Originally posted by MarioFanGamer
Good that the candle flame is never activated in the middle of the screen.


Yeah. The fact that the candle flame generator writes #$07 to $14CB when spawning suggests that this sprite may have worked differently at some point.

Originally posted by MarioFanGamer
If the graphical difference couldn't tell you then already then the notes would have spotted the blocks immediatly.
It seems to be quite a few notes, though, and therefore limiting the amount of blocks you have onscreen. That, or the frequence might have been reduced.


The reason for why they spawn as much as they do is because the routine that spawns them is the same one that spawns the Rip Van Fish Zs, just with a different entry point.

Originally posted by MarioFanGamer
Seems like to be the turquise colour from the Buzzy Beetles.


It is.

Originally posted by MarioFanGamer
Would be interested to see them.

I don't have a .gif of it, but if I remember correctly, all that happens is Mario carries the Yoshi egg a little further than normal and places the egg a bit off screen.

Originally posted by MarioFanGamer
The fact that you can switch between levels 0xx to 1yy and vica versa really tells you how important Lunar Magic has become.
Also, that explains, why the level order in the overworld is sometimes a mess...


Yeah. I can only imagine how painful it would be to make a SMW hack without some of the ASM hacks LM inserts. XD

Originally posted by MarioFanGamer
I always assumed it was the case here so not really new for me.

With how LM reads from the ROM on things like this instead of being hardcoded, it makes me wonder what possibilities would open up if FuSoYa made it possible to change the locations LM reads/writes to?

Originally posted by MarioFanGamer
Why in 8x8 tiles, though? ?_?

The sprite data on the enemy rollcall screens are not all in 8x8 tiles. The priority bits in the property byte have a different function than they normally do on these screens. One bit controls the tile size and the other one I believe controls whether the sprite should scroll left or right during the transitions.

Originally posted by MarioFanGamer
You gotta submit some of the facts to the ROM Map!

I'm considering doing that.

Originally posted by MarioFanGamer
Also, I have got a fun fact myself: Did you know that you can't enter boss doors with Yoshi at all even when small? That's because the game checks for Mario's position himself (specifically a point at around his neck) even when riding. When riding, Mario is shifted upwards which causes him to touch the top part of a door which we all know only let Mario in if he's small. Boss doors, on the other hand, are only enterable in the bottom part and riding Yoshi means that Mario is just high enough to touch the medium, non-interacting door part.


That's pretty interesting! Incidentally, I wonder why Nintendo coded it so that Mario's position is physically shifted upwards when riding Yoshi, when they could have just shifted him up visually and made Mario's hitbox taller? If they did that, they wouldn't have needed to physically offset Mario's position to account for him being on Yoshi in a lot of places.

Originally posted by randomdude999
Why did you only show 2 hammer bros in the GIF then :thonk:

I meant to say that you can have more than 1 hammer bro there. XD With this patch, you can have any combination of hammer bros and hammer bro platforms that involve more than 1 of either.

Originally posted by randomdude999
wow that looks cool, didn't SMA2 do something similar?

Maybe. I wouldn't be surprised if it did, seeing as how that would have been a good compromise for the smaller screen size of the GBA.

Originally posted by WhiteYoshiEgg
Now this is some information density. #tb{'_'}

I often don't feel like I have much to say most of the time, but when I do... XD

Originally posted by WhiteYoshiEgg
Everything you're showing here is fascinating! What I focused on (with this many things in one thread I'm not sure everyone can pay attention to all of it) was your SMW disassembly trivia and bug fix patches - and wow, there's so many things I didn't even know existed, let alone could do with fixing.


Thanks! :)

And that's only the tip of the iceberg. There are quite a few other things I've noticed while working on the disassembly that I didn't mention, like some of the SMAS+W code I've disassembled (such as how Luigi's separate graphics are handled), the fact that a chunk of $7EB900 is used on the overworld for the switch block sprites, the fact that many of the enemy rollcall screens' sprite data is very disorganized, etc.

Originally posted by WhiteYoshiEgg
(title gimmick guess: the AVGN Zelda timeline video?)


Correct!

Originally posted by Blind Devil
lol I did a similar one, too, though in my case, I've entirely reprogrammed the vertical scroll routine to make it move "smoother" (as in, the camera accelerates and deccelerates depending on the needs). Originally, I didn't want to add a panning feature, but then I changed my mind and included an option because why not, fuck laziness.

Anyway, I'm quite fond of your work overall. Great stuff as always.


Thanks! :)

Also, that's interesting. Any reason you haven't submitted it yet or is it still a WIP?
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 haven't submitted it yet just because I forgot my detailed descriptions at home. But the patch is complete.
MK2TDS
Originally posted by yoshifanatic
The reason for why they spawn as much as they do is because the routine that spawns them is the same one that spawns the Rip Van Fish Zs, just with a different entry point.

I feel like the notes behave pretty similarly to the Zs anyway so it makes sense why they share the same routine.

Originally posted by yoshifanatic
The sprite data on the enemy rollcall screens are not all in 8x8 tiles. The priority bits in the property byte have a different function than they normally do on these screens. One bit controls the tile size and the other one I believe controls whether the sprite should scroll left or right during the transitions.

Actually, I was derpy on it: I thought of the shelless Koopa whereas I forgot of the shelled Koopa. Yeah, that is made of two 16x16 tiles and one of them is "miscoloured".

Originally posted by yoshifanatic
That's pretty interesting! Incidentally, I wonder why Nintendo coded it so that Mario's position is physically shifted upwards when riding Yoshi, when they could have just shifted him up visually and made Mario's hitbox taller? If they did that, they wouldn't have needed to physically offset Mario's position to account for him being on Yoshi in a lot of places.

Mario's hitbox does get in fact taller when he rides Yoshi. Downwards, in fact. You can take a look at the tilemap editor how the hitbox looks like.
But yeah, the shifted position is a weird coding practice.
This asm tutorial explains loading and storing quite well.
A lot of the stuff you showed off looks really cool, but man some of the items in the "Did you know..." section are especially neat. Nice finds there.
Out of curiosity, is there any particular things in SMW you guys would like to me investigate, such as what causes some random bug?

Originally posted by MarioFanGamer
I feel like the notes behave pretty similarly to the Zs anyway so it makes sense why they share the same routine.


The music notes share the same main routine as the Zs, so they pretty much are the Zs with some minor differences.

Originally posted by MarioFanGamer
Mario's hitbox does get in fact taller when he rides Yoshi. Downwards, in fact. You can take a look at the tilemap editor how the hitbox looks like.
But yeah, the shifted position is a weird coding practice.


I forgot about that. XD

Originally posted by ft029
This asm tutorial explains loading and storing quite well.

That's good to know!

Originally posted by Veck
A lot of the stuff you showed off looks really cool, but man some of the items in the "Did you know..." section are especially neat. Nice finds there.


Thanks! :)


And speaking of the Did you section, here are three more things I could have added to that list:

-
Originally posted by Yoshifanatic on his Discord Server
I think I may have an explanation for why jumping on Ludwig while he is jumping causes him to not enter his shell after his hurt animation. It seems to be because Ludwig uses the same RAM address ($7E1540) both for how long his hurt animation lasts and for how long his various actions last before moving to the next one. Ludwig is coded to spit fire, move around in his shell, and jump in that order and if $7E1540 is 0, he does his next action. After his hurt animation ends, he will move onto the next action due to $7E1540 being 0.

If he could be hurt while in his shell, I'd imagine he would immediately jump afterwards. I ought to test that.


After posting that, I forced Ludwig into his hurt state while he was in his shell and, sure enough, he jumped afterwards.

- When Iggy/Larry/Morton/Roy/Ludwig check for collision with Mario's fireballs, they start by checking extended sprite slot 0A even though the slot IDs only go up to 09. (See $01D3B9 and $01FD0B).

- The table at $038007 is 2 bytes too small, as footballs that land on very steep slopes use garbage data for their X acceleration value. Fixing this would not only require expanding that table, but also hijacking $038068 to be able to INY 4 times instead of 3 due to how $038007 is indexed.
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 was mostly fascinated when I saw the GIF of the camera panning up for Mario for when he faces up. That's pretty neat, especially for vertical levels. I was also entertained when I read those discoveries of yours. The more you know!
Twitter
This thread is amazing.
I like the bugfix patches, especially the Yoshi Egg fix.
The various tidbits about SMW's programming and inner workings are really fascinating.
I've taken a small look at the disassembly and I've noticed the massive amount of defines and macros, they really make the code more understandable. I'm sure that that the final version won't disappoint.

Also I would like to know more about sprite bouyancy glitches such as sprites acting weirdly in a tide level that's less than 4 screens long, or about the faux water technique that was used in a few VLDCX entries.
Check out Team Hack Fix/Translations' thread full of fixed and translated SMW hacks!

Wanted Permabanned or Dead by new staff team
Originally posted by Giftshaven
I was mostly fascinated when I saw the GIF of the camera panning up for Mario for when he faces up. That's pretty neat, especially for vertical levels. I was also entertained when I read those discoveries of yours. The more you know!


Thanks! :)

Sadly, that vertical camera panning patch is obsolete as soon as Blind Devil decides to release his reprogrammed vertical camera patch to the patch section. I probably should have released my patch sooner. XD

Originally posted by Super Maks 64
This thread is amazing.
I like the bugfix patches, especially the Yoshi Egg fix.
The various tidbits about SMW's programming and inner workings are really fascinating.
I've taken a small look at the disassembly and I've noticed the massive amount of defines and macros, they really make the code more understandable. I'm sure that that the final version won't disappoint.

Also I would like to know more about sprite bouyancy glitches such as sprites acting weirdly in a tide level that's less than 4 screens long, or about the faux water technique that was used in a few VLDCX entries.


Thanks! :)

By the way, I looked into what the cause of those bugs are, and both are very similar. In both cases, it's due to the game thinking the sprite is interacting with a block that's out of bounds, which causes it to default to acting like it's touching tile 000 (Mario defaults to 025).

For the tide interaction, the problem stems from the fact that the tide is constantly moving to the left (with an X position within the $0100-$01FF range), and that causes the interaction to get messed up when on a 1/2 screen level as the sprite code that figures out which block it's touching will think that the sprite is touching a block on the non-existent 3rd screen. There is a patch to fix this, but I found an address that has the same effect: just change the two bytes at $05BC65 to STZ $26, which will make layer 3's X position static for interaction purpose. However, there is probably a better way to fix this, perhaps by making the block check code for sprites similar to Mario's?

As for the fake water, by following these steps, what you essentially do is make layer 2 be at a position where it's out of bounds and allows you to exploit the fact that Mario and sprites have different out of bounds behavior.
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.
These are amazing stuff. Got interested in the Vertical Camera Panning as I could use it for my hack. Very good job.

And very fun SMW trivia too

Userbar by Green Jerry

Also a Fortaleza Reznor user. If you... digo, si hablas español, hackeas, buscas ayuda, o simplemente se te da conocer gente, únete, somos puerta abierta.

Nice! Now if only we could get a patch for the null sprite glitch! xD
Originally posted by LMPuny
These are amazing stuff. Got interested in the Vertical Camera Panning as I could use it for my hack. Very good job.

And very fun SMW trivia too


Thanks! :)

Originally posted by Yoshimaster96
Nice! Now if only we could get a patch for the null sprite glitch! xD


Thanks! :)

As for a patch for the null sprite glitch, I posted an explanation on how to fix the two main ways of trigger this on my server earlier. I'm posting it here as well so anyone not on my server can see the explanation as well.

Originally posted by Yoshifanatic on his Discord Server
@Yoshimaster96 I see you posted in my C3 thread, and you mentioned wanting a patch to fix the null sprite glitch. Well, I figured out how to fix the related double-tongue glitch that lets you put a null sprite in Yoshi's mouth. All you need to do is change the 3 bytes at $01F0BA to NOP : LDA $9D. If you then apply my Yoshi egg fix, then that gets rid of the the easiest way to spawn an invisible Yoshi (which can also be used to get a null sprite in Yoshi's mouth).

The reason this works is because when $7E14A3 (controls the pose Mario displays when making Yoshi stick his tongue out) decrements to #$10, that value sets $7E18AE (how long to wait before Yoshi begins sticking his tongue out) to #$06. This normally works fine, but the problem is that if the game pauses via $7E009D being set, $7E14A3 pauses, but $7E18AE does not. This also wouldn't be too much of a problem if $7E18AE simply kept being set to #$06 during this pause, but the code actually prevents $7E18AE from being set if its value is not 00. So, this causes Yoshi's tongue to extend during the pause, then extend again since $7E14A3 is still #$10 by the time Yoshi's tongue finishes extending. By changing the check for $7E18AE to $7E009D, it freezes $7E18AE so it stays in sync with $7E14A3.



Also, unrelated, but yesterday, someone messaged me asking me if there was a patch to make HDMA gradients fade out during level end. I'm 99% sure there isn't so I've decided to make a patch for it, which won't be hard since I've actually had this fixed in MYSQ for a while now as shown in this .gif:



I'll likely post a patch for this tomorrow.
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.
Hey, I'm just letting you guys know that I've posted the HDMA Fade Fix patch. Find it in my initial post in this thread. This patch is very similar to Ice Man's HDMA V3.5 patch, but with the added functionality of of making HDMA gradients fade out during level end, a different hijack location for preventing HDMA gradients from appearing on the Mario Start! screen (and during a black level load screen, as that's the Mario Start! screen without the letters), and being built with UberASM in mind.
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.
  • Pages:
  • 1
  • 2