Language…
15 users online:  AmperSam, asterkafton, ClaireChan, DanMario24YT, Everest, Gamet2004, Hayashi Neru, LightAligns, mathie, MorrieTheMagpie, PaceTheAce, Rhubarb44230, signature_steve, simon.caio,  zuccha - Guests: 262 - Bots: 365
Users: 64,795 (2,378 active)
Latest user: mathew

Yoshifanatic's ASM Showoff: The Prequel to the Prequel

Happy C3 guys! :D

Alright, let's just cut to the chase on what I've prepared to show off this C3. I've been waiting months to show this stuff off! X3 Here are some screenshots, a download link, and a video for what I'll call...

Mario & Yoshi's Strange Quests (MYSQ)

Video link












If the above somehow doesn't explain it or you don't follow my projects, what I've done is simple:

I've combined both of my hacks (Mario's Strange Quest and Yoshi's Strange Quest) into a single SMW ROM!

And now to answer some questions that some of you are likely asking now:

Q: What!? O_o
A: Yes, it's true. :P

Q: How!? :O
A: For those of you following Yoshi's Strange Quest's progress are likely aware that in mid 2017, I created a source code for YSQ that allowed me to have an easier time maintaining YSQ and making changes to it. One of the things I was able to do was optimize stuff by hand to free up large amounts of ROM space that was otherwise being wasted. Because I freed up so much space and because I want to use the full 4 MB of space I have to work with as much as possible, I thought up some ideas for what I'd use the freed up space for. At some point, I came up with a crazy idea: "Wouldn't it be cool if I integrated my previous hack, MSQ, into YSQ?". And so I gave that a try and as you can see, I had enough space to actually do it! Despite being 4 MB, MSQ is actually very wasteful. MSQ had a lot of sprites and graphics files that aren't used anywhere, levels that were sloppily made, dynamic sprites that ended up only being used once, etc. By trimming away all this junk and optimizing things like I did for YSQ, I was able to shrink down MSQ's data down to less than a megabyte (if I remember correctly). Getting everything to work wasn't easy either. Besides the coding needed to make this work, MSQ's sublevels (over 200 in total) have different music ID numbers, ExGFX file numbers, custom sprite numbers, map16 data, and custom block data compared to YSQ, so I needed to convert them so they wouldn't be a glitched mess when imported.

Anyway, I've been working on this in secret starting back in May-June, telling almost nobody about this. The only hint I publically gave regarding this was this bit I put under spoiler tags in my last C3 thread:

Originally posted by yoshifanatic
A super secret and crazy thing that would possibly make YSQ one of the biggest and most technically impressive SMW hacks ever.


And I'd say I've accomplished that quite nicely seeing as how YSQ is now two full length SMW hacks in a single 4 MB ROM that clocks in at a whopping 180 exits and ~140 levels. To put things in perspective, YSQ now has more exits than the VLDC9 collab (152 exits) and JUMP (125 exits), the two largest SMW hacks currently hosted in the hack section.

At this point, you could say that SMW is my canvas, Lunar Magic is my paint, and asar is my brush. The sky is the limit. XD

Q: Wait, but MSQ and YSQ combined have more exits/overworld levels/sublevels than what SMW supports!
A: I know, but that didn't stop me from doing this anyway. :P I wrote some code that lets me swap out the current set of 512 levels/overworld that are loaded, allowing me to get around these limitations. And do you want to know what the best part is? I made a (currently WIP) patch that will let you have more sublevels/an extra overworld in your hack! The links for them are down below.

