Language…
19 users online:  Alex, DanMario24YT, Dennsen86, derv82, Domokun007, drkrdnk, Fozymandias, GRIMMKIN, h.carrell, iRhyiku, Maw, Metal-Yoshi94, Nayfal, prisvag, Red2010, Silver_Revolver, sinseiga, steelsburg, yno14jax - Guests: 294 - Bots: 378
Users: 64,795 (2,374 active)
Latest user: mathew

Super Mario Advance 3 hacking

Ok, I'm looking into some GBA ASM stuff, I found Bowser's health



GBA Bowsers Health

Small
RAM 0x030035F8

Big
RAM 0x0300360C


Number of hits untransformed bowser takes

(Number of hits - 1)
ROM 0x001066F8 - THUMB
Code
	02 28	CMP	R0, 0x02


Sound effect (Number of hits - 2)
ROM 0x001061E8 - THUMB
Code
	01 28	CMP	R0,0x01



Transformed Bowser

(Number of hits required to stop him from bouncing backwards)
ROM 0x001067C6 - THUMB
Code
	07 29	CMP	R1,0x07


(Number of hits required to explode)
ROM 0x00106868 - THUMB
Code
	07 29	CMP	R1,0x07




Raphael The Raven

Health
RAM 0x03003492

Initial Health
ROM 0x000D18DA
Code
	07 20	MOV	R0,0x07


Decrease Health
ROM 0x000D2B60
Code
	40 08	LSR	R0,R0,0x01		//Change to SUB	R0,R0,0x01 (40 1E) for more than 8 hits


Checks if health is at initial value
ROM 0x000D293A
Code
	07 28	CMP	R0,0x07


What Value the boss dies at
ROM 0x000D2AC4
Code
	00 28	CMP	R0,0x00


Palette Table - 15 Colors per index (starts after 1st hit)
ROM 0x002D1A3A


@Yoshis Fan
The editor will allow you to import/export the 3D objects and ground maps between ROMS and the two consoles, since the formats are the same.
Also I guess a feature could be added that transfers the SNES palettes over to the GBA.
Working on Super Mario World 2 - Yoshis Island Boss Rush
Other projects on hold.
Palette im/exporting is a really good idea, too. IIRC most of the GBA version's palettes were a little more pale than the SNES version's ones.
Also, did Nintendo re-code the bosses from scratch or did they port them 1:1? I guess, they at least modified them, because the GBA does not need SuperFX anymore, so they had to use the a different coding for rotating sprites and such, no? What about all the Mode 7 stuff, by the way? Does Mode 7 still exist on the GBA?
Here is Hookbill's health

Increase Hookbill's damage by 2
ROM 0x000CEE26
Code
	02 30	ADD	R0,0x02


Check if Hookbill's is at max damage
ROM 0x000CEE2E
Code
	06 28	CMP	R0,0x06



Here is Naval Piranha Health
RAM 0x0202B376

Initial health
ROM 0x000C63D2
Code
	MOV	R0,0x03


Decrease Health
ROM 0x000C6C72
Code
	SUB	R0,0x01


Check if 0
ROM 0x000C6C78
Code
	CMP	R0,0x00



Most of the palettes are different, other than the YI title screen.

I'm sure Nintendo copied and pasted allot of the "C" code from one compiler to another, cause looking at the ARM disassembly, its the exact same thing as the SNES code, Raphael The Raven's HP is still bit shifted, Hookbill's damage still increases by 2, but some code is different.

The rotating and scaling are done by the 2D hardware now -sprites included, there is no shading, The 3D title screen uses the "Mode 7 effect"(perspective change by scanline, on the GBA I think its Mode 1-2) for the ground / water.
Working on Super Mario World 2 - Yoshis Island Boss Rush
Other projects on hold.
This is a little off-topic, but it's something I've always wondered: The GBA didn't have an offset-per-tile mode like the SNES, right? In that case, how did they pull off the dizziness effect (along with the moving rock platforms, wavy lava, and Baby Bowser's first fight)?
I should get a new layout.

