Hi guys, happy C3!
So, what do I have in store for this C3? Last time, I mostly had stuff pertaining to my future homebrew and a level editor I made for it. This time, it's mostly Yoshi's Strange Quest related stuff. Some of you are probably have been wondering what I've been up to with that since I last posted the latest beta (V1.3.1 Beta 4.6, which you can find a link to in my post signature). Nothing much.
I've ported every change YSQ makes to a SMW ROM into a copy of SMW's source code, thus making a YSQ source code.
Yeah, given how the previous tech demos I've made were handled in a similar way, it was only a matter of time before I decided I'd do it to YSQ as well. XD Given how much stuff YSQ does to a SMW ROM (and how disorganized things started getting), doing this has made YSQ much more maintainable/organized for me as well as made it easier to do things that would be tricky to do by hacking SMW the normal way.
Here is a link if you guys want to check out the latest build:
Yoshi's Strange Quest V1.4 (C3 Test Build)
IMPORTANT: Do not use a V1.3.1 Beta 4.6 or older save on this version! Not only will it not load your saves properly, but it may also trash whatever data is in the .srm!
IMPORTANT: This version is very buggy! While it's mostly playable, 100% completion is likely impossible in this build and it has been tested very little. Treat this more like a tech demo than as a normal hack update.
This is V1.4 of YSQ, and it's changed a lot since the latest beta version. Before anyone asks, yes, I changed the version number from V1.3.1 to V1.4. I felt that at this point, with how much YSQ has changed since V1.3 and the fact that the non-beta V1.3.1 technically hasn't been released, I felt that calling this update V1.3.1 doesn't really convey just how big of an update this has become.
Before I list the current changelog for this version, I'd like to first show something I made a little while ago:
SMW Level Data Extractor
This is a level data extractor I made that allowed me to generate files for YSQ's level data so that the levels would get added to the source code ROM when it compiles. It's probably not very useful to the average SMW hacker, but it might be useful if one were to make a patch that allowed one to use individual level files (perhaps a manual level insert patch or a patch that allows one to swap out level data mid-level).
With that out of the way, here is a changelog for this version (Warning: Massive Changelog ahead!):
- Copied over YSQ's changes over to a copy of SMW's source code, much like how my WIP kaizo hack was set up before turning that into a homebrew.
- Removed the knockback mechanic. Yoshi no longer gets sent flying back when taking damage and is no longer stunned.
- Changed the save system. This made older saves incompatible with this version
+ More things now get saved to SRAM when saving your game, such as your current HP and egg count.
+ The globally saved data, such as the cutscene skip flags, are now properly initialized, preventing possible bugs when playing YSQ on something that properly randomizes the RAM on startup.
+ YSQ now tracks which levels you found the hidden 1-up in. Much like the Yoshi coins in V1.3, your only reward for finding them all is bragging rights.
- Changed the message displayed for Scenario room 10, option 3. It's no longer a bad attempt at shock humor, but rather something that puts that option in a more positive, but still weird light.
- Changed the context of Giant Chasm's overall joke.
- Created a new file select screen that functions similarly to the one in Super Mario Sunshine.
+ Hitting a file block makes a VWF message appear, which displays your custom name, % of exits gotten, % of Yoshi coins gotten, and play time. You're also given the option to continue, start a new game, erase the file, or copy the file (if the file is blank, only new game is selectable).
+ You can now enter a 1-12 letter custom name, which appears on your file as well as displaying as Yoshi's name in dialogue.
- Hitting the rightmost block on the file select screen brings up an option menu that lets you tweak some settings:
+ Turn on/off the death music
+ Turn on/off the MSU-1 sounds
+ Toggling whether or not the MSU-1 is set to play voice clips for Yoshi during gameplay or music.
+ Turn on/off displaying the custom name as Yoshi's name whenever he speaks
+ Switch between patient and hasty egg throwing.
+ Accessing a cheat menu (currently WIP)
+ The ability to reset the globally saved things.
- Added some built in cheat codes into YSQ which can be accessed from the options menu.
+ Infinite health
+ Flying Yoshi
+ Infinite eggs
+ Infinite Lives
+ Random Game Over
+ Farting Yoshi
+ Unlock All Levels
- Began changing YSQ's overall palette. YSQ will now have a more vibrant and colorful look to it compared to before. Here are some comparisons:
- Reduced the amount of time it takes to retry a level after dying by adding a message box that asks if you want to go to the overworld as soon as Yoshi dies ("No" is the default). This doesn't happen when Yoshi has 1 life left. (Before, it took about a minimum of 10-11 seconds to get back into a level after dying. Now, it takes about 4-5). Also, skipping this message causes it to act as if you selected No.
More hacks really should have something like this in them, especially if they're intended to be hard. SMW's respawn time is just annoying.
- Added more green coins to the levels, especially in the earlier worlds.
- Made some levels a bit easier
+ Butter Bridge
+ Slimy Cave
+ Giant Chasm
+ Look-Alike Plains (Secret Exit)
+ Misty Mine
+ Apple Woods
+ Rip Van Castle
+ Ruined Castle
+ Made some adjustments to the tutorial level
+ Added 5 more seconds to the timer in Cookie Crisis (due to a bug you'll actually have 400 seconds in this build)
+ Added some invisible P-switch coins near the P-switch in
, and along the way to the hidden door to make it a bit easier to find.
- Added an egg block near the first midpoint in Rockin' Cave.
- Slightly speed up the rotation speed of the DKC barrels. They now rotate every 12 frames which is slower than they did in V1.3 (8 frames), but faster than they did in Beta 4.6 (16 frames).
- YSQ now has 5 difficulty levels which affect various stuff.
+ Generous Yoshi: This difficulty is for the casual player that prefers their games to be fairly easy
+ Nice Yoshi: This difficulty is for the average player that prefers their games to be somewhat challenging. This difficulty is more or less what Normal was in V1.3.1 Beta 4.6
+ Mean Yoshi: This difficulty is for the skilled player that likes games that put up a challenge. This difficulty is more or less what Hard was in V1.3.1 Beta 4.6, but with some differences
+ Sadistic Yoshi: This difficulty is for the kind of player who can beat I Wanna Be The Guy on Impossible
+ Customized Yoshi: This difficulty is for the player that likes to customize their play experience to their liking
- Difficulty levels now influence the following (and can all be tweaked if you choose "Customized Yoshi")
+ Max HP: How much HP Yoshi can have at maximum
+ Damage Taken: How much damage Yoshi takes when he is hurt by something
+ Mercy Invincibility: How long Yoshi's mercy invincibility lasts for after taking damage
+ Hitstun: How long Yoshi is stunned for after taking damage (This is set to 0 by default on all non-custom difficulties)
+ Knockback: How fast Yoshi is flung when taking damage (This is set to 0 by default on all non-custom difficulties)
+ Starting lives: How many lives Yoshi starts with at the start of the game and after a game over.
+ Max Lives: the maximum number of lives Yoshi is able to accumulate.
+ Midpoints: Turning this off removes all checkpoints from YSQ's levels, forcing you to start over from the beginning of a level when Yoshi dies.
+ Health Regen: Turning this on allows Yoshi to slowly regenerate health over time. Yoshi's health will regen until he has enough HP to survive 2 hits (unless Yoshi's max HP is less than the amount of damage he takes). Yoshi restores 1 HP every 4 seconds unless Yoshi is stunned, or in his mercy invincibility period.
+ Health Restore: Turning this off prevents green coins and the stars generated from red eggs from healing Yoshi. Yoshi can only regain health by health regen or by having less than 2 hits worth of health when going to the overworld
+ Hardcore Mode: Turning this on will cause your save file to be erased upon getting a game over. Also, if this is on (which it is on Sadistic Yoshi and possibly Customized Yoshi), I'll call you out if you use emulator tools to escape a game over.
- Reduced Yoshi's fall speed from #$40 to #$30, which will significantly reduce the weight Yoshi has when starting a flutter jump while falling. It's still recommended that you time the button press between Yoshi ending the flutter jump and him starting to fall for optimal flutter jumping, but mis-timing the button press is now less punishing.
- Reduced the minimum Y speed Yoshi must have to flutter jump from #$24 to #$1F (which matches the speed he needs for the boosted flutter jump). Doing an optimally timed flutter jump will allow Yoshi to flutter higher than he could before, but it won't allow him to go higher than the peak of his jump (unless he was doing the boosted flutter).
Yoshi can now better compensate for all that pizza he likes to eat.
- The Yoshi coins functionality has changed.
+ Yoshi coins are now tracked individually, meaning you no longer need to get them all in one run without dying for them to count as collected.
+ Collected Yoshi coins now show up differently on the status bar to indicate if you've missed one somewhere. In addition, returning to a level from the overworld will cause the yoshi coins to appear dim, indicating you have X coin, but haven't collected it on this run.
+ Moved some of the Yoshi coins around. Seeing as how the challenge is now more on finding/figuring out how to reach them rather than that and getting all 5 in a single go, I figured I'd put some of them in more interesting spots.
+ You can now get 3 potential lives from a set of Yoshi coins. 1 for the 100 coins you get total for every 5 you collect, 1 for getting all 5 in a single level for the first time (only applies once), and 1 every time you get all 5 in a single run without dying.
+Yoshi coins now appear in a level regardless of whether you've collected all 5 of them already.
+ Collecting more than 5 Yoshi coins in a single run won't give you a 1-up. All 5 coins have to have a different internal ID for it to count.
- Fixed a bug where, when Yoshi bounces off the springboards in Sky Gateway, the thunder sound and the quake effect happen twice.
- Fixed a facepalm worthy bug where you can activate the purple ? block in Yoshi's house by throwing an egg upwards.
- Fixed a minor oversight introduced in Beta 4.6, where the Fattening Plains food wasn't changed to reflect the changes made to hard mode.
- Fixed a minor bug where it was possible for Yoshi to talk to an NPC while in the air.
- Fixed an oversight where a bunch of custom sprites could be killed with star power, if one were to use a cheat code to give Yoshi star power
- Fixed the mouse cursor sprite's controls so that its movement is less buggy.
- Fixed a bug where the health stars didn't check for the high byte of their Y position when displaying their graphics, causing them to wrap around.
- Fixed an oversight where the health stars were using fixed OAM indexes rather than dynamic ones, meaning that they could potentially make other extended sprites disappear.
- Fixed a bug where getting a game over while the upside down screen is in effect would cause the game over screen to also be upside down. This would also cause the game over text rendering to freak out a bit due to the flip screen ASM and VWF Dialogues ASM sharing a DMA channel.
- Fixed a bug where getting a game over while Yoshi has reverse gravity would cause the death music to play on the game over screen.
- Fixed a bug where Yoshi would sometimes not automatically flutter jump if you were holding B while being launched out of a DKC barrel.
- Fixed a minor bug where Yoshi doesn't show his kicking frame when kicking a flopping fish or shelless koopa.
- Fixed a bug where Yoshi would swallow nothing if his tongue animation was canceled while he was retracting his tongue while he had something on it. This also would cause Yoshi to have more than 6 eggs with him at a time, which would cause glitches.
- Fixed a bug where Yoshi's eggs would behave a bit odd when Yoshi had reverse gravity.
- Fixed a bug where the SMW falling spikes only hurt Yoshi when they're falling. The falling apples in Apple Woods didn't have this bug, as those were custom sprites.
- Fixed a bug introduced in one of the V1.3.1 betas where Spunky was only using half of his walking frames.
- Fixed a potential softlock in
, that could happen if you were stupid enough to enter a specific pipe without taking the key below it with you.
- Fixed a bug where message 7F was unusable.
- Fixed a minor bug where Yoshi could start a groundpound while he is on the ground if you jumped onto a ledge right before it began. This would cause Yoshi to not show his ground pound frames.
- Fixed a minor oversight, where the message you see when starting from the midpoint of look-alike plains was missing "Yoshi:" at the start.
- Fixed an oversight, where it was possible to enter one of the pipes in Forest Access without hitting the invisible coin block below it first.
- Fixed a recurring bug, where I'd have to reapply the extended NSTL patch since extended sprites would occasionally start disappearing. It turns out it was because of a hijack in the Yoshi Player Patch that would overwrite one of the extended NSTL patch's hijacks.
- Fixed a recurring bug, where glitchy score sprites would sometimes disaply. This was due to a hijack conflict.
- The bad Yoshi eggs now play the spin jump kill sound when they break and they also change their graphics when you hit them once.
- Fixed the cutoff in the Metroid Zero Mission cave BG used in levels like Giant Chasm.
now has a different taste in music. (aka. I changed the music in Rip Van Castle)
- Touching the soda bottle in Soda Warehouse no longer causes a screen transition.
- Removed a barely visible cutoff dirt tile in the normal exit room of Giant Chasm.
- Added a glow effect to the water in Toxic Beach in order to make it look more like it's radioactive.
- Made the Yoshi image outlines in the tutorial level white to make them more visible.
- On the overworld, Yoshi now does his standing idle animations instead of running left. If Yoshi is on his last life, then he will do his tired animations.
- Tweaked Yoshi's graphics a little.
- The goal flag sublevel in Vertical Forest is now part of the same sublevel as the second half of this level. This also means that this level is a bit longer, but not by much.
- Added HDMA BG gradients to many levels to make them look nicer. Some levels that had a fake HDMA gradient in their BG have been changed so that they have an HDMA gradient.
+ Due to the above addition, I've a routine that causes the HDMA gradients to fade during level end to prevent a bug that pretty much every SMW hack that uses HDMA gradients has.
- Improved some entrance and exit sublevels to make them look nicer.
- Added a small graphical effect, where a smoke cloud is generated whenever Yoshi lays an egg.
- Added a layer 3 background to a couple levels that didn't have one before (ex. Butter Bridge and Dessert Canyon).
- Changed the save game text
- The Yoshi head iris effect is no longer used just for entering a level.
===VWF Message Changes===
- Changed some message boxes and added some more:
+ In general, some messages have been shortened a bit
+ The second message box in Chuck's Locker Room is different: "99 out of 100 doctors recommend staying away from all the... umm.. 'stinky mud' in this area. It sucks you in like quicksand and can cause you to suffocate if you get deep enough into it."
+ The message box by Spunky after bringing him to Rocko is a bit different:
"Oh gosh. It's an escort mission, which are always terrible, aren't they? Not so.... wait, I see you already brought Spunky back to Rocko. Never mind then. Well, that wasn't painful at all, was it? It could have been worse. Be thankful Yoshifanatic didn't make you do this blindfolded while reciting the digits of Pi (unless you're doing some weird self imposed challenge)!"
+ The message where Yoshi finds the egg in
is now considered a cutscene, meaning that it is unskippable the first time seeing it.
+ Timothy (the lime green Yoshi in the outhouse) can now be talked to like any other NPC. He doesn't have much to say though.
+ Losing to Purple Yoshi in Yoshi Race now causes a message to display before Yoshi dies.
+ Purple Yoshi says something different if you hit the ON/OFF block before his message displays. "Purple Yoshi: Yoshi was about to ask if you wanted to race, but it seems like you wanted to anyway! Last one to the finish is a rotten Yoshi egg!"
+ Changed the message that appears when Yoshi
in Elite Koopa Zone
+ When Yoshi gets lost in Nightmare Forest, he now says 1 of 4 different messages.
+ In the boss rush sublevel, the floating text is now a VWF message that updates as you move around. In addition, each boss has a little blurb after its name.
+ Added more random strings (16 total) that can appear when hitting the first message box in Wacky Land.
- Changed how skipping a message works. Instead of ending the message, pressing start now causes the VWF text pointer to point to a new location. This allowed me to fix some oversights.
+ Skipping cutscenes is handled a bit differently. If you're allowed to skip it (which you will be told if you can before the cutscene starts), rather than being asked, you can simply press start at any time to skip the cutscene.
+ Skipping the final Yoshi Theater message
causes the "unlocked Pink Block" text to display unless the pink block's function was already unlocked.
+ Skipping the game over message acts as if you selected "Continue".
+ The message box introducing
is now skippable.
+ The message box introducing Wacky Land is now skippable.
+ Rocko's (orange Yoshi) message when trying to enter the outhouse is now skippable.
- Added a new command to the VWF message system. Command EB freezes the message box and it will not advance unless something outside the VWF routine changes the text pointer.
- VWF messages are now forced to close if the screen is set to fade out (to prevent the message from reappearing when loading another sublevel), or if another VWF message wants to display (a failsafe in case the player dies while a VWF message is active)
===Optimizations and code changes===
- Made some code that is repeated a few times throughout the ROM, such as the code that plays fart sounds or changes Yoshi's graphics into a routine so that they take up less space.
- Rewrote some of my older routines to be smaller and faster, as some of them were laughingly bad.
- Fixed even more cases of the code jumping outside of banks 80+.
- Removed lots of data that was only used by tools (RATs tags, db $42, etc.) as most of YSQ's custom data is now inserted manually.
- Removed a lot of duplicate level data by only storing each unique block of data once.
- Switched over to using GPS code instead of BTSD code for the custom blocks.
- Optimized various custom block codes, converted all .bin blocks to .asm, and added in the corner, head, and body offsets to the blocks that lacked them.
- Converted all the TRASM sprites used in YSQ to xkas/asar.
- Made several optimizations to the custom sprite code, ranging from removing duplicates of shared routines to removing unnecessary code (star kill routines, PHX PLX, LDA Absolute,X TAY, LDA #$00 STA $1DF9/C, etc.)
- Implemented LM's custom sprite list size feature, allowing me to remove a few code hacks I had to use to get some sprites working (message sprites no longer rely on custom blocks to display the correct message, NPCs no longer need the ON/OFF flag set to off to appear, etc.)
- Combined various sublevels into one.
- Implemented some simple optimizations to SMW's code that speed up the code a bit.
- Reduced the amount of lag that thrown eggs generate (a lot of it was due to them checking for collision twice for some reason).
- Modified the sprite used on the title screen so that it can display arbitrary objects on screen. This will allow me to save ROM space in levels where layer 2 needed to be sacrificed just to display something (ex. T-rex, Turtwig).
- Made it so that sprite buoyancy doesn't need to be on if the level is a water level.
- Made it so that the entire WRAM and most of the SRAM is cleared on start up.
- Created a system that allows me to make Yoshi automatically walk to a spot for a cutscene. Yoshi's pathfinding is very simple currently, but I plan on making it more complex.
- Disassembled more Lunar Magic routines, particularly overworld related ones.
And that's all the changes I've done for this build. I've still got plenty more to do, but you can probably tell I've been busy with YSQ. XD If this changelog or the many beta releases of V1.3.1 haven't made it obvious, I'm fairly committed to making YSQ the best it can possibly be. I will not stop until I am satisfied with YSQ's quality level. Perhaps by the time I'm done, I will have even fixed the biggest issues some people have with YSQ.
Anyway, before ending this post, here is a list of stuff I was thinking of adding at some point to YSQ. Note that there is a chance I might not implement some of these things if they prove to be too complex and/or take up too much ROM space. I'll try to implement as many of these as I can.
- YSQ tracking how fast you beat a level. Would be useful for speedrunners.
- The unlockables in Yoshi's House become global unlocks instead of file specific unlocks. Meaning that once unlocked, they're unlocked on all files.
- An actual reward for finding the Yoshi coins.
+ An unlockable video for each level that you've collected the five Yoshi coins (like the title screen demo, except applied to each level).
+ A super secret final level accessed only after finding all the Yoshi coins.
- Making the status bar appear on the overworld.
- Changing the status bar display with select, allowing it to display different information.
- Multiple title screen demos that get randomly picked from (the current one will always be the first one displayed)
- A feature where Yoshi
gets fatter depending on what the player does, instead of Yoshi just suddenly gaining a lot of weight at one point. Yoshi would have 4 fat states: Normal, Pudgy (V1.3 Fat Yoshi), Fat (V1.3.1 Fat Yoshi), and Super Fat.
- Unlockable cheats. They'll be accessed by entering certain names in the name entry field to unlock them, then you can toggle them from within the cheats menu.
- Unlockable songs. Unlocking the music house won't give you access to all the songs in YSQ's song list. You'll have to hear it somewhere first before you'll be able to play it in the music house. However, any songs that happen to not play anywhere will be unlocked from the start.
- More cheats (you guys got any suggestions for more cheats?)
+ Debug mode
+ A couple cheats that instantly unlock specific things (All songs, All Global Unlocks, etc.)
+ A cheat that allows one to skip all cutscenes.
+ Another cheat that affects Yoshi's appearance (if implemented, there would be a way to unlock this alternate appearence in game somewhere).
- A way to flag a file if any cheats were used that makes YSQ easier.
- A way to display the custom difficulty settings in game.
- Additional difficulty related settings that can be tweaked when playing on "Customized Yoshi". (you guys got any suggestions for this too?)
+ Regen Max Amount (How many hits worth of HP Yoshi can regen at max when health regen is turned on)
+ Regen Health Speed (How fast Yoshi's health regens when health regen is turned on)
+ Min Health On OW Load (The minimum amount of HP Yoshi will start a level with if he has less than that on OW load).
+ Max Egg Amount (How many eggs can follow Yoshi at a time).
- The ability for the MSU-1 to be set to either play music or play voice clips during gameplay. However, I won't be providing an MSU-1 soundtrack for YSQ (I will provide the voice clips though, since they and all the other stuff that are included with YSQ fits within SMWCentral's 10MB limit) I will provide the song list for YSQ for anyone who wants to give it a try, though.
- The ability to modify the MSU-1 song volume and loop flag data in game. Will be very useful if one decides to have their own custom audio play in YSQ.
- An extra sublevel to Nightmare Forest that would add a bit more to that level's theme (this level is themed after some of the nightmares I used to have years ago, if anyone was curious).
- Modifying the gimmick of Toxic Beach. Instead of killing Yoshi, the level will have a time limit that drains drastically if Yoshi is touching the water.
- Rewriting Yoshi's graphics routine again so that it's much more space efficient (Yoshi's graphics take up ~92 KB, a good chunk of which is duplicate data from GFX32 and slightly modified body tiles for the mouth full heads).
+ Making it possible for Yoshi's head to be animated separately from his body, allowing him to have different expressions based on what he is doing.
- A couple more music tracks
- A pause menu
- A new VWF function that adds an UberASM like capability to VWF messages that would allow code to run every frame on a per message basis while X message is displaying.
- Finish implementing all partially implemented features/changes
A super secret and crazy thing that would possibly make YSQ one of the biggest and most technically impressive SMW hacks ever.
And that's about it for all the stuff I have to show for this C3. I hope you guys liked 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)
My WIP SMW/SMAS+W disassembly
Yoshifanatic's Discord Server
: A place for fans of my stuff and/or Yoshi to chat with others.