Register | Login
Views: 19364387
Main | Memberlist | Active users | ACS | Commons | Calendar | Online users
Ranks | FAQ | Color Chart | Photo album | IRC Chat
11-02-05 12:59 PM
1 user currently in Super Mario World hacking: labmaster | 3 guests
Acmlm's Board - I2 Archive - Super Mario World hacking - Editing Sprites in ASM... | |
Add to favorites | "RSS" Feed | Next newer thread | Next older thread
User Post
Cruel Justice

XD
Level: 55

Posts: 314/1384
EXP: 1253266
For next: 60923

Since: 03-20-04
From: Darkwoods Penetentiary

Since last post: 11 hours
Last activity: 7 hours
Posted on 09-23-04 08:07 AM Link | Quote
I am tired of asking questions that always have the same answer, "Use ASM... blah blah blah..." I said what the hell... figured I should take a shot at it at least once.
I've noticed many people using ASM. I understand that you change codes around, that's simple. Which codes do I change and how the blazes do I find them?
I'm stumped and in need of some assistance.

Also, how exactly are these codes executed? Automatically, through a program, or more code?


(edited by The_Raven on 09-22-04 11:09 PM)
knuck

Hinox
Banned until 19-58-5815: trolling, flaming, spamming, being a general fucktard...
Level: 62

Posts: 757/1818
EXP: 1894574
For next: 90112

Since: 03-15-04

Since last post: 14 hours
Last activity: 9 hours
Posted on 09-23-04 09:45 AM Link | Quote
Good, you said that you were going to learn ASM.
Now go to ZD and download some asm tutorials instead of asking the same thing that everyone else do.
Kario

In Possession of a Stolen Shovel

Level: 65

Posts: 759/2082
EXP: 2321379
For next: 14249

Since: 03-15-04
From: Texas... Yeehaw!

Since last post: 2 days
Last activity: 17 hours
Posted on 09-23-04 10:17 AM Link | Quote
Originally posted by knuck
Good, you said that you were going to learn ASM.
Now go to ZD and download some asm tutorials instead of asking the same thing that everyone else do.


Ditto, but less mean sounding.
MathOnNapkins

Math n' Hacks
Level: 67

Posts: 539/2189
EXP: 2495887
For next: 96985

Since: 03-18-04
From: Base Tourian

Since last post: 1 hour
Last activity: 32 min.
Posted on 09-23-04 02:20 PM Link | Quote
If you want to change sprite behavior, sometime's it's enormously complicated, and sometime's it's very simple. If you want to get a feel for the basics before jumping into ASM try toying around with a cheat finder in your favorite emu. Try to determine some basic variables for the sprite you're researching.
cpubasic13
17 years old now. Time to buy some M rated games by myself!
Level: 54

Posts: 578/1346
EXP: 1206934
For next: 26936

Since: 03-15-04
From: Blame my parents, Eddy

Since last post: 2 days
Last activity: 1 day
Posted on 09-26-04 02:33 AM Link | Quote
Originally posted by MathOnNapkins
If you want to change sprite behavior, sometime's it's enormously complicated, and sometime's it's very simple.


Have to agree with you there. Sometimes making a sprite is simple, but then when you want it to do something specific and setting where the graphics go, it gets complicated. Unless you have the proper notes...

I will just post the data that mikejk released on sprites (comes in handy). You may be confused at first but it is rather easy... just long...

NOTE: REALLY LONG POST!!!

0x03F46C -> 7E1656
0x03F535 -> 7E1662
0x03F5FE -> 7E166E
0x03F6C7 -> 7E167A
0x03F790 -> 7E1686
0x03F859 -> 7E190F

All of these tables are indexed by sprite number (starting with x00 for the shelless green koopa). Here's a few of my notes about some table values. I've still barely touched the surface of all this data. I have the RAM locations as the headers, cuz that's what I see in my trace logs.

7E1656
setting both bits 5 and 6 makes an enemy stompable
setting bit 8 changes the cape/star kill style

7E166E
setting bit 1 changes the gfx page
bits 2-4 tell which palette (8-F) the sprite uses
setting bit 5 disables fireball killing of the enemy
setting bit 6 disables cape killing of the enemy

7E1686
if bit 8 is set the sprite passes through floor
bit 7 is set if the enemy is sprite creating (which is created is in a different table)

7E1662
I've noticed that changing data here changes the area for sprite interaction. For example, you've probably seen in hacks where rexes have been changed into goombas, you can still get killed by an invisible rex head. Fixing this is as simple as changing rex's table value 0x03F5E0 (0x03F535 + AB) to x00.

Keep in mind that not all sprites use the data loaded from these tables. Some get new data from their own tables found in sprite specific routines.