Probably won't, though.
This answer might be a bit untechnically, but you can clearly see, that the dizziness effect, the shifting castle platforms and the stomp waves have a way lower quality in the GBA version than in the SNES. Maybe they programmed them so, that they always shift 1 tile instead of one pixel per frame or so. Other layer-related differences are, for example, that Layer 2 is not affected by the Dizziness effect, and that Yoshi never disappears behind Layer 2 objects, when he enters a pipe (which is quite an improvement). Also, in version 1.0 of the game for SNES, some Layer 2 tiles might disappear immediately after you touch a fuzzy and will reappear shortly after they disappeared. That thing is fixed in version 1.1 of the SNES game. The thing, that Yoshi disappears behind Layer 2, when he enters a pipe in levels with certain level modes, however, is still not fixed in 1.1. As said, it's fixed in the GBA version.

*Edit*
Oh, sorry, no the Layer 2 thing is not fixed in 1.1. Then... it must have been the GBA version? Sorry.
The FX-Chip did the vertical shifting on the SNES.

The GBA used two BG layers to do this, and cut out parts of them.



Other places like with the lava/rocks the tiles shift up/down one unit or 8 pixels, not very smooth at all.
Working on Super Mario World 2 - Yoshis Island Boss Rush
Other projects on hold.
I see. A nice workaround concept, but the solution for the SNES with the SuperFX is better. Also, why would Yoshi disappear behind Layer 2 objects, when entering a pipe in levels with a certain level mode on the SNES, but not on the GBA? Is it necessary in order for certain level modes to work or is it a bug? But how could it be fixed in the GBA version, then?
More GBA boss health offsets

Tap-Tap The Red Nose & Tap-Tap The Golden

Events
RAM 0x0202B353

Speed Value -Turn?
ROM 0x000D4F92 [10]

What a Tap Tap Does when tries to jump
ROM 0x000D4F66 [07]

What a Tap Tap Does when falling
ROM 0x000D4460 [0B]

What a Tap Tap Does when lands after jumping
ROM 0x000D4F8C [06]

What a Tap Tap Does when hit by egg
ROM 0x000D449A [0A]

What a Tap Tap Does when falls after hit by egg
ROM 0x000D501E [0C]

Action list
0x00 Slides
0x01 Glitched spin, may not more after
0x02 spin fast
0x03 Slides
0x04 Nothing / Stops if in air
0x05 Nothing / Stops if in air
0x06 Nothing / Stops if in air
0x07 Jumps
0x08 Small forward motions
0x09 Small forward motions
0x0A Roll back, normal effect
0x0B Fall down
0x0C Fall down
0x0D Loose balance, stands on one toe and then recovers
0x0E Used when burning in lava
0x0F Fall down, slow spin
0x10 Stop and drift, used when sinking in lava
0x11 Used after explodes and rings of light appear

Jump Table -Move 0xFF back to jump quicker
ROM 0x0017CA4E
[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F
FF]

Turn Table
ROM 0x0017CA9D -Move 0xFF back to turn quicker
[0F 0F 0F 0F 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 FF]



Sluggy's Health

RAM 0300308A Health

Increase Sluggy's damage
ROM 0x000D0CF4
Code
	01 30	ADD	R0,0x01


Check Max
ROM 0x000D0CFC
Code
	03 28	CMP	R0,0x03


TABLES:

ROM 0x0017C5E4 - Heart speed
[06 0A 0E 12]

ROM 0x0017C5E8 - Time heart stays big
[00 02 C0 01 80 01 40 01]

ROM 0x0017C5F0 - Size scale
[C0 D0 E0 F0]

ROM 0x0017C5F4 - Value at which to reverse size scaling (from shrinking to growing)
[60 68 70 78]

ROM 0x0017C5F8 - Size scale
[40 30 20 10]

ROM 0x0017C5DA - Push rate / move forward frequency
[80 64 48 2C]

ROM 0x0017C5C0 - Softness table
[60 FF 5C FF 58 FF 54 FF]



Prince Froggy's health

Health -16 Bit
RAM 0x030034AA

Acid Rate -16 Bit
RAM 0x03003476

ShyGuy Rate -16 Bit
RAM 0x03003478