Q: So, how does it play?
A: When you load up MYSQ, you can pick which game to play before it goes to the respective title screen. YSQ plays like it has been since I started posting the V1.4 test builds (although it's significantly more stable and playable than it was back in July thanks to the efforts of DPBOX, xirtamehtsitahw, and a few others). MSQ is more like a YSQ 0 for the time being, since you play as Yoshi in the MSQ levels (though with some changes to make those levels doable as Yoshi). So far, I've ported about 90% of MSQ's stuff over and gotten to work. Here is a list of what is not ported over:
- Mario and Luigi
- A couple MSQ specific custom sprites (Arrow wheel and firebar are the only 2 MSQ specific sprites not ported over that I want to port over).
- Some less important graphics (Mudkip, A Wild Mario Appears BG, the BIS style graphics, etc.).
- The mode 7 bosses (they're currently broken. For the time being, I replaced them with non-mode 7 Reznors).
- Certain level gimmicks (ex. Glitchy Forest's glitchy floor, the fart cloud in Beanbean Cave, the arrow wheel in Mt. Mushroom Cave, etc.)
- Overworld events (I need to redo them since I decided to use YSQ's overworld graphics and event tilemap data to save space)
- 2 player mode
- Random sublevels that are now unnecessary due to how things work in YSQ (ex. The entrance sublevel of Poison Bog due to message boxes no longer removing layer 3 or the entrance sublevel of Lava Cavern due to the AddmusicK SPC700 engine forcing local songs to always load their samples).
- Castle Destruction Cutscenes (they'll likely be replaced with YSQ style cutscenes)
- Title Screen Demo

MSQ should be fully or almost fully playable in its current state, although there are a lot of graphical glitches due to me not inserting the graphics for some of the less important things. I've also had to implement a few quick fixes for certain levels to block access/skip them because they would need to be modified heavily to work with Yoshi (ex. the puzzle path in Bowser's Castle).

By the way, since I'm working on MSQ once again, this version of MSQ could be seen as V1.7. Most of the improvements so far are just cosmetic (ex. new layer 3 backgrounds, new palettes for some levels, updated graphics for things, updated music tracks and one new one that I originally intended to use but nobody ported it at the time, etc.). However, MSQ does inherit several of the quality of life features present in YSQ, like the status screen and being able to save anytime on the overworld in addition to some global things, like the cheats, VWF message system, status bar, etc.

Q: Will this affect my YSQ save?
A: If you've been playing YSQ V1.4, no. Reserving space for the MSQ save data was one of the things I did when I last updated YSQ's save file format. Just rename your YSQ V1.4 save so that MYSQ will recognize it as its save data.
If you've been playing YSQ V1.3.1 Beta 4.6 or earlier, your save file won't work in YSQ V1.4 let alone MYSQ so you'll need to start fresh for MYSQ anyway.

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

Anyway, one thing I'd like to know regarding the MSQ portion of MYSQ is how exactly would you guys want me to go about handling the MSQ portion? I have some ideas for how it will be handled, but I want some opinions on what I should do:

- V1.7 MSQ. Essentially, MSQ, but with lots of improvements to enhance it.
- MSQ, but you can play it as either Mario/Luigi or Yoshi. Would require me to modify levels a little bit.
- Turn MSQ into YSQ 0, like it is currently. Would require me to modify levels to account for Yoshi's abilities.
- Remake MSQ entirely. It'd be like if I had made MSQ nowadays rather than back in 2010. MSQ remake will take what MSQ does and remix it so it feels new.
Keep in mind that depending on how much ROM space I have left, it might make it impossible for me to do what you guys suggest. When it comes to how much ROM space I'll need, Option 3 is the least demanding followed by 1, then 2, then 4. If I can't do 1/2/4, I'll do the next one that's less demanding.

Also, even if option 1/2/3 are picked, I might still add/replace levels. At least a few of MSQ's levels are utter garbage and probably should be replaced with something more interesting (perhaps with some of the unused ideas I had for MSQ/YSQ). A couple I'm thinking of are Cheep Cheep Lake, Ice Cold Lake, and Yoshi Cavern Escape (I'll likely combine it with Yoshi Cavern). Also, regardless of what I do, I want to keep MSQ's levels relatively easy. While I didn't really intend it, MSQ's difficulty is overall on par with SMW and I'd like to keep it that way if possible as it's one of the things people liked about MSQ.

Also, regardless of what happens, the original MSQ in the hack section will still be around. MYSQ will not replace it.

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

Anyway, enough with MYSQ. Here are some other stuff I wanted to show off:

Manual Level Insert Patch
What this does:
- Manually inserts levels into the ROM. Allows one to optimize the data useage so that levels can share data to save ROM space.
- Adds support to be able to have more than 512 sublevels. Without modifications, the patch supports an extra 1028 sublevels.
- Adds a feature where storing to a few custom RAM addresses allows one to force a specific level/entrance to load instead of what would normally load in X situation.
- Remaps the no yoshi cutscene levels and the hidden Chocolate Island 2 sublevels to have standard level table IDs, allowing one to modify them.
- Comes with a batch script that generates asar patches that automatically extracts data from various level related tables and some global level data like the Global Exanimation data.
Some instructions for how to use this.

This is a WIP patch at the moment. I don't recommend using it in a serious hack right now due to it being buggy.

Note: This patch doesn't give you more levels that can be accessed from the overworld. Despite what it may look like, MYSQ doesn't expand this either. It simply references different ROM/SRAM data depending on which game is loaded.
Note: The override level load is a pretty nifty feature. You can use it to create Chocolate Island 2 style levels, make different sublevels load when entering a level from the overworld (the translevel number is not affected), and more.
Note: Because of asar limitations, you'll need to manually manage most of the data yourself. Asar can only have 125 freespaced areas in the same patch, and this patch deals with potentially thousands.

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

Manual Overworld Insert Patch
What this does:
- Manually insert an overworld into the ROM using the MWOs generated by the included ExtractOW.asm patch.
- Adds support to be able to have a second overworld in the same ROM. You can define what data is shared between the two overworlds and what data is different between the two.
- Allows one to have more No-Auto Move levels. I'm not sure how useful this is, but making it possible to have more wasn't that difficult.
- Allows one to set certain overworld settings from the patch rather than Lunar Magic.
- Fixes a handful of bugs and frees up over 32 KB of RAM as a side effect of adding support for two overworlds.
Some instructions for how to use this.

This is also a WIP patch. In addition to bugs, there is also a chance I missed something that needs to be extracted. If you try out this patch and something doesn't transfer over, report it to me.

By the way, special thanks to FuSoYa for letting me use some of Lunar Magic's ASM inside the manual insert patches!

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

Extract Overworld Patch
This is a "patch" that comes with the Manual Overworld Insert Patch that generates an MWL-esque file called an MWO (Mario World Overworld). To use it, set the contents of !hackname inside the patch to the name of your hack, then when applying the patch, apply it to a non-existent file. Asar will generate a file with the name you entered as the ROM name in asar, which is then meant to be used with the manual overworld insert patch.

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

LevelExtractor.bat
This is a batch script that comes with the Manual Level Insert Patch. This script extracts level data from a ROM specified inside the batch script (use a text editor to modify the default ROM names) as well as some global level data like the secondary entrance tables. The script generates files in .bin format for use with the Manual Level Insert Patch. If you're wondering why I didn't just make the patch use MWLs, there are two reasons:
- Asar crashes if you you open 17 or more files using the readfile/canreadfile commands. My level insert patch potentially needs to read from a minimum of 512 files.
- MWLs seem to store Layer 2 BG and palette data differently than how it's stored in the ROM. I can easily work around the palette one (it's just two bytes stored in a different part of the data), but I have no such luck with the BG data.

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

RATS Scanner
This is a "patch" you apply to a ROM with asar that will give you information about the RATS tags in the bank you define inside the patch. I made this because I couldn't find anything that would scan a ROM and report broken/nested RATS tags. The only problem with this is that it's very slow. I don't know if that's because asar is slow at reading 32KB of data or because my 2016 laptop is stupid, but I thought I'd let you guys know about that just in case it's the former.

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

Customizable VWF Message Sprite (PIXI)
This is a sprite I've been working on as part of a request DPBOX gave me that I still have yet to finish (I'm sorry DPBOX). It's an edit of the Info Box DX sprite and I've made it so that it is PIXI compatible and that it can be set to act as a display message sprite, a message box, or an invisible NPC depending on both the extra bytes and the data defined in tables inside the sprite's code. It's a very customizable sprite that lets you customize lots of different aspects of these sprites like how the tile and properties (message box) and the size of the hitbox (invisible NPC). I plan on also adding a setting for regular NPCs, but a combination of laziness and being busy, caused that to not be implemented yet.

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

Website
Not really ASM, but I figured I'd show this off anyway since it's coding related. I've recently attended college again and I took an HTML course and just for fun, I made myself a simple little website for YSQ. I currently don't have anywhere to host it, but I'll consider it if I find I decent site that offers free web hosting.

Note: I used a few HTML5 features on this site, so if you're using an older browser, some things might not show up correctly.

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

Anyway, I hope you guys liked my ASM showoff and happy 2018 (or "2000 Greatteen" as I'll put it) :)
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 did my best to skim read that text as it started to blur together for me. :(

That said however from what I did read the fact you managed to fit some pretty big and complex hacks into one ROM is really impressive.

Like wow. The dedication to write your own code to work around the limitations of SMW is a massive technical feat. Well done. :O
Quote
Manual Level Insert Patch


Oh wow, this is exactly what VLDCX ROM needed, I won't need to do it myself. Thanks a lot :).
Originally posted by yoshifanatic
By the way, special thanks to FuSoYa for letting me use some of Lunar Magic's ASM inside the manual insert patches!

this is by far the most impressive aspect of all that

I have immense respect for people who take so much time to produce things like that. Hats down to you man. I would've never thought one could reach this level of optimization.
Originally posted by 1UPdudes
I did my best to skim read that text as it started to blur together for me. :(

That said however from what I did read the fact you managed to fit some pretty big and complex hacks into one ROM is really impressive.

Like wow. The dedication to write your own code to work around the limitations of SMW is a massive technical feat. Well done. :O


Yeah, my posts can get a bit wordy when I have a lot to say. Sorry about that. XD I guess a TL;DR way of summarizing my big post would be:

"Dedicated/Crazy SMW hacker posts a SMW hack that is two full length SMW hacks in one and posts a couple of miscellaneous patches, some of which allow others to bypass SMW limitaions like being able to have more than 512 sublevels/an extra overworld in their hacks just like in said posted hack."

Anyway, thanks! ^_^

Originally posted by GlitchMr
Quote
Manual Level Insert Patch


Oh wow, this is exactly what VLDCX ROM needed, I won't need to do it myself. Thanks a lot :).


You're welcome! :)

However, as I've said, that patch is currently very WIP. It should work ok for the most part, but it likely needs a lot more testing before I'll even consider uploading it to the patch section.

That said, I imagine the ability to optimize data usage will be a godsend for massive collabs like VLDCX. Levels that share data (particularly BG/palette/ExAnimation data) can be optimized to remove duplicates, which will save large amounts of space depending on how many levels share a particular thing. It's like the shared routines in PIXI, except for level data. It's hard to say how much space I saved when optimizing YSQ's levels, but it's safe to say I saved at least a couple hundred kilobytes.

Originally posted by Mathos
this is by far the most impressive aspect of all that

I have immense respect for people who take so much time to produce things like that. Hats down to you man. I would've never thought one could reach this level of optimization.


Thanks! ^_^

I'm a little surprised myself that I was able to free up enough space for this to work. You'd be surprised just how much ROM space gets wasted because Lunar Magic makes no attempt to optimize level data (YSQ had around 450 used sublevels, and I saved a couple hundred kilobytes by removing duplicate level data), how much space is wasted by RATS tags in a ROM with a decent amount of resources (at least 28KB of space was being wasted by RATS tags alone in YSQ due to the sheer number of resources it uses. YSQ is probably an outlier in this case, though) and how much potentially gets saved by switching to LC_LZ3 compression. :P

Also, yeah, I'm glad he let me do it. His only condition was that I obscure the LM ASM if it was bigger than a simple hex edit, unless it's something I needed to modify for my patch to work (ex. pointers). That said, I tried to use as little LM ASM as possible.
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.
Quote
I made this because I couldn't find anything that would scan a ROM and report broken/nested RATS tags

Doesn't Ctrl+Shift+S do that in Lunar Magic?

either way, this looks really neat. Especially the overworld export/insert/expand patch is something that'll really come in handy for a lot of people and collabs possibly too.
MAN!#fim{o_o} You are INSANE!#fim{:O} You did several things that even the best Super Mario World hackers could only DREAM of!

Seriously, you put BOTH Mario's Strange Quest AND Yoshi's Strange Quest into ONE ROM! You BROKE the 512 level limit that bounded us since Lunar Magic 1.0 in, like, 2001! How can ANYONE even manage to pull this stuff off? That's beyond incredible!

At this rate, you should probably go ahead and finish SMWCP2.

I'm so glad you're back, though. You've been inactive for a month, and I was starting to get worried. I haven't been able to work on my hack or finish my beta test of Yoshi's Strange Quest, and I have, like, 4 levels left.

Speaking of beta tests, should I start beta testing Mario and Yoshi's Strange Quests? Will I have to start Yoshi's Strange Quest over due to bugs creeping in from the Mario's Strange Quest addition?

Also, will your stuff work with SA-1 ROMs?

Click the character on the right side of my layout to visit my Discord server and discuss and play and look at and get updates and sneak peeks of the games and other things I'm making.

The authors of these 2 My Little Pony fan games have removed their games from the Internet.
Rise of the Clockwork Stallions has been updated! Download My Little Pony: Rise of the Clockwork Stallions DX: Director's Cut and My Little Pony: Magic Shards now! Spread this link!

You absolute madman. I guess that's what it takes to be one of smwcentral's best hackers though.

allow shy guy emojis in post footers you cowards!
Originally posted by TheBiob
Quote
I made this because I couldn't find anything that would scan a ROM and report broken/nested RATS tags

Doesn't Ctrl+Shift+S do that in Lunar Magic?

either way, this looks really neat. Especially the overworld export/insert/expand patch is something that'll really come in handy for a lot of people and collabs possibly too.


No. Lunar Magic tells you how many broken/nested RATS tags are in the ROM, but it doesn't tell you where they are in the ROM. The main reason I made this patch was because a bug in my level insert patch was causing broken/nested RATS tags to appear in the ROM after applying it, and I needed something to help me find them. I really didn't want to have to spend hours looking at the ROM in a hex editor to find the problematic RATS tag, so I simply wrote an asar patch that would do it for me when I couldn't find a tool that would do it.

As for the overworld patch, there are a ton of possibilities that open up as a result of having an additional overworld. I'd like to see what people come up with once I work out any bugs the patch has. Outside of the possibility of me not accounting for all the overworld data (overworlds have a ton of data associated with them, which is likely one of the reasons why FuSoYa never implemented something like this in LM), I know that the code doesn't account for two player mode and that the code needs a way to determine what event belongs to which overworld.


Originally posted by DPBOX
MAN!#fim{o_o} You are INSANE!#fim{:O} You did several things that even the best Super Mario World hackers could only DREAM of!

Seriously, you put BOTH Mario's Strange Quest AND Yoshi's Strange Quest into ONE ROM! You BROKE the 512 level limit that bounded us since Lunar Magic 1.0 in, like, 2001! How can ANYONE even manage to pull this stuff off? That's beyond incredible!

At this rate, you should probably go ahead and finish SMWCP2.

I'm so glad you're back, though. You've been inactive for a month, and I was starting to get worried. I haven't been able to work on my hack or finish my beta test of Yoshi's Strange Quest, and I have, like, 4 levels left.

Speaking of beta tests, should I start beta testing Mario and Yoshi's Strange Quests? Will I have to start Yoshi's Strange Quest over due to bugs creeping in from the Mario's Strange Quest addition?

Also, will your stuff work with SA-1 ROMs?



Thanks! ^_^

Admittedly, it doesn't surprise me that hardly anyone has attempted to break these limits in SMW (or at the very least, done so in a way that benefits the average user), especially being able to have 2 overworlds. All I can say is that what kept me going in face of all the difficulties I had was a lot of passion for the little purple and grey box known as the SNES and the determination to make YSQ one of the best and most technically impressive SMW hacks out there. If that means I have to rewrite SMW in its entirety to do so, then so be it. XD

Regarding SMWCP2, maybe. XD Although, if one of the problems with it was lack of ROM space, maybe production on it can continue thanks to the level insert patch being able to optimize level data?

Regarding my absence, sorry about that. I was kind of busy during my hiatus with college and stuff, especially after Christmas where my new Switch and Super Mario Odyssey alone kept me busy for days. XD Speaking of college, I got an A and an A- in the courses I took! ^_^

Regarding beta testing, yes. MYSQ is just YSQ with MSQ added to it after all. :P You don't have to test MSQ, but you can if you'd like. Also, I doubt adding MSQ to YSQ caused bugs to appear in YSQ. Besides the fact that I wrote the code in a way that lets me cleanly remove MSQ from YSQ if necessary (as implied by the video I linked to), the MSQ stuff is handled in a way where it defaults to YSQ's data if I failed to account for something. As for save data, MYSQ's save data format is exactly the same as it was before adding MSQ. Remember when I updated the save format months ago? Among the other changes, I reserved some space for MSQ's data ahead of time so I wouldn't have to do it now.

As for SA-1 support, no. The insert patches are pretty complex and I was focused more on just getting them working over adding support for SA-1 (just look at all the stuff I had to account for in the export overworld patch and the crazy macros in the insert overworld patch!). However, if it wasn't for the fact that I need to keep the Lunar Magic ASM obscured, adding SA-1 support probably wouldn't be too hard since I labeled all the RAM addresses.

Originally posted by Von Fahrenheit
You absolute madman. I guess that's what it takes to be one of smwcentral's best hackers though.


At the rate I'm going, I might as well be nicknamed ASMfanatic. :P

Anyway, thaks! ^_^
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.
Quote
At this rate, you should probably go ahead and finish SMWCP2


You mean that this isn't done yet??? Then it will never be done.


As my response to yoshifanatic, wow man. I made my hack, but honestly I hardly understood any of the deep coding behind it. But you seem to understand EVERYTHING.

If only I had your skills.......

I played YSQ a little bit, but I don't think I played MSQ. I'll have to check this game out soon. Congrats on your accomplishments.
Originally posted by Final Theory
As my response to yoshifanatic, wow man. I made my hack, but honestly I hardly understood any of the deep coding behind it. But you seem to understand EVERYTHING.

If only I had your skills.......

I played YSQ a little bit, but I don't think I played MSQ. I'll have to check this game out soon. Congrats on your accomplishments.


Alright! :) Of course, remember that MYSQ is a WIP, so there is likely going to be bugs, especially in the MSQ portion.

Also, ASM can be pretty tricky to understand, but if you have the desire and determination to learn it like I did back in 2014 (and, of course, look up guides on it), I'm sure you'll be able to do it!
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 realized, but I don't think I explained how to use the manual insert patches very well. Here are some instructions:

================================

Manual Level Insert Patch

Near the bottom of ManLvlIns.asm, you'll see a bunch of macros that look similar to this:

Code
	%INCLevel(000,000,000,000,NOP,NOP,NOP)
		   1   2   3   4   5   6   7


Here is what each thing means:

1 = Sublevel number
Self explanatory. All the level insert macros must have a unique sublevel number or else the patch may glitch.

2 = Layer 1 data
This is the layer 1 foreground data to use for X sublevel. This also includes the SMW level header settings, which means you probably shouldn't make two sublevels share the same L1 data unless both are meant to have the exact same SMW settings and L1 data.

3 = Layer 2 data
This is the layer 2 BG/level data to use for X sublevel. Set this to NOP and the level will default to blank layer 2 level data:

Code
NullLayer2Data:
	db $00,$00,$00,$00,$00,$FF


My patch currently has no way to determine if a level uses layer 2 for a BG or level data, so don't use NOP if the level's level mode sets layer 2 to be a BG.

4 = Sprite data
This is the sprite data (both the sprite list and the one byte sprite header) for X sublevel. Set this to NOP and the level will default to using this:

Code
NullLevelSpriteData:
	db $10,$FF


The level will have no sprites, no sprite buoyancy and sprite memory setting 10.

5 = Custom Palette data
This is the palette data to use for X sublevel. Set this to NOP to indicate that the level does not use a custom palette.

6 = Level ExAnimation data
This is the ExAnimation data to use for X sublevel. Set this to NOP to indicate that the level does not use level ExAnimations. Be aware that if you set a level to use ExAnimations but XXX_ExA.bin is 0 bytes in size, the level will freeze if you try to load it!

7 = Unused Parameter
This was intended to be Local ExAnimation data 2, a scrapped feature that would let you sacrifice global ExAnimations on a per level basis to allow one to have a second set of level ExAnimations. I scrapped this because Lunar Magic's ASM actually supports this without additional hijacks, it's just that as of 2.52, there is currently no way easy way to utilize this. I attempted to convince FuSoYa to think about fully implementing this, but it remains to be seen if it will be added to Lunar Magic.
Anyway, this macro parameter currently has no use.

When modifying 2-6, you're basically telling asar to use the data from XXX_YYY.bin for the sublevel defined by 1. If more than one sublevel is set to use XXX_YYY.bin, then every sublevel that uses it after the first will set its pointer for YYY data to point to wherever XXX_YYY.bin was first inserted. This allows you to save space by manually removing duplicates. As an example, custom palettes take up 522 bytes each (512 for the data, 2 for a duplicate of color 0 aka the back area color, and 8 for the RATS tag), so you'll save that many bytes for every sublevel that shares a custom palette.

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

Other stuff:

!TotalLevels is how many sublevels you want to have in your ROM. The default is $01FF like in the original SMW. If you set this higher, then the patch will insert hijacks that allow SMW to support more than 512 sublevels. If you do this, you'll also need to add more level insert macros so the patch can insert the new levels. This patch supports an extra 1,024 sublevels with little changes for a total of 1,536 (0000-05FF), but could theoretically support over 10,000 sublevels if certain things are modified and every pointer table is given its own ROM bank (although who would ever need that many sublevels in a single hack?) If you set this lower, the asar will insert less than the default number of levels and attempting to load the newly undefined levels will cause the level defined by !FailsafeLevel to load instead.

To use the override level feature:

- !RAM_OverrideLevelLo/Hi is the 16-bit sublevel number/Secondary Entrance number to load + 1. So, if you want to load level 0105 or secondary entrance 0105, you put 0106 here.
- !RAM_OverrideEntranceType is a flag that tells what type of entrance to load. Using the above value for !RAM_OverrideLevelLo/Hi, here is what happens with different values for !RAM_OverrideEntranceType:
00 = Load the main entrance of 0105.
01 = Load the midway entrance of 105. (Buggy and doesn't seem to work yet).
02 = Load Secondary Entrance 0105.
03 = Load Secondary Entrance 0105 with the water level flag set.

This override feature only applies when SMW attempts to load a level regardless of whether you're currently in a level or not. Until that happens, the values stored to these 3 RAM addresses will stay in memory until then. This feature is currently the only way to access sublevels 200+. Here is a bit of code you could put into a block or UberASM to use this feature:

Code
REP #$20
	LDA #$0000			; Sublevel/Secondary Entrance number + 1
	STA !RAM_OverrideLevelLo
	SEP #$20
	LDA #$00			; Type of entrance to load
	STA !RAM_OverrideEntranceType


You may need to apply NewLevelLoad.asm for this to work correctly, though. I don't know why, but when I went to clean up the level insert patch to satisfy FuSoYa's request to obscure the LM ASM code, I couldn't get this working with just ManLvlIns.asm when I tested it out.

You'll need to manually handle the freespace for the level data with this patch unlike most other asar patches. This is because asar can only have 125 autocleans in the same patch, and my patch potentially needs thousands to work as intended. I tried to mitigate this by making asar expand the ROM to 4 MB and then using the new freespace, but that doesn't do any good in ROMs that are already 4 MB. Perhaps RPG Hacker or whoever else may be working on asar will find a way to increase the autoclean limit? Anyway, if asar says you crossed a bank border, you need to move one of the level macros in the offending bank to a different bank or set a level to share data with another sublevel.

Get in the habit of extracting your levels with the level extractor if you're going to use this patch. It may also be a good idea to use two ROMs for your hack: one that you use the patch on and one you use to build your levels and extract from. This is so Lunar Magic won't try to insert duplicate level data into the ROM you're using the patch on.

================================

Manual Overworld Insert Patch

Throughout the ManOwIns.asm patch, you'll see a bunch of macros that look similar to this:

Code
%InsertOWData(00, 00, MusicList1, !VarDataOffset1...)
               1  2       3             4...


Here is what each thing means:

1 = Overworld number
Self explanatory. All the overworld insert macros must have a unique overworld number or else the patch may glitch.

2 = MWO to read
These numbers refer to the !OverworldXXFile defines, with XX being the number in the macro parameter. Essentially, this is the MWO to read from to insert X data.

If the macros for overworld 00 and 01 are set to use the same define, then overworld 01 will share X data with overworld 00, thus saving ROM space.

3 = Data to insert.
This is the overworld data that will get inserted by the macro. Do not touch this!

4+ = Nothing you should care about.
Everything after 3 is just stuff needed for the macro to work. This includes whether X data should attempt to insert at it's original location, the MWO offsets to read, parameters to determine whether X data should be autocleaned, and more. Don't touch any of this data or the patch may glitch!

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

Other stuff:

Unlike the level insert patch, this patch doesn't require manually managing the freespace. This is because this patch doesn't hit the 125 autoclean limit.

================================

And that's mostly it. Everything else should be self explanatory, although if anyone has other questions, feel free to ask.

I do apologize if these patches are not particularly user friendly currently, but these are both pretty complicated patches. Just getting them to work at all was difficult. XD I plan on making these more user friendly at some point though, such as putting everything I intend for the user to modify into one .asm file and everything else in a separate file. Any ideas for how I could improve this patch would be appreciated.

================================

Unrelated, but as for MYSQ, I've slowly been making progress with improving it for the next release. I've mostly been fixing graphical stuff, particularly on the MSQ overworld, and I've been enhancing the look of some things:


Special World Submap

Frost Cave Entrance

Mt. Mushroom Cave

As for bug fixes/changes, it's mostly minor stuff:

- Made the status bar display a special indicator if you have all 80 exits in MSQ.

- Made it so that rip van fish have different properties when MSQ is the currently loaded game. YSQ's are stated to be different in game, so it'd make sense to revert their properties back in MSQ.

- Fixed a bug where you could enter the blank tile on MSQ's star world map to access level 200 (MSQ's level 000). This was a side effect of me making it possible to re-enter switch palaces from the overworld.

- Fixed a bug where layer 3's priority sometimes was not restored correctly after a VWF message closed.

- Gave the Reznor boss room in Yoshi Cavern a different BG because it didn't really make sense for there to be a castle wall BG inside a Yoshi's gut after all.

- Fixed an oversight where the message that displays at the start of Frost Cave Entrance would display again if you entered the error message pipe.
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.
Do you think you or someone else could turn your patches into a tool? (It means double click on the .exe and a GUI window pops up, like the SMW Misc. Text Editor.) That would certainly make the patches a lot more user friendly. Heck, the tool could even manage your free space for you.

Click the character on the right side of my layout to visit my Discord server and discuss and play and look at and get updates and sneak peeks of the games and other things I'm making.

The authors of these 2 My Little Pony fan games have removed their games from the Internet.
Rise of the Clockwork Stallions has been updated! Download My Little Pony: Rise of the Clockwork Stallions DX: Director's Cut and My Little Pony: Magic Shards now! Spread this link!

Hi, woah. I haven't even been here since posting on your C3 last Summer.

Am I weird for actually wanting a separate modernized MSQ? Because while, yeah, having both of them together in one hack IS cool, that's all it is. A novelty. I really think starting fresh would be desirable for the game as it would REALLY let it shine. MSQ and YSQ are two separate hacks with very different design philosophies.
There used to be stuff in this footer, but it's all gone now.
Originally posted by DPBOX
Do you think you or someone else could turn your patches into a tool? (It means double click on the .exe and a GUI window pops up, like the SMW Misc. Text Editor.) That would certainly make the patches a lot more user friendly. Heck, the tool could even manage your free space for you.


Possibly, but the best I could do is make a batch script that makes asar repeatedly apply a patch that autocleans level data, then applies the level insert patch. However, it would likely be slow. If someone else were to make a tool for this, perhaps they could not only fix the freespace problem, but also have the tool auto detect duplicate level data?

By the way, I've updated the MYSQ patch. In addition to what I said in the previous post, I've also forced sprite memory setting 10 to always be on, made the hammer bros. work correctly with NSTL and made it so that the status screen now displays platinum coin icons for each level where you got all 5 Yoshi coins in a single run.

Originally posted by TheSuperRotom
Hi, woah. I haven't even been here since posting on your C3 last Summer.

Am I weird for actually wanting a separate modernized MSQ? Because while, yeah, having both of them together in one hack IS cool, that's all it is. A novelty. I really think starting fresh would be desirable for the game as it would REALLY let it shine. MSQ and YSQ are two separate hacks with very different design philosophies.


I don't consider that weird at all. I planning on remaking MSQ at some point, but if I can't do it in MYSQ despite what people may want me to do, I'll just make that its own hack and let the MSQ portion of MYSQ be an enhanced port of MSQ V1.6. I won't let the MSQ remake suffer just because I run out of ROM space.

That said, regardless of what happens, there really aren't any downsides to this merger. You're basically getting enhanced versions of both MSQ and YSQ compared to their original release (V1.6 and V1.3 respectively) in the same ROM, much like the games in Super Mario All-Stars. Plus, this merger required me to write code that would let me bypass SMW's limits in order to make this possible, so now people can have hacks that have 2 overworlds and/or more than 512 sublevels in addition to being able to import/export overworlds with external files (something that FuSoYa has stated he doesn't seem interested in implementing in Lunar Magic).
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.