For my demo, I just changed entry 12 to match entry 00 for all six tables. I then needed to make sprite 12 use the code for shelless koopas, so doing some tracing I found another very important table at ROM address 0x0087CC. This table holds the memory locations (2 bytes for each sprite) to go to for the handling of each sprite. Sprite 12 intially jumped to a RTS command (made sense since it's listed as a null sprite), changing it to use the shelless koopa's code finally gave me some results I could see. I had a sprite that acted like a koopa, but the graphics it used was off. 7E1602 holds the animation frame, but I needed to change the tiles that the frames used... more tracing, more tables.

0x009E7F is the begining of an offset table that is indexed by sprite number. 0x009D83 is the start of a gfx tile table that is indexed by a value in the offset table. For example the entry for a green shelless in the offset table is x09, so the gfx tiles for the shelless start at 0x9D8C (0x009D83 + x09). Again not all of the enemies are stored here. I started to document which were but lost interest. I'll include what I did find though:

(0)
82 A0 - koopa Walk 1
82 A2 - koopa walk 2
84 A4 - koopa turning
8C - koopa shell
8A - koopa shell ani 1
8E - koopa shell ani 2

(9)
C8 - shelless walk 1
CA - shelless walk 2
CA - shelless turn
CE - unused?
CC - shelless fliping shell
86 - struggling shelless 1
4E - struggling shelless 2

(10)
E0 - blue shelless walk 1
E2 - blue shelless walk 2
E2 - blue shelless turning
CE - unused?
E4 - blue shelless kicking
E0 - blue shelless struggling 1
E0 - blue shelless struggling 2

(17) para-goomba
a3 - straight goomba 8x8 tile 1
a3 - straight goomba 8x8 tile 2 (mirrored)
b3 - straight goomba 8x8 tile 3
b3 - straight goomba 8x8 tile 4 (mirrored)
e9 - tilted left goomba 8x8 tile 1 (mirrored)
e8 - tilted left goomba 8x8 tile 2 (mirrored)
f9 - tilted left goomba 8x8 tile 3 (mirrored)
f8 - tilted left goomba 8x8 tile 4 (mirrored)
e8 - tilted right goomba 8x8 tile 1
e9 - tilted right goomba 8x8 tile 2
f8 - tilted right goomba 8x8 tile 3
f9 - tilted right goomba 8x8 tile 4
e2 - straight parachute
e6 - tilted parachute

(25)
AA - goomba walk/struggling 1
A8 - goomba walk/struggling 2
A8 - goomba turning
AA - unused??

(29) para-bomb
A2 - straight
A2 - straight
B2 - straight
B2 - straight
C3 - tilted left
C2 - tilted left
D3 - tilted left
D2 - tilted left
C2 - tilted right
C3 - tilted right
D2 - tilted right
D3 - tilted right
e2 - straight parachute
e6 - tilted parachute

(37)
CA - bob-omb walking 1
CC - bob-omb walking 2
CA - bob-omb turning

(3A)
AC piranha plant closed mouth
CE classic/upside down stem frame 1
AE piranha plant open mouth
CE classic/upside down stem frame 2
83 displays behind left of jumping piranha frame 1 ???
83 displays behind right of jumping piranha frame 1 ???
C4 jumping stem 8x8 tile 1 frame 1
C4 jumping stem 8x8 tile 2 frame 1
83 displays behind left of jumping piranha frame 2 ???
83 displays behind right of jumping piranha frame 2 ???
C5 jumping stem 8x8 tile 1 frame 2
C5 jumping stem 8x8 tile 2 frame 2

(46)
8A - football

(47)
A6 - bullet bill

A4 - ???
A6 - ???
A8 - ???

(4B)
80 - spiny walking 1
82 - spiny walking 2
80 - spiny turning

(4E)
84 - spiny egg 8x8 tile 1 frame 1
84 - spiny egg 8x8 tile 2 frame 1
84 - spiny egg 8x8 tile 3 frame 1
84 - spiny egg 8x8 tile 4 frame 1
94 - spiny egg 8x8 tile 1 frame 2
94 - spiny egg 8x8 tile 2 frame 2
94 - spiny egg 8x8 tile 3 frame 2
94 - spiny egg 8x8 tile 4 frame 2

For my demo, I gave sprite 12 the same offset as the SMW goomba, and that's precisely what appears. The more I look through the ROM, the more tables I see, so hopefully this will spark some interest in documenting them.


Hope this helps somewhat... just be patient and experiment... mainly with sprite 12, since it is the first null sprite.
Add to favorites | "RSS" Feed | Next newer thread | Next older thread
Acmlm's Board - I2 Archive - Super Mario World hacking - Editing Sprites in ASM... | |


ABII


AcmlmBoard vl.ol (11-01-05)
© 2000-2005 Acmlm, Emuz, et al



Page rendered in 0.019 seconds.