Uvula Swing -16 Bit
RAM 0x030034A2

Stomach X-pos -16 Bit
RAM 0x03003431

Stomach Y-pos -16 Bit
RAM 0x03003435


Decrease health
ROM 0x000C5EAC
Code
	 	LDR	R2,[R3]
		LDR	R0,0X9FF
		CMP	R4,R0
		BHI	0X080C5EB8
		MOV	R4,0XA0
		LSL	R4,R4,0X04
		LSL	R0,R4,0X01
		ADD	R0,R2,R0
		STRH	R0,[R3]
		LSL	R0,R0,0X10
		LSR	R0,R0,0X10
		CMP	R2,R0
		BCC	0X080C5EF8


Initial Acid Rate
ROM 0x000C5686
Code
	80 21	MOV	R1,0X80


Acid rate
ROM 0x000C5B28
Code
	79 20	MOV	R0,0X79


Change ROM 0x000C5B0E from 0x1B to 0x00 for acid to fall in the center

Initial ShyGuy Rate, VALUE = (RATE / 2)
ROM 0x000C567C
Code
	C0 20	MOV	R0,0XC0


ShyGuy rate
ROM 0x000C5BBE
Code
	80 20	MOV	R0,0X80


To modify the number of hits Prince Froggy can take,
first change ROM 0x000C5EB2 = [00 00]

The number of hits = (2048 / NumberOfHits)
If your number is > 0x100 then you will need to divide your number by 16, and drop remainder
You can only use numbers 0x00-0xFF
So to specify a higher number you need to rotate the bits once more,
to do this change ROM 0x000C5EB7 from 0x01 to 0x02, this only applies if number is > 0x100
ROM 0x000C5EB4 = Value

102 = 0x066 = 20
107 = 0x06B = 19
113 = 0x071 = 18
120 = 0x078 = 17
128 = 0x080 = 16
136 = 0x088 = 15
146 = 0x092 = 14
157 = 0x09D = 13
160 = 0x0A0 = 12
186 = 0x0BA = 11
192 = 0x0C0 = 10
227 = 0x0E3 = 9
256 = 0x100 = 8
292 = 0x124 = 7
341 = 0x155 = 6
409 = 0x199 = 5
512 = 0x200 = 4
768 = 0x300 = 3
1024 = 0x400 = 2
2048 = 0x800 = 1



Salvo

Health
RAM 0x0202B36C

Initial Size
ROM 0x000BCB4A

Final Initial Size Pointer
ROM 0x000BDD96

Final Initial Size -16 Bit
ROM 0x000BDDA4 [FF FF]

Damage pointer
ROM 0x000BD6B4

Does this much damage when hit
ROM 0x000BD6F0 [00 FD]

Salvo dies if health is lower than this value * 0x10
ROM 0x000BD832




Bigger Boo

Health
RAM 0x030031B0
Size
RAM 0x030031E6

ROM 0x0005105A
Code
	ADD	R1,0x10


Inc Health
ROM 0x000C3B5C
Code
	ADD	R1,0x18

ROM 0x000C3B60
Code
	ADD	R0,0x48


Inc Size -Change to 0x01 to make editing health a lot easier
ROM 0x000C375A
Code
	ADD	R0,0x08





Burt

Health
RAM 03003076

Health
RAM 03006FC8

Initial Health
ROM 0x000C1202
Code
	MOV	R0,0x0A


Decrease Health
ROM 0x000C2180
Code
	SUB	R0,0x02


Burt Tables -Will need to extend and relocate these to increase health

Fall Table
ROM 0x00179B20
[E0 00 D0 00 C0 00 C0 00 C0 00 C0 00]

Jump Table
ROM 0x00179B2C
[00 FA 40 FA 80 FA C0 FA 00 FB 40 FB]

Jump Table 2
ROM 0x00179B38
[00 F6 80 F6 00 F7 80 F7 00 F8 80 F8]





GBA Yoshi positions and others



World Map Cords

Luigi's X axis
ROM 0x00004972
Code
	MOV	R0,0xC0

Luigi's Y axis
ROM 0x0000497A
Code
	MOV	R0,0x10



