OK, for a while now, the YI hacking FAQ v1 has been pretty outdated... And with the release of Golden Egg, much of that 46+-page topic is now irrelevant to new YI hackers. So, I've decided to write out a new FAQ.
If you have any questions that aren't answered here, feel free to ask them in this thread.
Also, feel free to suggest questions I could add, if they seem like questions a variety of people might ask.
Before Golden Egg's release, Eggvine, a glitchy editor by Squash Monster that crashes a lot and doesn't display graphics, was the best editor available. Eggvine v0.81+ is a slightly modified version by Yoshis Fan that contains better object rendering and object/sprite descriptions, making it much easier to use than the official versions.
- Which Yoshi's Island ROM version do I need?
Super Mario World 2 - Yoshi's Island (V1.0) (U). It should also be headered (see next question) to allow tools other than Golden Egg to work on it.
Don't ask where you can download it-- people won't give you a link (at least, they're not supposed to). And definitely don't upload one to SMWCentral-- uploading/hosting ROM files is illegal in most countries.
To verify if your ROM is the correct version: it should have a CRC-32 checksum of D138F224. (Snes9x displays this checksum when you load the ROM; other emulators should have a method to display ROM info where you can see the checksum.)
If your ROM's CRC-32 checksum is CF98DDAA instead, you have a version 1.1 ROM. In that case, you can follow these directions by Yoshis Fan:
Originally posted by Yoshis Fan
Check the file size. If it is 2,097,664 bytes, you can apply this patch using Floating IPS in order to correct your ROM.
In case the file size is 2,097,152 bytes, use HeAdder in order to add the SMC header to the ROM, then apply the patch using Floating IPS.
- What's the difference between a headered ROM and a headerless ROM? Which type do I need?
Headered SNES ROMs contain an additional 512 (0x200) bytes at the start, called the SMC header (not to be confused with the SNES header). This SMC header has no purpose, but it changes the location of the remaining data.
If your Yoshi's Island ROM is exactly 2097152 (0x200000) bytes, it's headerless; if 2097664 (0x200200), it's headered. (Other values mean your ROM probably isn't a clean ROM-- find a different one.)
Golden Egg supports both headered and headerless ROMs, but if you're using other tools or making hex-edits, make sure you're using a headered ROM.
To add a header to a headerless ROM, you can use a tool such as HeAdder.
By the way, if you're creating an IPS patch, make sure your original and modified ROMs are either both headerless or both headered, and state which type when you release the patch (since it must be patched to the same type of ROM). (All YI hacks created before Golden Egg require a headered ROM.) With BPS patches, it does not matter if the ROM being patched to is headered or unheadered.
- When will (insert planned feature here) be added to Golden Egg?
Due to Romi's inactivity, it is highly unlikely that there will be any future updates to Golden Egg. Your best bet is to wait for a new editor to be released instead.
- After editing my ROM with [insert tool here], I opened it in the emulator and it said checksum fail or bad checksum. What's wrong?
Nothing is wrong. Making almost any change to a ROM will cause the checksum to fail. Some tools (such as Golden Egg, and the SMW editor Lunar Magic) auto-correct the checksum when you save the hack, but if you use another tool or a hex-editor, you'll probably have a bad checksum after that.
There are tools available to fix the checksum, but there's no reason to do that unless you're about to release the hack.
- Golden Egg says I'm out of free space. Help!
Due to the way that Golden Egg saves levels, it may be unable to find free space before all free space is actually used up. In this case, you should try using furious's Yoshi's Island Level Tool to extract all levels and insert them back into a clean ROM.
- Can I hack Super Mario Advance 3 (the GBA version of Yoshi's Island)?
Not directly with Golden Egg or Eggvine, but if you've made a hack of the SNES version, you can try using adolif2's SNES-to-GBA level converter to convert it to GBA format. (Note that the SMA3 level format is not entirely known, so your level may contain camera-scrolling problems or other glitches.)
Also, this thread contains general SMA3-hacking offsets. (Note: A good amount of experience with hacking the SNES version is highly recommended to understand the SMA3 thread.)
The remainder of this FAQ will assume you're hacking the SNES version.
- Why is a Fuzzy section/pseudo 3D castle section glitchy in ZSNES?
When using ZSNES it's not necessarily your fault, that such an area will appear glitchy. ZSNES has an issue when it comes to using the level mode of these areas. Switching off the new graphics engine fixes the problem. If you still have issues after switching it off, there's something wrong with your level settings. (It is not recommended to use ZSNES to test your hack.)
- Why does the game freeze when I attempt to load my level in the emulator?
The most common reason for this is that you've placed an object out-of-bounds. Check each object that touches the level boundary, and modify any that extend past the border.
Another possibility is that your level uses too many screens... the game cannot load more than 64 (decimal) screens in memory at one time (even though the level area is 128 screens large). You'll need to make your level a little smaller. (You could always create another level with the same or similar header settings.)
- Why is my level snowy?
If you're using the flower tileset (C) found in the original 1-1 and welcome level, the regular ground objects will appear snowy for some reason. Use objects E4-EC instead, or try changing the BG1 tileset to a different setting.
- Why won't the screen scroll where it should? / How do I prevent the screen from scrolling beyond a certain point?
Normally, you can only scroll to screens that contain objects (it's irrelevant whether or not they contain sprites).
To enable scrolling to a screen, add any object to it (XFD will work if your screen contains no other objects).
To disable scrolling to a screen, you can place XFE or XFF in it (XFE leaves the objects in that screen intact, while XFF removes the objects entirely).
To lock horizontal scrolling partway through a screen, use sprite 1D6 (Lock horizontal scroll). This sprite will only work when Yoshi is positioned to its left; approaching it from the right will cause the screen to jerk and the level to glitch. Using this sprite in an area more than 1 screen tall is not recommended.
- Why is my level missing some tiles below Yoshi's starting position? / Why does the screen immediately jerk slightly upwards/downwards when I first enter my level?
This glitch may happen if your level entrance is set too high up on the screen, when your room does not contain vertical scrolling.
There are two main solutions:
- Enable vertical scrolling (possible by placing XFD in the screen above... or any other object for that matter)
- Or edit the level entrance (Y-positions ending in A, B, or C are generally safe as-is, A being the most common).
- How can I add/edit screen exits?
For the "Target Page", use the screen number containing your screen exit. (That is, the screen containing the pipe/door/etc. that takes you to a new area.)
Note: If your screen exit is on or next to a screen boundary, I recommend creating two identical screen exits, one for each screen. (Otherwise, your screen exit may vary depending on Yoshi's exact location-- this is especially true in the case of instant level warps.)
As for the destination...
If you're having trouble finding the correct destination coordinates, a general rule (not always true, though) is that Yoshi's top-left corner will appear at those coordinates. (Of course, you should still always test your screen exits.)
Also, if you don't know whether to use entrance type 2/3/4 or 6/7/8, a general rule is to use 2/3/4 if Yoshi is not visible while entering (such as coming out of a pipe), and use 6/7/8 if Yoshi is visible (such as entering from the side of the screen). (They're mostly equivalent, though-- try using the other one if Yoshi looks strange.)
- How can I edit level entrances and midway entrances?
Changing Yoshi's starting positions is currently not supported by Golden Egg. Until that feature is implemented, you can use these tools (headered ROM required) to edit them instead.
However using the Middle Ring editor is not recommended, as it can corrupt the ROM data.
You can use the Better Middle Rings patch to edit midway entrances. This patch makes it so that midway entrance data only corresponds to which sublevel you collected a Middle Ring in, simplifying the process of creating and editing midway entrances.
- What is a "translevel" number?
The translevel number (a.k.a. "map icon number", formerly known as the "level index") is a number used for determining things specific to the level as a whole (such as midway entrances and messages), as opposed to one specific "level" within that level. (I know, the two different types of level are confusing. That's why the term translevel exists.)
Each map icon has its own translevel number, numbered consecutively, 0xC icons per world. For example, 1-1's translevel number is 0, 1-8's is 7, Extra 1's is 8, and Extra 6's is 0x44. The highest possible translevel number is 0x47. (That is, unless the Select+XXYBA minigames also have translevel numbers. I'm not sure if that's the case.)
By the way, with the exception of 0xA (the intro scene), and 0xB (the welcome level), the last two translevel numbers for each world are unused, since they would refer to the score and controls icons.
- How can I edit graphics?
You can use Ycompress (headered ROM required) to extract and re-insert graphics to Yoshi's Island.
YCompress is a Command Line tool, so to use YCompress, copy the Windows Command Line into the same directory as your YI ROM and YCompress.
You should be able to find the Windows Command Line by searching for "cmd.exe" on your Windows Computer.
Then, run the Windows Command Line and type in the commands needed.
For extracting graphics, type "ycompress 0 yirom.smc gfxfile.bin" (note, that you have to replace the "yirom.smc" with the name of your YI ROM) and hit Enter.
For inserting, use "ycompress 1 120200 yirom.smc gfxfile.bin" (replace "yirom.smc" with the name of your YI ROM and "gfxfile.bin" with the name of your GFX File).
Once you have a .bin file containing the graphics, you can edit them using a tile editor such as YY-CHR or Tile Molester. (Remember to re-insert the graphics after you edit them!)
Note: In YY-CHR, you'll need to change the graphic format to "4BPP SNES" for most graphics to appear correctly. (There's probably a similar setting in other tile editors.)
Note 2: Ycompress normally overwrites all ROM data in the 0x120200-0x1F957F range when inserting, even though the graphics don't use all this space. If you type 11 instead of 1, Ycompress will only overwrite as much as necessary instead of filling the rest with 00s. (If you don't understand what this means, you don't need to be concerned about it.)
- How can I edit the title screen logo?
Naulahauta has created a very comprehensive guide about editing the title screen logo. (Note: the images in this thread no longer work)
- Is there a list of which palettes work well with each Layer 2 background?
Mattrizzle's background list (converted to hexadecimal by GlitchMr) contains images of each background, as well as various palettes that they function well with.
- Why does the sprite I inserted have glitched graphics?
Most sprites will only appear correctly in a certain sprite tileset (sprite set for short).
- Is there a list of which sprites can be used in each sprite tileset?
Here is a spreadsheet by GbreezeSunset listing all the sprites available in each sprite set, as well as their names in Golden Egg and a preview of their graphics.
Yoshis Fan has also previously made a list of which sprites are compatible with each sprite set. You can download it here. (Note: this document uses the names of sprites in EggVine v0.81+, so the sprite names listed here may not match up with those listed in Golden Egg.)
- None of the sprite sets contain the sprites I need. What can I do?
The sprite sets themselves are editable using this tool by Kipernal. It may not always be possible to create a working sprite set for any given collection of enemies, but it does add more possibilities.
- How can I edit level names and other text?
You can use B.Y.T.E., a text editor made by BTD6_Maker. Python 3 must be installed on your computer in order to use this tool.
- How can I edit the YI font itself?
I think it's easiest to edit a copy of the font.bin file included with the font expansion patch, and insert the patch to use your modified font. The width of each character is also editable within the .asm file. (If you change the name of font.bin, make sure to also change the "incbin font.bin" line within the .asm file.)
To display the tiles correctly in YY-CHR, change the graphic format to "1BPP" and the pattern to "Vertical". You won't be able to scroll with the scroll bar while this in in effect, but you can still scroll using the "ADDR0x80" button.
For reference, the previous method of text editing follows.
Previously, text editing required a hex-editor (such as Translhextion; note that not all hex-editors support table files), as well as a table file.
- Where can I find a table file?
You can find a collection of YI table files at http://media.smwcentral.net/Zeldara/yi/. YI Text Table is a table file that was included with the last few versions of Eggvine, YI Text Table 2 is a file that was specifically optimized for my own use (try it out if you wish), and the "Don't use!" file is a more detailed version for opening in a text editor.
There's also "yi_table_expanded.tbl", included with Mattrizzle's font expansion patch. (Of course, you'll need to apply the patch to use the characters that weren't in the original game.)
- So, what do I do now that I have Translhextion and a table file?
Open your ROM in Translhextion, and scroll to the x111533-x11552E range. Most of the text is there. (Or you can Ctrl-G and enter a number in that range, such as x114444. (The "x" is important.))
Then go to Script --> Open Thingy Table, and choose your table file. Then check the box marked "Thingy View Active". Actual readable text (instead of random symbols) should now be displayed on the right side of Translhextion.
Now, how do you edit this text? Well, you can't actually type the letters themselves... instead, you need to type the hexadecimal equivalents of the letters, on the left side. Yes, it's time-consuming, at least at first.
For example, instead of "a", you'd type "D8". (You can see these hexadecimal equivalents by opening the table file itself in a text editor.)
Of course, make sure to test your edited text (if there's too much text on one line, it may not all appear).
(And be careful around the line breaks (they generally contain FF or FE; you can see exactly what they look like in Mattrizzle's table file).)
(Note: if your line is too long, or you need to shorten lines for more space, you can manually move line breaks... but keep them in the same order. The line breaks should be arranged like this.)
- The text I'd like to edit isn't in the x111533-x11552E range. Where is it?
Ctrl-F, select "Hex" (not "Text"), and enter the hex equivalent of the text you're looking for.
For example, to search for the "A long, long time ago . . ." that appears before the title screen, you can search for AAD0E3E6E5DE ("A long"). (Try to avoid searching for punctuation, though, since commas can be either 37 or CF, and periods can be either 3F or F3 (CF and F3 contain a space afterward).)
(Note: If the text is actually a separate image (such as the "Nintendo Presents" logo, or the words on the file select screen icons), you won't be able to edit it using this method. You'll need to edit the graphics instead.)
- I'd like to add a message block to a level that didn't contain one in the original game. Is this possible?
Most levels can actually contain up to 4 messages. The message displayed depends on the translevel number, and whether the message block's X and Y position are even or odd.
Note: Adding new messages requires slightly more advanced hex-editing than simply editing text.
(Exceptions include the Welcome level and the Extra levels-- they share some of their pointers with those intro/Kamek messages. It's a good idea to place your message block first and test it out, to see if it displays a special message (if so, try the other odd/even X/Y values).)
To add a message to a level, create the text somewhere in the x111533-x1201FF range. (It's safe to overwrite existing messages, but be careful around the special messages, such as the first flower, lose-Baby-Mario, death, intro, Kamek scenes, Bandit minigames, etc.) Make sure your message starts with FF 05, and ends with FF 0F FF FF. The offset of the FF in the FF 05 is important-- remember it.
Then, you'll have to edit the pointer to that message, to tell the game to read the correct data.
The pointers start at x1112DB. To find the pointer you need, take x1112DB, and add 8 * (the translevel number). The next 8 bytes are the pointers to (X even/Y even), (X odd/Y even), (X even/Y odd), and (X odd/Y odd) respectively; 2 bytes each.
To calculate the pointer you need... remember that offset I told you to remember earlier? I'll use the example offset of x111AC5.
- Remove the 11 at the beginning (so you have 1AC5).
- Then subtract 0x200 (18C5).
- Finally, swap the first two digits with the last two (C518). This is your pointer. Overwrite the two bytes you found earlier with the bytes of your pointer, and you've repointed your message!
(Now test your message to make sure you've repointed it correctly-- there's a good chance you've made a mistake, especially if it's your first try.)
- Help! The items I placed mysteriously disappear!
You've probably either encountered an item memory glitch, or reached the sprite limit.
Sprite limits are simple-- if too many sprites are displayed on the screen at the same time, new sprites will not appear. (Also, the game generally slows down when there are a large number of sprites on-screen.)
Note: An alternate type of sprite limit occurs when you're using too many different types of Super FX sprites (these are generally sprites that rotate/stretch in some manner) in a single room.
If your goal ring vanishes and there aren't other sprites around, Super FX sprites might be the issue. Try removing one enemy/obstacle type in that level, or add a screen exit to a separate room (Super FX sprites only take up memory if they've appeared since the last screen exit you entered).
(Also, if your sprite set supports S110 flower (which does not use Super FX), you can use that instead of SFA flower (which does use Super FX).)
Now for item memory.
If you place any collectable item directly above/below another collectable item, in the same screen, collecting one item will cause the other(s) to vanish if you scroll it off-screen and back on.
Some screenshots of potential item memory issues can be found here.
Collectable items include:
- coins (including ! switch coins)
- red coins (including Fly Guys and Bandits with red coins)
- Fly Guys of any type, actually
- ? clouds (only some types, such as the ones with stars, flowers, 1ups, ! switches, or morph bubbles)
- locked doors (the lock is the "collectable" item, since it vanishes permanently)
- S161, the bonus sprite (it's always affected by item memory, even if it's a door)
They do not include:
- ? clouds that respawn after reloading the level (if it contains a red bridge/staircase or a watermelon for example)
- bubbled 1ups
- most enemies
Note that normal coins will not vanish until you actually reload the area (via a screen exit). If you place only normal coins above/below each other, item memory isn't really an issue. (What matters is if a major item vanishes.)
- I didn't place any items directly above/below each other, so why do my items still vanish?
Each level contains an item memory/Midring header setting.
If two or more levels share the same setting, collecting items in one may cause items in another to vanish.
It is highly recommended that you make every sublevel in your level use a different item memory setting (as in, if 4-4 contains levels 1E, 55, AA, and C1, set their item memory indexes to 0, 1, 2, and 3, in any order).
(If your level contains 5 or more sublevels... you'll just have to test repeatedly, collecting every single item and watching closely for any that vanish. Therefore, I recommend that you try to limit your levels to 4 or fewer sublevels (not counting boss battles) when possible.)
- Why do some sprites/my level's goal appear glitched after a Chomp Shark chase?
For whatever reason, after sprite S154 is defeated and falls off the screen, the available graphics space for SuperFX sprites is reduced for the rest of that room, making them share graphics. The most common place to see this issue is if you have the goal ring immediately after a Chomp Shark chase. If you wait for it to fall off the screen, the goal graphics will become corrupted.
An easy fix is to simply avoid having more than one SuperFX sprite on the screen at any time in sections that use this sprite. In the case of goals, make sure there is a screen exit separating the goal area from the chase area.
- Why doesn't my boss battle function correctly?
Bosses are some of the most complex sprites in the game, and require quite a lot of experimentation to edit.
First of all, many boss settings are world-specific. If you use a boss in any world other than the one it originally appeared in, without changing these world-specific settings, your battle will likely be glitched.
To relocate bosses to different worlds, you will need to use a hex-editor to swap certain setting bytes.
(Please note that bosses originally used as x-4/x-8 bosses still act like x-4/x-8 bosses, regardless of the actual level they appear in. (For example, if you use Burt the Bashful in World 5, you'll need to modify the setting for 5-4's boss, even if you used Burt the Bashful in 5-8, 5-1, 5-Extra, or somewhere else.))
These are the settings you'll need to modify (colored for easier reference) (my comments are in purple):
Originally posted by Mattrizzle
The values go in this order: 1-4 boss, 1-8 boss, 2-4 boss, and so on through the 6-8 boss.
65C60 Text pointers to Kamek's speech before each boss battle(each pointer is two bytes) (This can be left unchanged.)
The following 7 tables contain the non-header settings for Kamek's magic spells in each boss battle:
Each of these tables are 1 byte per boss battle... 65C76-65C81[02 02 02 02 04 04 02 04 02 04 04 04] Unknown 1 (02=Layer 2, 04=Layer 3)
...and these are 2 bytes per boss battle: 65C9A-65CB1[D8 00 D8 00 D8 00 D8 00 FA 00 FA 00 D8 00 FA 00 D8 00 FA 00 FA 00 FA 00] 00D8=Layer 2, 00FA=Layer 3
65CB2-65CC9[00 3E 00 3E 00 3E 00 3E 00 36 00 36 00 3E 00 36 00 3E 00 36 00 36 00 36] VRAM upload location for magic tilemap (3E00=Layer 2, 3600=Layer 3)
65CCA-65CE1[1F 61 DF 22 00 7F EC 23 1F 61 DF 22 00 7F 13 5C 1F 61 DF 22 00 7F EC 23] Color of Kamek's first magic spell (Changing this is optional; you can also experiment with different values)
65CE2-65CF9[DF 22 00 7F EC 23 00 7F 00 7F EC 23 1F 61 20 5D EC 23 1F 61 DF 22 1F 61] Color of Kamek's second magic spell (Changing this is optional; you can also experiment with different values)
65CFA-65D05[0A 0C 0A 0C 0A 0A 0A 0C 0A 0A 0A 0C] Music value to use for each boss battle(not the bank) (For x-4 boss music, use 0A here and level header setting 3 or 5; for x-8 boss music, use 0C here (or 0A for longer intro found in piranha/raven battles) and header setting 7 or 8.)
66769-6678C Boss Palette Pointers(After transformation) [CA A5 5F] 1-4 Burt the Bashful [22 21 70] 1-8 Salvo the Slime [22 21 70] 2-4 Bigger Boo [22 21 70] 2-8 Roger the Potted Ghost [A2 21 70] 3-4 Prince Froggy [22 21 70] 3-8 Naval Piranha [06 A6 5F] 4-4 Marching Milde [22 21 70] 4-8 Hookbill the Koopa [82 21 70] 5-4 Sluggy the Unshaven [8E A5 5F] 5-8 Raphael the Raven [42 A6 5F] 6-4 Tap-Tap the Red Nose [C2 21 70] 6-8 King Bowser
6678D-667B0 Boss Palette Pointers(Before transformation) (Warning: For some reason, changing the pre-transformed palette pointers for x-4 bosses will result in them using the wrong palette... however, if you leave the pointer unchanged, the boss will appear fine.) [02 21 70] 1-4 Burt the Bashful [22 21 70] 1-8 Salvo the Slime [82 21 70] 2-4 Bigger Boo [22 21 70] 2-8 Roger the Potted Ghost [22 21 70] 3-4 Prince Froggy [22 21 70] 3-8 Naval Piranha [A2 21 70] 4-4 Marching Milde [22 21 70] 4-8 Hookbill the Koopa [82 21 70] 5-4 Sluggy the Unshaven [42 21 70] 5-8 Raphael the Raven [42 21 70] 6-4 Tap-Tap the Red Nose [02 21 70] 6-8 King Bowser
Tip: X-4 bosses should always be used in X-4 levels, and X-8 bosses should always be used in X-8 levels. Actually, as Zeldara109 pointed out, bosses can be used in any level of a world. However, the settings only allow for one X-4 and one X-8 boss per world.
In addition, if using the Tap-Tap boss in a level other than 6-4, you'll need to change the values at 79E4D, 79ECF, 79FF2, and 7A20D[3F by default] to the translevel number (not level number) that you're using the Tap-Tap boss in... Otherwise, the transformation scene will be skipped. (However, if you do skip the scene, you may be able to use the Tap-Tap boss without the correct world-specific settings...)
Also, if you're using an x-4 boss at the end of a world or an x-8 boss in the middle of a world, you may also want to add/remove the key scene at the end of the battle. This can be done with hex-edits available here.
Then, it is highly recommended that you start with the exact room the boss originally appeared in (if you already overwrote that room, open it in a clean ROM and reconstruct it in your hack to the best of your ability).
Yoshi's entry position, the exact location of the boss sprite and other sprites, and various other things (especially header settings) may affect the boss battle. I strongly recommend making one change at a time, and testing the boss battle after each change-- even something as simple as editing the background color may result in unexpected glitchiness.
- Why isn't (insert other sprite here) working?
It depends on the specific sprite.
However, in general, it can help to check the levels in the original game that use that sprite (checking existing YI hack levels can also help), and compare the header settings and surrounding object layouts.
I've also created a ROM map wiki page (based on an old ROM map of S.N.N.'s). I don't think many people (if any) actively contribute to it.
If anyone is willing to help copy the offsets from that thread into the wiki ROM map, that would be appreciated.
Alternately, you can upload your patch to SMWCentral's File Bin. In that case, it doesn't matter if it meets the guidelines.
Though remember: After creating a patch, play through the entire hack 100% before you release it.
You may also create a thread for your hack in this forum, whether it's submitted to the hacks section, uploaded in the file bin, hosted elsewhere, or even unreleased (as long as you have screenshots or videos to show). Including a * character at the start of your thread title is recommended, to label it as a hack thread.
- I found a mistake in this FAQ / have a suggestion to improve this FAQ...
Please tell me as soon as possible-- I'd like this FAQ to be accurate and easy to understand.
Let me add this: Yoshi's Island (Small) ROM-Map, created by S.N.N.
I found this on some website (maybe it was S.N.N.'s?). Well, anyways, here it is. It's not very much so far, but at least it is a bit. Romi also made an even smaller RAM-Map somewhere.
- "What's the difference between a headered ROM and a headerless ROM? Which type do I need?"
- "Why won't the screen scroll where it should? / How do I prevent the screen from scrolling beyond a certain point?"
- "Why does the screen immediately jerk slightly upwards when I first enter my level?"
- "How can I edit level names and other text?" + all of the questions below it in that section
- "Why does the game freeze when I attempt to load my level in the emulator?"
(still need to add: boss relocation, item memory, Golden Egg screen exits)
Also colored the questions to make them more distinct (I hope).
Anyway, I'm not sure if I explained text editing clearly enough... Could someone who hasn't yet tried editing text please see if my explanation is helpful?
Let me add this: Yoshi's Island (Small) ROM-Map, created by S.N.N.
I found this on some website (maybe it was S.N.N.'s?). Well, anyways, here it is. It's not very much so far, but at least it is a bit. Romi also made an even smaller RAM-Map somewhere.
The ROM map was indeed made by S.N.N., and it was hosted on his website. My guess was he made the original file in a rich text editor and converted it to HTML for his website.
Personally, I think that the ROM map should include SNES offsets as well (even though the original one didn't), and the part about text editing should mention how to do it without the table, for people who don't use Translhextion. Other than that, nice job!
I agree, the SNES offsets could be useful. I've added a "SNES" column to the ROM map.
As for editing text without the table... wouldn't it be the same thing, except you wouldn't be able to see what you're editing (and you'd need to manually convert a message to hex (or find it via pointers) in order to locate it in the ROM)? (As far as I know, all of the existing YI hackers (pre-Golden Egg) use Translhextion... I'm not sure what other methods exist.)
Good thing this FAQ is becoming more comprehensive that fast
I'm not sure whether the "complex" in your post has been irony, but I personally find it like the easiest thing to write pointers to a certain index. Anyways, for people, who are new to YI hacking or ROM hacking at all it could be complicated.
Quite a lot of people seem to be intimidated by hex-editing in general. Not sure why (I sort of like hex-editing). I'd guess it's because things aren't labeled, except with numbers.
Anyway, message block repointing is probably more complex to explain than most of the other things in the FAQ. Mainly because you're not dealing with fixed offsets (you have to choose an offset for the message, and calculate one for the pointer). Then there are things like reversing the byte order and subtracting 0x200 (not in that order). (Try to look at this from the point of view of someone who is new to using a hex-editor. There is quite a lot of chance of error if you're not careful.)
(Of course pointers are easy for anyone who significantly hacked YI with Eggvine, given that we had to deal with pointers all the time.)
I'd made a mistake in the answer to "I'd like to add a message block to a level that didn't contain one in the original game. Is this possible?"
"The pointers start at x11133A. To find the pointer you need, take x11133A, and add..."
That offset should actually be x1112DB, not x11133A. If you've tried to repoint a message using my directions, and it didn't seem to work, that's why. (If you've mistakenly changed any bytes in that region, I highly suggest changing them back to their value from the original game...)
You may want to note that Kuribo will replace SMWC and will focus on Mario hacks in general instead of SMW hacks, which will have a place to submit your YI hack (I think it will).
And Kuribo will replace SMWC... when?
As far as I know, Kuribo was announced at least a year or two ago, was identical to a partial SMWCentral for a few months, closed sometime before I registered here, and hasn't had any updates since. (If it ever actually opens, though, then yes, I'd expect it would have a method to submit YI hacks.)
Anyway, I don't see a need to speculate about Kuribo any more than I saw a need to speculate about Golden Egg before Romi's surprise release last C3. (Romi's last Golden Egg announcement before then was several years earlier (before I even started following the YI hacking forum), and I think most people had believed Golden Egg was abandoned.)
Edit: A few minor updates. "How can I edit level/midway entrances?" - Described midway entrance editing in more detail "Why doesn't my boss battle function correctly?" - The Tap-Tap boss requires more hex-edits to relocate than the other bosses; I forgot to list them earlier. They have been added now.
Here is a handy-dandy thing I made, it took quite long, so appreciate it! Midring Expander.ips
Upon applying the patch, you will get four Midrings for each index with a playable level without any overlapping data.
Upon applying this, every change to the original Midring data is undone. That means, that you have to redetermine them after applying this!
Technically, this patch will do the following:
- It changes the Midring-Pointers, so they point to the new data.
It overwrites the space normally used for Midring-data with one part of the expanded data. The second part of the data (0x180 bytes) is sent to 0xBFFDB, means it overwrites some free space, which is at the end of the level pointers.
The old Midring-data is saved at the same time, so you don't lose them. (For a hacker, this might be a bit redundant, but eh.)
- You get all possible Midrings for each level without having to know any hex for most of them.
- Most of the data can be edited by Romi's Midring-Editor.
- It even adds Midrings to the Extra-levels (most Extra-levels didn't have Midrings in the original game)
- Overwrites a small amount of free space.
- Could corrupt your Midring-data, since the data you already edited is gone upon applying. In case you already edited some Midring-data you will have to determine each Midring again after applying this patch.
- From 4-4 on the Midring-editor cannot edit anymore. It's not my fault, Romi simply programmed it so, that it only reads data from 0xBF7DB to 0xBF9C2, where the original data is stored. He made the editor unable to read data from locations other than the above mentioned range.
From 4-4 on you must Hex-Edit your Midrings. Open Translhextion and jump to 0xBFFDB. There is a bunch of data there (0x180 bytes). That's the Midring-data of 24 level indexes. Each index is 0x10 (16) bytes. Each index consists of four strings of data, each 0x4 (4) bytes. Each four bytes are one Midring, you could say. Depending on its position, it's Midring #0, #1, #2 or #3. What Midring the game takes upon K.O. is determined by the item memory index. It equals to the Midring index number. Let's say the last Midring you passed has been in a level with item memory index #2. When you die now, the game lets you start where the data of Midring index #2 for the level index of your level leads you to. If the last Midring you passed in 5-4, for example, was in a level with item memory index #1, the game takes Midring index #1 from level index #33 (indexes go per map icon. 1-1 to World 1's Score-Icon are indexes #00 to #0B, 2-1 to W2's SI are #0C-#17, 3-1 to W3's SI are #18-#23, 4-1 to W4's SI are #24-#2F, 5-1 to W5's SI are #30-#3B, 6-1 to W6's SI are #3C-47 ===> 5-4 is #33)
To calculate the position of one index string, do the following:
(LevelIndex * 2) + BF751
There's a 2-byte pointer there. Swap byte one with byte two, for 33 the example is:
The string says [90 08]. Swap it: [08 90]. Now calculate:
(4 * Item Memory Index) + The number + BF7DB
For the example it is:
4 + 890 + BF7DB = C006B
Now you have the Offset of the Midring index you want to edit.
The format is the following:
1st byte: Level to start
2nd byte: X-Position to start
3rd byte: Y-Position to start (of Yoshi's head)
4th byte: Entrance Type
It should work without any problems, I've tested it for quite a lot levels.
Wait, there's free space within the range of the Midring pointers?
(If I had known that, I could have saved myself a lot of trouble regarding YIKR2... I had to rearrange much of the existing data, in order to fit in 4 6-8 Middle Rings, 4 additional Middle Rings in earlier levels, and about 6 Extra-level Middle Rings...)
Yes, there is. 777 bytes are behind the level data pointers. The last Midring index string you can theoretically use goes from 0xCF7DA to 0xCF7E9.
It seems you have to edit that section of FAQ, where it says, there's not enough free space in order to have enough Midrings.
Aside from that, I'll be posting some useful information on how to let screen exits lead to the correct destinations and how to use the entrance types correctly in the future (maybe tomorrow or later).