Language…
8 users online: bd90492, DarkennyTheBlob, Jordan, Lane, PMH, SFan, Shiki_Makiro, timeisart - Guests: 57 - Bots: 196
Users: 55,720 (2,334 active)
Latest user: taste1122

YI Hacking FAQ v1 (outdated)

Link Thread Closed
Originally posted by Yoshis Fan
Yeah, your way is a lot easier and faster.
BTW: Sewer levels aren't confusing. Am I the only one without Sewer-Phobia? XD
Did you fix the Sewer Part of The Ancient Piranhapolis already?

Yes, I already fixed the sewer sections of both 4-8 and 6-6. (Those levels are colored green in my topic, meaning I'm satisfied with the way they are now.) They weren't that difficult to fix (probably because SNN had to test them a lot in the first place).

(Actually, I find cross-sections the most confusing out of the various objects/tilesets, at least when they involve diagonals. That is, both grassland cross-sections like in YI 2-7, and castle cross-sections (and their corresponding platforms).)

–=–=–=–=–=–=–
Alyssa's Unlikely Trap (demo 3)
I included a message block in Extra 6, but when I change a pointer to make the block display the correct message, it also changes a pre-final-battle message (or Kamek's 6-4 message, depending on which pointer I change).

Does anyone know a way to make Kamek scenes and Extra levels use different message pointers?


–=–=–=–=–=–=–
Alyssa's Unlikely Trap (demo 3)
You can have a maximum of 1 message box in Extra 6!! Also, by using this method you can only have the message box at X2/Y2 in Extra 5!!
To do this, go to 0x65C72. There are two bytes [10 01] there. Change them to [E2 00]. Then, go to 0x11149F and change the [00 00] you find there to [79 38]. After that, go to 0x1114FB and change the pointer to whatever you want. Note, that you can only use the message box at X1/Y1 with this.

To generally move the pointers away from the ones of the Secret-levels you must change their relative pointers. They are stored from 0x65C5E to 0x65C75. They are two bytes per boss. Each of them is byte-swapped, so [10 01] must be read [01 10]. To calculate the Offset they point to, you must multiplicate it with 2, so in this case 220. Then, add it to 0x1112DB. So to relocate the pointers to the actual messages, you must relocate them to some free space. I'd recommend the end of the free space, which starts at 0x11554A. So somewhere at 0x120000. This works well for all bosses. But you have to be careful. This doesn't works for the Bowser Battle and the OH, MY!! of Kamek, because they don't have those relative pointers. In the Bowser Battle most of the messages don't have relative pointers, or I just don't know where they are. Maybe Mattrizzle could help?
NEW! SMW2 Yoshi's Island is done!
Last update: 2012-12-31
That's somewhat confusing...

From what I can tell, following your directions would make Kamek's 6-4 message use a pointer for Extra 5 instead of a pointer for Extra 6. Is that correct?

(Anyway, I'm only using message blocks in Extras 4 and 6, so that's not a problem.)

–=–=–=–=–=–=–
Alyssa's Unlikely Trap (demo 3)
Yes, that's correct!
I also find it kind of confusing, but to fully remove the speech-pointers from the message-box pointers, we would have to find the relative pointers to the OH, MY!! and the other 3 of Bowser's/Kamek's speeches. So currently it's possible to use all message box messages in all Extras except Extra 3 and Extra 6. In Extra 3 you can use 3 messages and in Extra 6 you can use 1 message.
NEW! SMW2 Yoshi's Island is done!
Last update: 2012-12-31
Originally posted by Yoshis Fan
Yes, that's correct!
I also find it kind of confusing, but to fully remove the speech-pointers from the message-box pointers, we would have to find the relative pointers to the OH, MY!! and the other 3 of Bowser's/Kamek's speeches. So currently it's possible to use all message box messages in all Extras except Extra 3 and Extra 6. In Extra 3 you can use 3 messages and in Extra 6 you can use 1 message.

I would guess that those pointers are part of the bosses' code, since they still display the same message regardless of which world you relocate the boss to. (The Kamek enlarging message in the Bowser battle appears to act the same way as the other Kamek enlarging messages, though.)

–=–=–=–=–=–=–
Alyssa's Unlikely Trap (demo 3)
Yes, they are!
See this post Mattrizzle made a long time ago. The boss battle-coding stuff is all at 0x65XXX and 0x66XXX.
NEW! SMW2 Yoshi's Island is done!
Last update: 2012-12-31
Originally posted by Yoshis Fan
Yes, they are!
See this post Mattrizzle made a long time ago. The boss battle-coding stuff is all at 0x65XXX and 0x66XXX.

That's just the usual boss relocation offsets that have been known for a while. It doesn't have anything about the "OH, MY!" message or the final boss messages.

(I wonder if looking at the GBA version would help at all? I've found that doing a Translhextion search for the much simpler GBA pointers can be pretty useful... And the data seems to be laid out in the same way-- Kamek message pointers are shared with the Extra levels. (Or maybe it was the secret levels-- I forgot.) I wonder whether SNES ASM and GBA ASM are at all similar?)


Regarding bosses, what I think would be most useful is the offsets of their HP values (for the ones that have HP, at least).
Hookbill's and Raphael's are known, but not Burt's, Froggy's, Bigger Boo's, Naval Piranha's, Sluggy's, Salvo's (meaning the number of smaller slimes), or either form of Baby Bowser's.

–=–=–=–=–=–=–
Alyssa's Unlikely Trap (demo 3)
Hm, it's way easier if all the GBA-pointers would be equal. To be honest: I don't know. With equal I mean, if all of them are the same format, meaning they point at a certain Offset. In the SNES version there are three different types of pointers as far as I know:
Relative pointers (mulitplicate with... and add to pointers)
Two-Byte pointers (For a small region of the ROM)
Three-Byte pointers (For any location of the ROM)

I don't believe that SNES ASM and GBA ASM are the same. Or at least a part of them aren't the same. The SNES game uses this Super FX2 chip, so everything, which is written in Super FX2 should differ from the GBA coding. The GBA hardware has integrated Sprite Rotation, that's why it doesn't need a Super FX2 chip and can be larger than 2MiB.
NEW! SMW2 Yoshi's Island is done!
Last update: 2012-12-31
Originally posted by Yoshis Fan
Hm, it's way easier if all the GBA-pointers would be equal. To be honest: I don't know. With equal I mean, if all of them are the same format, meaning they point at a certain Offset. In the SNES version there are three different types of pointers as far as I know:
Relative pointers (mulitplicate with... and add to pointers)
Two-Byte pointers (For a small region of the ROM)
Three-Byte pointers (For any location of the ROM)

I don't believe that SNES ASM and GBA ASM are the same. Or at least a part of them aren't the same. The SNES game uses this Super FX2 chip, so everything, which is written in Super FX2 should differ from the GBA coding. The GBA hardware has integrated Sprite Rotation, that's why it doesn't need a Super FX2 chip and can be larger than 2MiB.

About SNES ASM and GBA ASM, I was wondering if there's anything at all in common (basic commands maybe?), or if they're completely different.

As I've said in a different topic, the GBA pointers are always 4 bytes. The first 3 bytes are the offset in reverse byte order, and the last bytes is 08. (For example, 29 1F 1C 08 points to x1C1F29.)

I think finding offsets in the GBA version will be a lot easier. Especially if we can find the table of objects/sprites by number-- with pointers that obvious, it can't be that hard to find, right? (All we need is for an editor to be made so people would be able to effectively use those offsets...)

Which reminds me...

Whenever I restart A Timely Change (assuming there's still no GBA editor by that point), I'm thinking of making the levels using Eggvine, but porting each level to the GBA version.

Do you know if anything needs to be modified when porting levels in that direction, other than sprites being 3 or 4 bytes each?


Edit: Level 14...

–=–=–=–=–=–=–
Alyssa's Unlikely Trap (demo 3)
Yes, finding Offsets in the GBA-ROM IS a lot easier, but we can't "transfer" this knowledge to the SNES version as there are different pointers and Offsets.
If you really want to port your levels to the GBA-version I'd recommend you to expand the ROM to at least 6MiB. Then I'd insert the data in the new free space. Porting SNES levels to the GBA should be a lot more difficult than porting GBA levels to the SNES (except the technical modifications, which need to be made to make everything work on the SNES). Well, except adding a 00-byte after each Sprite, you must also be careful with other sprites. You know, a few Sprites aren't the same number in the GBA-version as in the SNES version. And there's another problem: When I ported the Secret to the SNES, there were a lot of weird sprites in the level, which weren't needed in the SNES. Those were the Sprites S1B9-S1CF. So if they should be needed in the GBA version to make the level work, then I wish you much look in placing them. Aside from that you must keep in mind to add the two bytes after each screen exit. The difficult thing is, that we can't directly see the levels in the editor, so if you need to add/remove/change something it must be done with hexing.
NEW! SMW2 Yoshi's Island is done!
Last update: 2012-12-31
Originally posted by Yoshis Fan
Yes, finding Offsets in the GBA-ROM IS a lot easier, but we can't "transfer" this knowledge to the SNES version as there are different pointers and Offsets.
If you really want to port your levels to the GBA-version I'd recommend you to expand the ROM to at least 6MiB. Then I'd insert the data in the new free space. Porting SNES levels to the GBA should be a lot more difficult than porting GBA levels to the SNES (except the technical modifications, which need to be made to make everything work on the SNES). Well, except adding a 00-byte after each Sprite, you must also be careful with other sprites. You know, a few Sprites aren't the same number in the GBA-version as in the SNES version. And there's another problem: When I ported the Secret to the SNES, there were a lot of weird sprites in the level, which weren't needed in the SNES. Those were the Sprites S1B9-S1CF. So if they should be needed in the GBA version to make the level work, then I wish you much look in placing them. Aside from that you must keep in mind to add the two bytes after each screen exit. The difficult thing is, that we can't directly see the levels in the editor, so if you need to add/remove/change something it must be done with hexing.

Some sprites aren't the same number? I sort of expected that. Which sprites have you found that aren't the same number?

As for the new sprites... Have you ever looked at any of the GBA levels that were also in the SNES version, to see if the new sprites are relevant to the old levels? (I haven't tried directly comparing the hex data yet, other than the headers.)

Also, do you know of a quick way to expand ROMs? It takes Translhextion quite a long time to add 00-bytes to the end of the ROM...

(Maybe this discussion should be in the SMA3 hacking topic instead...)

–=–=–=–=–=–=–
Alyssa's Unlikely Trap (demo 3)
Well, another thing:
Whenever Sprite Palette 02 is in use, the red coins will use the first five colors of it for their "collected"-animation. When I use another value than 02 they are normal. This is also the reason, why the coins look weird in Submarine-areas. The colors are 31 00 31, so they use a weird pinkish color. Is there a way to disable this feature/bug? It really annoys me, as I had to change the Sprite Palette 02 and now the coins look even weirder, because I had to use a green color... Please help!
NEW! SMW2 Yoshi's Island is done!
Last update: 2012-12-31
The colors you need to change in Sprite Palette 2 are at 1FA53A-1FA53F in the ROM. (I found that the 15-bit RGB values are actually 31 0 23, which may be why you couldn't find them)

In hex, you can simply change them from [1F 5C 1F 5C 1F 5C] to [0B 00 14 00 1F 00] and the red coin sprites should no longer be pink.
That's a misconception.
The thing is: I am using Sprite Palette 02 for green Icicles. So I've already modified those colors so they fit the green Icicles. The problem now is: The red coins become green either. And what I want to make is, that the red coins don't use Sprite Palette 02 if Sprite Palette 02 is in use for a level. They don't seem to use the colors of the Sprite Palette, if you use any other Sprite Palettes, as they are normal in Sprite Set 00, when the Icicles are blue. But the problem is, that they use the same colors as the Icicles do.
And I want, that they don't use the Sprite Palette at all. (This feature also applies to the GBA-version, by the way. In Secret 3 in the first area the coins are pinkish, but in the second area, which also uses the Submarine-Tileset they are normal)
That is why I can't use your method to correct this, because the icicles would be red then, too.

(Also, I've already found the locations of the Layer 1, Layer 2, Layer 3 and Sprite Palettes in the ROM. In My Files they are named "Layer 1 Palettes.txt"; "Layer 2 Palettes.txt"; "Layer 3 Palettes.txt" and "Sprite Palette.txt")
NEW! SMW2 Yoshi's Island is done!
Last update: 2012-12-31
Well, in that case, you can make changes to the following addresses:
66B71 [D0] Change to 80 to keep the yellow coin sprites from using palette line F when Sprite Palette 2 is used

66C1B [D0] Change to 80 to keep the red coin sprites from using palette lines E and F when Sprite Palette 2 is used

There is one side effect of this, though:

Coins will no longer be darkened by the the water in submarine areas. This is because only the bottom four sprite palettes are affected by color math.
Wow, thanks a lot for finding this! Now I can fix the coins.
NEW! SMW2 Yoshi's Island is done!
Last update: 2012-12-31
Any idea why this multi-colored block is appearing here? It does not appear in Eggvine. (I tried deleting all nearby objects/sprites (without saving)-- it's not hidden behind anything.)





–=–=–=–=–=–=–
Alyssa's Unlikely Trap (demo 3)
I know, why.
The end 1x1 tile of the wooden castle has two nails in it, as you can see on your picture. But the problem now is, that ther's no "near-lava"-tile for a 1x1 block. So deleting the 48 directly below the lava, adding a new 48 and strecthing it so, that it also fully covers the two 48s right and left to the 48 you just deleted should fix that.

*EDIT*
Also, just out of curiosity, is there a difference between version 1.0 and 1.1 of Yoshi's Island? Well, I've seen many differences in the Hex-code (I have a Hex-Compare-program), but the actual game is the same to me. The graphics section has no differences (the section above 0x120000). One difference I've found is, that they don't use 16 FFs in a line to mark free space; instead they use 3 FEs and 1 FF, and that 4 times a line to mark it. There are also many changes to single Offsets and also many changes to very big areas. But ingame I can't see any difference to 1.0. I guess, if there really are changes, then they are only optimizations, for the music or the cinema scenes.
NEW! SMW2 Yoshi's Island is done!
Last update: 2012-12-31
If my memory serves me right, the font is different between the two. One also has the language selection mode at the beginning.

As for major changes? None, I don't think.
Link Thread Closed