W1 Sign/Yoshi X Axis
ROM 0x00164690
W1 Sign/Yoshi Y Axis
ROM 0x00164691

W2 Sign/Yoshi X Axis
ROM 0x00164692
W2 Sign/Yoshi Y Axis
ROM 0x00164693

W3 Sign/Yoshi X Axis
ROM 0x00164694
W3 Sign/Yoshi Y Axis
ROM 0x00164695

W4 Sign/Yoshi X Axis
ROM 0x00164696
W4 Sign/Yoshi Y Axis
ROM 0x00164697

W5 Sign/Yoshi X Axis
ROM 0x00164698
W5 Sign/Yoshi Y Axis
ROM 0x00164699

W6 Sign/Yoshi X Axis
ROM 0x0016469A
W6 Sign/Yoshi Y Axis
ROM 0x0016469B


YI Top center sprite

Left part
X axis
ROM 0x00004A9E
Code
	MOV	R1,0x46

Y axis
ROM 0x00004AA4
Code
	MOV	R0,0x10


Right part
X axis
ROM 0x00004B18
Code
	MOV	R0,0x86

Y axis
ROM 0x00004B1E
Code
	MOV	R2,0x10





Level Map Cords, all 6 worlds use the same cords

Cords with out Mario

Level 1 X axis
ROM 0x00164D18
Level 1 Y axis
ROM 0x00164D1A

Level 2 X axis
ROM 0x00164D1C
Level 2 Y axis
ROM 0x00164D1E

Level 3 X axis
ROM 0x00164D20
Level 3 Y axis
ROM 0x00164D22

Level 4 X axis
ROM 0x00164D24
Level 4 Y axis
ROM 0x00164D26

Level 5 X axis
ROM 0x00164D28
Level 5 Y axis
ROM 0x00164D2A

Level 6 X axis
ROM 0x00164D2C
Level 6 Y axis
ROM 0x00164D2E

Level 7 X axis
ROM 0x00164D30
Level 7 Y axis
ROM 0x00164D32

Level 8 X axis
ROM 0x00164D34
Level 8 Y axis
ROM 0x00164D36



Cords with Mario

Level 1 X axis
ROM 0x00164CA0

Level 2 X axis
ROM 0x00164CA8

Level 3 X axis
ROM 0x00164CB0

Level 4 X axis
ROM 0x00164CB8

Level 5 X axis
ROM 0x00164CC0

Level 6 X axis
ROM 0x00164CC8

Level 7 X axis
ROM 0x00164CD0

Level 8 X axis
ROM 0x00164CD8

Secret X axis
ROM 0x00164CE0

Extra X axis
ROM 0x00164CE8

The Y axis is shared
ROM 0x00008360
Code
	MOV	R5,0x80


The health for all the bosses have now been found.

Now all Yoshi map positions are known for SNES and GBA.

I will include a feature in my editor or another program that will allow you all to edit the bosses health.
Working on Super Mario World 2 - Yoshis Island Boss Rush
Other projects on hold.
This is interesting... maybe A Timely Change as a SMA3 hack will be more feasible than I'd thought.

Some random questions I have...

- Do the boss palettes function correctly when relocated to a different world on the GBA version, or are there still world-specific tables that need to be modified?

- How could I edit the LZ77 graphics? Would I need a separate program to decompress/recompress them?

- Are you planning to also show how to repoint the Burt/Sluggy tables?

Originally posted by tehaxor69
Level icons, Nintendo also included the icons that required extra processing from the SNES FX-Chip
Also, I'm wondering-- what does this mean?

–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3
I have not tried moving the bosses to other worlds yet, and I wonder if Kamek would be affected.

The LZ77 graphics can be decompressed using this tool GBADecmp,
but I plan on making my editor compress/recompress and move data as needed, and the same thing for relocating Burt's/Sluggy's tables.

Here are the pointers

Burt

Fall Table
POOL OFFSET
0x080C1CE0 [08 4A]
POINTER
0x080C1D04 [20 9B 17 08]

