Happy C3 guys!
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)
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.
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.
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.
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.
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.
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)
Mario's Strange Quest V1.6
Yoshi's Inside Story (on hold)
Yoshi's Strange Quest V1.3
/ V1.3.1 Beta 4.6
/ Latest Test Build (Mario & Yoshi's Strange Quests)
Yoshifanatic's Discord Server
: A place for fans of my stuff and/or Yoshi to chat with others.