Jump Table
POOL OFFSET
0x080C1C68 [16 4A]
POINTER
0x080C1CC4 [2C 9B 17 08]


Sluggy

Heart speed
POOL OFFSET
0x080D0D92 [1F 48]
POINTER
0x080D0E10 [E4 C5 17 08]

Time heart stays big
POOL OFFSET
0x080D0DB4 [18 49]
POINTER
0x080D0E18 [E8 C5 17 08]

Size scale
POOL OFFSET
0x080D0DC0 [16 48]
POINTER
0x080D0E1C [F0 C5 17 08]

Value at which to reverse size scaling (from shrinking to growing)
POOL OFFSET
0x080D0DCC [14 48]
POINTER
0x080D0E20 [F4 C5 17 08]

Size scale
POOL OFFSET
0x080D0DDC [11 48]
POINTER
0x080D0E24 [F8 C5 17 08]

Push rate / move forward frequency
POOL OFFSET
0x080D0B04 [08 49]
POINTER
0x080D0B28 [DA C5 17 08]

Softness table
POOL OFFSET
0x080D060E [55 48]
POINTER
0x080D0764 [C0 C5 17 08]


As for the GFX it matched one of the 3 step process the SNES used for decompression.
Its used for the rotating OAMs on the map.
Working on Super Mario World 2 - Yoshis Island Boss Rush
Other projects on hold.
Originally posted by Yoshis Fan
Cool, GBA YI support is definitely a good idea, too. Is there a certain scheme, so a custom GBA or custom SNES map/title screen can be ported to the other console? Maybe you could join adolif2's project of making a SNES -> GBA level converter. So in the end it becomes a ROM converter, so it can port other things, too and not only levels, but settings and ASMs, too.


Actually, I am planning to add a TON of new features to the converter.

However, I need to fix many bugs (conversion bugs, not bugs in the converter itself) before I can move on to anything else.

Some sprites (in specific rooms) still convert to having garbled graphics and/or bad palettes.

As for asm conversions and stuff like that, I'm working on an "Ado-Assembler" (yes, I like using "Ado" in my program names).

The Ado-Assembler will be an expandable feature in the converter (through the use of text scripts or dlls, I haven't decided yet) that will dump well-documented snes code into a file and recode it into a custom binary format. The custom binary format will function as pseudo code, and will be re-coded into the GBA format upon injection.

If the Ado-Assembler ever becomes a reality, I'll make sure that it works for other things too, such as re-coding tables, sprite sets, palettes, etc etc.

Long live portable Yoshi's Island!!!
@adolif2:
Nice!
Palette- and Sprite Set porting should be the easiest things to do. To my knowledge, the color format for GBA is the same as for SNES (15bit, that is). The Sprite Sets also have the same indexes for a set of graphics like in the SNES. By doing a Hex-Search it could be found easily. The thing with Sprite Sets, however, is, that the SNES only supports 128 different Sprite Sets, while the GBA virtually supports 256 (but only indexes from 0 to 149 are actually used, the following data seems to be some pointers, editing them would not be a good idea.) The Sprite Set data starts from 0x166044 and goes up to 0x1663C7 (at 0x1663C7 Sprite Set 149 ends) Changing the pointer at 0x137A4, however, will make you able to relocate the whole table to some free space (if there is any in the ROM. If not, easily expand it up to 6 or 8 MiB). By doing this, and relocating it so, you can have 256 Sprite Sets altogether, you will have more Sprite Sets than levels (which go from 00 to F5, those are 246 levels), meaning each level can have a custom Sprite Set. But I'm digressing. Since the SNES game only supports 128 Sprite Sets, 256 Sprite-Set support can't be integrated in the converter. Another thing is, that the SNES game can only use levels 00 to DD for levels (higher numbers will work, but can only be reached with a level Entrance, not with a screen exit nor a middle ring.) There also is a conflict with the Bandit-Minigames, then. We would have to make, that the Bandit-Minigames are the same indexes like in the GBA version in order to free some level indexes for Secret-levels (which are definitely needed for the GBA game. I'm really thrifty, thus I can add 6 levels to my game, but others might be not).
Originally posted by Yoshis Fan
The thing with Sprite Sets, however, is, that the SNES only supports 128 different Sprite Sets, while the GBA virtually supports 256 (but only indexes from 0 to 149 are actually used, the following data seems to be some pointers, editing them would not be a good idea.) The Sprite Set data starts from 0x166044 and goes up to 0x1663C7 (at 0x1663C7 Sprite Set 149 ends) Changing the pointer at 0x137A4, however, will make you able to relocate the whole table to some free space (if there is any in the ROM. If not, easily expand it up to 6 or 8 MiB). By doing this, and relocating it so, you can have 256 Sprite Sets altogether, you will have more Sprite Sets than levels (which go from 00 to F5, those are 246 levels), meaning each level can have a custom Sprite Set.

This sounds like something that could be implemented in a future SMA3 level editor...

That is, the editor would relocate the table, and assign each level the sprite set matching its level number. Then, instead of choosing which sprite set each level uses, the editor would allow you to directly edit the sprite set corresponding to that level (or choose one of the original sprite sets to be copied into the new table).

–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3
@Yoshis Fan

I did something similar to what you were talking about with the palettes, but some GFX have been modified so they wont always match the SNES palettes,
the coins would have a annoying cyan color that stands out, the clouds have a bright outline, and the butterflys are too bright, but its not hard to work around.


I have a IPS where most of the first level and levels with the same settings will now use the SNES palettes, with some palette tweaks.

SNES->GBA palettes ips 1.0

Edit:
Oh, and all the in-level Yoshi colors have been upgraded.
Working on Super Mario World 2 - Yoshis Island Boss Rush
Other projects on hold.
@tehaxor69:
Nice! Are the GBA palettes working different from the SNES ones? The Layer 1 palettes had 42 colors in SNES, the Layer 2 ones 30 (IIRC) and the Layer 3 palettes had 15 colors. So are tweaks really needed? In the SNES, at least, you only have to replace some colors, nothing else. Or is the alignment of colors in each palette different in GBA? At least, the biggest difference between the palettes becomes obvious when using your patch: All the colors are somewhat paled compared to the SNES version.

(And another thing: The butterfly of the Layer 3 object in the Welcome-level and 1-1... Are the colors still depending on the Layer 1 palette? Also, is there a way to make it dependant of some certain Layer 3 colors in the SNES version?)
There are only a few pixels that differ in some tiles, the alignment is fine, but yes some tweaks are needed. Not sure about the butterflys, all I know is that they use palette index 0.

Here is another SNES->GBA IPS 1.1, the flower theme levels are complete, and the title screens, except the very first are updated.
Working on Super Mario World 2 - Yoshis Island Boss Rush
Other projects on hold.
That's a good progress! But I have a question: When the tweaks are done, can palette editing be done by simply pasting the colors from SNES to GBA? If not, it might be a little difficult to implement the palette porting-feature, since some people might create custom palettes for their hacks.
If you edit the GFX to use the better palettes, you could copy and paste, other wise you would have to change a few colors every time for the colors to look right on the GBA. The palette locations are a mess on the SNES on the GBA you can find 256 colors in a row in the ROM.

In the 1.1 patch the new title screens required manual editing cause there is no SNES equivalent.

OLD


NEW

Working on Super Mario World 2 - Yoshis Island Boss Rush
Other projects on hold.
Ugh...problems like this keep occurring with converted roms...

It's Golden Yoshi's SMW 2+, no? Well, that's not too good, since SMW 2+ is the most unedited Yoshi's Island hack (I mean aside from levels, the ROM is hardly edited). And if there are problems like this, you converter might require more updates. But you could test this: The wrong-looking Little Mouser sprite uses a Sprite Palette, that comes along with the header information of the level itself. In the SNES Sprite Palette #3 is the correct index for the Little Mouser. It could be that thing is a simple conversion bug. Maybe it's using a different palette index on the GBA or the converter does not port the level header in a proper way.

@tehaxor69:
Nice title screen eidt, but I must say, I personally prefer the old one. Also, I did never notice the 1983-2002 before, that means, yes, but 1983? The first Yoshi's Island has appeared in 1995.