Register - Login
Views: 99379320
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - Stats - Latest Posts - Color Chart - Smilies
04-23-22 10:52:03 PM
Jul - SM64 Hacking (Archive) - Hacking animations New poll - New thread - New reply
Pages: 1 2 Next newer thread | Next older thread
Rena
I had one (1) message in Discord deleted and proceeded to make a huge, huge mess about how it was a violation of free speech and how moderators are supposed to be spam janitors and nobody should have the right to tell me not to talk about school shootings
Level: 135


Posts: 2135/5390
EXP: 29050389
For next: 284616

Since: 07-22-07

Pronouns: he/him/whatever
From: RSP Segment 6

Since last post: 333 days
Last activity: 333 days

Posted on 01-12-08 05:49:39 AM Link | Quote
Jul - Post #2135 - 01-12-08 12:49:39am
It's not unusual for two different codes to have the same effect.

____________________
yoshiman
Member
Level: 23


Posts: 30/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 01-17-08 10:31:47 PM Link | Quote
As can be seen from my video on YouTube 'Playing as Princess Peach in Super Mario 64' you can force the game to use Peach's graphics and animation. But as to be expected Peach only has one animation and is sometimes glitchy.

I think it will be better to alter Peach's graphics so that it's compatible with Mario's animation.

And I must add although it looks like Peach is skating across the ground you have to remember that she has no legs; a work around would be to rotate Peach's dress slightly as she moves.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
RomanianGirl

Level: 16


Posts: 7/42
EXP: 19620
For next: 636

Since: 01-31-08

From: Canada

Since last post: 12.9 years
Last activity: 12.9 years

Posted on 02-24-08 02:13:59 PM Link | Quote
For the animation of Peach, while adjusting a code to change her hair colour, and testing neighbour values, I was able to tweak her animation slightly (Slightly like in one frame, her arm twitches to the left while clapping her hands) Seems like animation can be editted if you find it with a Hex editor (which will probably do a better job then a line of code) But the problem is which of these values represents what polygon on her, and how do we edit them to get a rotation value we want?
Stevoisiak
Member
Level: 38


Posts: 49/283
EXP: 345476
For next: 24971

Since: 11-22-07

From: New York, Long Island

Since last post: 12.3 years
Last activity: 5.6 years

Posted on 02-24-08 02:17:50 PM Link | Quote
Originally posted by RomanianGirl
For the animation of Peach, while adjusting a code to change her hair colour, and testing neighbour values, I was able to tweak her animation slightly (Slightly like in one frame, her arm twitches to the left while clapping her hands) Seems like animation can be editted if you find it with a Hex editor (which will probably do a better job then a line of code) But the problem is which of these values represents what polygon on her, and how do we edit them to get a rotation value we want?


There is a thread on the Peachy 64 project. Can you post an image of the animations there? Id like to see some actual PROOF of it.
Ratchetfan19
Member
Level: 18


Posts: 27/50
EXP: 25661
For next: 4236

Since: 11-20-07


Since last post: 9.0 years
Last activity: 8.6 years

Posted on 02-24-08 05:59:50 PM Link | Quote
Originally posted by Stevoisiak

Here are a few you may like

Warp doors don't work
8133B18E 00AA

Warp Doors close quickly
8133B174 FFFF

Jump 3x Higher (Must reset ROM)
8125273E 3FFF

I also had a code that made the game crash if you went to the castle grounds the game froze. I deleted the code though. Would you like me to locate the code again? Also, I have two DIFFERENT codes that seem to do the EXACT same thing. They're texture codes. Can someone see what the difference between the codes is?

8133B424 1010

8133B424 9910


The warp doors close quickly code you have there is actually the bounce off walls code. However, it may affect doors directly anyway because the values are so close together. As for the texture codes, these types of codes seem to only affect what texture set is mapped to the level geometry. I'm guessing it changes values in the level script. If you change a value, it will either map another texture set or will map "garbage bytes" (the random colors, sometimes flashing if variable RAM values are mapped). If only minute changes are made to the value, textures are still mapped in blocks and no garbage bytes are seen between textures.

If you find those textures in the ROM it's likely you will see garbage bytes, proving that a stream of data from a starting location to an ending location isn't mapped. Whatever system this code modifies seems to know where to start and stop mapping textures.
Stevoisiak
Member
Level: 38


Posts: 53/283
EXP: 345476
For next: 24971

Since: 11-22-07

From: New York, Long Island

Since last post: 12.3 years
Last activity: 5.6 years

Posted on 02-24-08 07:07:20 PM Link | Quote
Originally posted by Ratchetfan19
Originally posted by Stevoisiak

Here are a few you may like

Warp doors don't work
8133B18E 00AA

Warp Doors close quickly
8133B174 FFFF

Jump 3x Higher (Must reset ROM)
8125273E 3FFF

I also had a code that made the game crash if you went to the castle grounds the game froze. I deleted the code though. Would you like me to locate the code again? Also, I have two DIFFERENT codes that seem to do the EXACT same thing. They're texture codes. Can someone see what the difference between the codes is?

8133B424 1010

8133B424 9910


The warp doors close quickly code you have there is actually the bounce off walls code. However, it may affect doors directly anyway because the values are so close together. As for the texture codes, these types of codes seem to only affect what texture set is mapped to the level geometry. I'm guessing it changes values in the level script. If you change a value, it will either map another texture set or will map "garbage bytes" (the random colors, sometimes flashing if variable RAM values are mapped). If only minute changes are made to the value, textures are still mapped in blocks and no garbage bytes are seen between textures.

If you find those textures in the ROM it's likely you will see garbage bytes, proving that a stream of data from a starting location to an ending location isn't mapped. Whatever system this code modifies seems to know where to start and stop mapping textures.


Hey rachetfan! Havent seen you in a while. Thanks for explaining, but someone else already explained it in a less technical way.
yoshiman
Member
Level: 23


Posts: 36/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 02-24-08 10:38:23 PM Link | Quote
I've already had a go at editing Peach's animations but it's just too difficult to do anything decent. There are many variables for Peach that affect different parts of her body and are mainly rotations. By studying the ending sequence I found that those animations are always loaded in memory while outside the castle. An example is of my video of Mario riding Peach-she looks like she's holding Mario.

James S.

____________________
We English do things a little differently...Anyone for a cup of tea while we hack?!
messiaen
Catgirl
Level: 68


Posts: 478/1085
EXP: 2594037
For next: 134763

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 02-17-09 01:20:55 PM (last edited by messiaen at 02-17-09 10:49 AM) Link | Quote
Major bump! Even before we figure out more about the animations format (if we ever do ), there are still plenty of things we can do regarding animations. As stated somewhere else in the forum, offset 0x3c of the RAM object is an pointer to the current animation used by an object. Usually each object will have a number of indexed animations. If you scroll to the end of 0x05 object banks, for instance, usually the pointers are the very end are animation pointers, corresponding to specific indexes. So, the coding of an object will read that segmented pointer, convert it to a RAM pointer and store it at 0x3c of its struct.

Now, for Mario, things are a bit different. His animation pointer is constant, and the pointed data itself changes dinamically during the game. The pointer is always 0x11000000, that is, the very first offset of Bank 0x11. To find the RAM addresses, just look at the pointer table at 0x8033b400. Just searching the data contained in the bank in-game (at RAM) doesn't yield valid results, so the animation is probably calculated on fly and not just read from ROM.

Also, some Mario animation-related struct is found at 0x4EC000 in the ROM. There are 0xD1 8 byte entries, so they probably correspond to Kawa's list posted earlier and are used as indexes for Mario's animations. If you swap values, Mario's animations to specific actions will be swapped. The format is probably similar to another pointer tables:


0x4EC000
[0000 00D1] [0000 0000] [0000 0690] [0000 0B40]
| | | |--> Lenght
| | |------> First entry: Relative start offset
| |---> Starting offset for this list (in RAM, it will be 0x4EC000, probably for DMA
|->Number of entries. 0xD1 = (dec)209


The data found in this table will be copied to memory as Bank 0x10. This is not done by scripts, but by a function that also loads the interface graphics (Bank 0x02) and sound structs.

____________________
Mario 64 notes @ http://sites.google.com/site/messiaen64/
yoshiman
Member
Level: 23


Posts: 94/95
EXP: 67008
For next: 715

Since: 12-21-07

From: London, England

Since last post: 13.2 years
Last activity: 12.9 years

Posted on 02-19-09 12:15:57 PM Link | Quote
A code I did recently swapped Mario's long jump for the cannon 'jump':

NTSC

81336C82 FF78

Which alters Mario's long jump action pointer:

80336C80 8026FE9C->8026FF78

Note that there are a lot of pointers to 802700E0, like at address 80336C84, which is no action. Could they be used to add more actions/animations if the coding was added?

____________________
James S.

We English do things a little differently...Anyone for a cup of tea while we hack?!
Kenshi
Member
Level: 21


Posts: 40/75
EXP: 47437
For next: 2506

Since: 09-15-07

From: NY

Since last post: 6.9 years
Last activity: 6.2 years

Posted on 02-19-09 07:00:59 PM (last edited by mortalkenshi2 at 02-19-09 04:01 PM) Link | Quote
I am not exactly sure if this is relevant in animation hacking, but a while back I know I was editing the geometry of Mario and turning him into Yoshi. I have a picture in my photobucket :



Thats just the head. I ended up doing the body and legs but noticed, there was no way of doing his chin or his tail as mario doesn't have these extra parts. I don't know of a way of solving this. I lost that rom and no longer have it (its in my other computer that died and maybe someday I'll get back and be able to show it around)
VL-Tone
Member
Super Mario 64 forum moderator
Level: 53


Posts: 400/621
EXP: 1135503
For next: 21616

Since: 07-27-07

From: Montreal, Canada

Since last post: 4.7 years
Last activity: 1.2 years

Posted on 02-21-09 08:01:36 PM Link | Quote
Time: Now - Date: Today - Weather: What can be seen outside. - Mood: How it feels. Answer to the universe: 42
Very interesting information about Mario messiaen!

The animation data must exist somewhere in the ROM, what you're seeing in RAM must be some dynamically compiled/converted version of the data.

As for bank 0x10, this answers the question I was asking in the SM64MainLevelScripts.txt document:


First this small level script data seems to be the main entry point script for the menu interface, I don't know where it's called from.

------------------------------------------------------------------------------------------------------------------------
108A10/0000: 1B 04 00 00
108A14/0004: 03 04 00 02
108A18/0008: 34 04 00 00
108A1C/000C: 13 04 00 00
108A20/0010: 00 10 00 14 00 26 9E A0 00 26 A3 A0 14 00 00 00 --Loads Level Script data from 269EA0-26A3A0 into segment 0x14, jumps to offset 0x000000
108A30/0020: 05 08 00 00 10 00 00 00 --Jumps to segment 0x10? What's in segment 0x10?





mortalkenshi2:

I had a project of trying to change Mario into the Princess, swapping body parts and joints positions, but the fact that they don't have the same number/structure of body parts is a BIG problem. All the animation routines depends on the number and structure of body part connections. We can't change those unless we make some changes in Mario's animation data, and we're not there yet, though we're getting closer, with new info like this.




____________________
MarIO0
Member
Level: 16


Posts: 25/43
EXP: 19156
For next: 1100

Since: 09-03-09


Since last post: 9.2 years
Last activity: 8.6 years

Posted on 06-05-11 02:10:50 PM (last edited by MarIO0 at 06-05-11 11:15 AM) Link | Quote
I've been researching a bit the animation format, and this is what I found (AFAIK, it isn't documented).

First, animation data is loaded from behaviour scripts, using command 0x27. The data of this command embeeds a segment address that refers to what I call a AnimationList.

AnimationList
This is simply a plain list of segment addresses into AnimationInfo. The list is usually terminated by 0x00000000, BUT sometimes it's 0x00XXXXXX. I don't know it I'm overflowing to another type of data or something... Anyway, you can just look for 0x00 to terminate.

AnimationInfo




struct AnimationInfo // 24 bytes
{
ushort unknown0; // Typically 0x0000, sometimes 0x0001
ushort zero0; // Always 0x0000
ushort unknown1; // Typically 0x0000
ushort unknown2; // Typically 0x0000

ushort unknown3; // See more info below
ushort unknown4;

SegmentAddress data1Addr; // Offset to AnimationData1
SegmentAddress data2Addr; // Offset to AnimationData2

uint zero1; // Always 0x00000000
}



AnimationData1
This is simply an array of shorts (16-bit values). I don't know how to find its length (It can be calculated from AnimationData2, but I don't think it should be done this way).

AnimationData2
It's an array of AnimationData2Entry:




struct AnimationData2Entry
{
ushort count; // In AnimationData1
ushort index; // In AnimationData1
}



I guess that this is some list of commands to execute, and AnimationData1 is just a blob of data that is used by this.

There is the same problem as with AnimationData1, that the number of entries in this list is unknown. The AnimationInfo structure doesn't seem to provide any information about it.

There's something strange: The "count" parameter is either 0x0001 or the value of unknown3 in AnimationInfo.

---

So that's all I know. There aren't more segment addresses embeeded so this is all data available. The problem is that I don't know how to figure out the length of AnimationList, AnimationData1 and AnimationData2, so I can't parse them programatically.

---
Finally, a list of the animation structures in the extended ROM, so you can look at them yourself:
(Note that the end offset of AnimationData1 and AnimationData2 is wrong because I don't know their length).



BANK FROM 00AB2410 to 00AE5718
00005538 - 00005538: m64.animation.AnimationData1
0000555C - 0000555C: m64.animation.AnimationData2
000055B0 - 000055C8: m64.animation.AnimationInfo
000055C8 - 000055C8: m64.animation.AnimationData1
00005644 - 00005644: m64.animation.AnimationData2
00005698 - 000056B0: m64.animation.AnimationInfo
000056B0 - 000056BC: m64.animation.AnimationList
000151C8 - 000151C8: m64.animation.AnimationData1
000151CC - 000151CC: m64.animation.AnimationData2
00015208 - 00015220: m64.animation.AnimationInfo
00015220 - 00015220: m64.animation.AnimationData1
00015404 - 00015404: m64.animation.AnimationData2
00015440 - 00015458: m64.animation.AnimationInfo
00015458 - 00015470: m64.animation.AnimationInfo
00015470 - 00015470: m64.animation.AnimationData1
00015654 - 00015654: m64.animation.AnimationData2
00015690 - 000156A8: m64.animation.AnimationInfo
000156A8 - 000156C0: m64.animation.AnimationInfo
000156C0 - 000156D8: m64.animation.AnimationList
***
BANK FROM 008DD7E0 to 008F3898
00004DA0 - 00004DA0: m64.animation.AnimationData1
00004F38 - 00004F38: m64.animation.AnimationData2
00004FEC - 00005004: m64.animation.AnimationInfo
00005004 - 00005004: m64.animation.AnimationData1
000051C8 - 000051C8: m64.animation.AnimationData2
0000527C - 00005294: m64.animation.AnimationInfo
00005294 - 00005294: m64.animation.AnimationData1
000053FC - 000053FC: m64.animation.AnimationData2
000054B0 - 000054C8: m64.animation.AnimationInfo
000054C8 - 000054C8: m64.animation.AnimationData1
000061FC - 000061FC: m64.animation.AnimationData2
000062B0 - 000062C8: m64.animation.AnimationInfo
000062C8 - 000062C8: m64.animation.AnimationData1
0000650C - 0000650C: m64.animation.AnimationData2
000065C0 - 000065D8: m64.animation.AnimationInfo
000065D8 - 000065F0: m64.animation.AnimationInfo
000065F0 - 000065F0: m64.animation.AnimationData1
000067CC - 000067CC: m64.animation.AnimationData2
00006880 - 00006898: m64.animation.AnimationInfo
00006898 - 00006898: m64.animation.AnimationData1
00006A5C - 00006A5C: m64.animation.AnimationData2
00006B10 - 00006B28: m64.animation.AnimationInfo
00006B28 - 00006B28: m64.animation.AnimationData1
00006D04 - 00006D04: m64.animation.AnimationData2
00006DB8 - 00006DD0: m64.animation.AnimationInfo
00006DD0 - 00006DD0: m64.animation.AnimationData1
0000717C - 0000717C: m64.animation.AnimationData2
00007230 - 00007248: m64.animation.AnimationInfo
00007248 - 00007274: m64.animation.AnimationList
0000D198 - 0000D198: m64.animation.AnimationData1
0000D538 - 0000D538: m64.animation.AnimationData2
0000D658 - 0000D670: m64.animation.AnimationInfo
0000D670 - 0000D670: m64.animation.AnimationData1
0000DB60 - 0000DB60: m64.animation.AnimationData2
0000DC80 - 0000DC98: m64.animation.AnimationInfo
0000DC98 - 0000DC98: m64.animation.AnimationData1
0000DCCC - 0000DCCC: m64.animation.AnimationData2
0000DDEC - 0000DE04: m64.animation.AnimationInfo
0000DE04 - 0000DE04: m64.animation.AnimationData1
0000E9AC - 0000E9AC: m64.animation.AnimationData2
0000EACC - 0000EAE4: m64.animation.AnimationInfo
0000EAE4 - 0000EAE4: m64.animation.AnimationData1
0000ED88 - 0000ED88: m64.animation.AnimationData2
0000EEA8 - 0000EEC0: m64.animation.AnimationInfo
0000EEC0 - 0000EEC0: m64.animation.AnimationData1
0000F410 - 0000F410: m64.animation.AnimationData2
0000F530 - 0000F548: m64.animation.AnimationInfo
0000F548 - 0000F548: m64.animation.AnimationData1
0000FB64 - 0000FB64: m64.animation.AnimationData2
0000FC84 - 0000FC9C: m64.animation.AnimationInfo
0000FC9C - 0000FC9C: m64.animation.AnimationData1
0000FF4C - 0000FF4C: m64.animation.AnimationData2
0001006C - 00010084: m64.animation.AnimationInfo
00010084 - 00010084: m64.animation.AnimationData1
000102D4 - 000102D4: m64.animation.AnimationData2
000103F4 - 0001040C: m64.animation.AnimationInfo
0001040C - 0001040C: m64.animation.AnimationData1
0001299C - 0001299C: m64.animation.AnimationData2
00012ABC - 00012AD4: m64.animation.AnimationInfo
00012AD4 - 00012AD4: m64.animation.AnimationData1
00014AC4 - 00014AC4: m64.animation.AnimationData2
00014BE4 - 00014BFC: m64.animation.AnimationInfo
00014BFC - 00014BFC: m64.animation.AnimationData1
000152A4 - 000152A4: m64.animation.AnimationData2
000153C4 - 000153DC: m64.animation.AnimationInfo
000153DC - 000153DC: m64.animation.AnimationData1
0001564C - 0001564C: m64.animation.AnimationData2
0001576C - 00015784: m64.animation.AnimationInfo
00015784 - 000157BC: m64.animation.AnimationList
***
BANK FROM 00A647B0 to 00A79820
0000E060 - 0000E060: m64.animation.AnimationData1
0000E0A8 - 0000E0A8: m64.animation.AnimationData2
0000E18C - 0000E1A4: m64.animation.AnimationInfo
0000E1A4 - 0000E1A4: m64.animation.AnimationData1
0000E8D8 - 0000E8D8: m64.animation.AnimationData2
0000E9BC - 0000E9D4: m64.animation.AnimationInfo
0000E9D4 - 0000E9D4: m64.animation.AnimationData1
0000F53C - 0000F53C: m64.animation.AnimationData2
0000F620 - 0000F638: m64.animation.AnimationInfo
0000F638 - 0000F648: m64.animation.AnimationList
***
BANK FROM 009E9FE0 to 00A01940
00005720 - 00005720: m64.animation.AnimationData1
00005BE8 - 00005BE8: m64.animation.AnimationData2
00005D44 - 00005D5C: m64.animation.AnimationInfo
00005D5C - 00005D5C: m64.animation.AnimationData1
00006A14 - 00006A14: m64.animation.AnimationData2
00006B70 - 00006B88: m64.animation.AnimationInfo
00006B88 - 00006B88: m64.animation.AnimationData1
00007084 - 00007084: m64.animation.AnimationData2
000071E0 - 000071F8: m64.animation.AnimationInfo
000071F8 - 000071F8: m64.animation.AnimationData1
00007C6C - 00007C6C: m64.animation.AnimationData2
00007DC8 - 00007DE0: m64.animation.AnimationInfo
00007DE0 - 00007DF4: m64.animation.AnimationList
***
BANK FROM 00A56940 to 00A5C7B8
00003080 - 00003080: m64.animation.AnimationData1
00003244 - 00003244: m64.animation.AnimationData2
000032EC - 00003304: m64.animation.AnimationInfo
00003304 - 00003304: m64.animation.AnimationData1
00003378 - 00003378: m64.animation.AnimationData2
00003420 - 00003438: m64.animation.AnimationInfo
00003438 - 00003438: m64.animation.AnimationData1
00003538 - 00003538: m64.animation.AnimationData2
000035E0 - 000035F8: m64.animation.AnimationInfo
000035F8 - 000035F8: m64.animation.AnimationData1
00003694 - 00003694: m64.animation.AnimationData2
0000373C - 00003754: m64.animation.AnimationInfo
00003994 - 000039A8: m64.animation.AnimationList
***
BANK FROM 0091BE90 to 0092C008
00002350 - 00002350: m64.animation.AnimationData1
00002370 - 00002370: m64.animation.AnimationData2
000023F4 - 0000240C: m64.animation.AnimationInfo
0000240C - 0000240C: m64.animation.AnimationData1
0000248C - 0000248C: m64.animation.AnimationData2
00002510 - 00002528: m64.animation.AnimationInfo
00002528 - 00002540: m64.animation.AnimationInfo
00002540 - 00002550: m64.animation.AnimationList
000056F0 - 000056F0: m64.animation.AnimationData1
00005700 - 00005700: m64.animation.AnimationData2
0000576C - 00005784: m64.animation.AnimationInfo
00005784 - 0000578C: m64.animation.AnimationList
000099B8 - 000099B8: m64.animation.AnimationData1
000099C8 - 000099C8: m64.animation.AnimationData2
00009A04 - 00009A1C: m64.animation.AnimationInfo
00009A1C - 00009A1C: m64.animation.AnimationData1
00009AC0 - 00009AC0: m64.animation.AnimationData2
00009AFC - 00009B14: m64.animation.AnimationInfo
00009B14 - 00009B20: m64.animation.AnimationList
***
BANK FROM 00934010 to 00958210
000007E0 - 000007E0: m64.animation.AnimationData1
00000870 - 00000870: m64.animation.AnimationData2
000008D0 - 000008E8: m64.animation.AnimationInfo
000008E8 - 000008E8: m64.animation.AnimationData1
00000970 - 00000970: m64.animation.AnimationData2
000009D0 - 000009E8: m64.animation.AnimationInfo
000009E8 - 000009F4: m64.animation.AnimationList
000228C0 - 000228C0: m64.animation.AnimationData1
00023360 - 00023360: m64.animation.AnimationData2
0002348C - 000234A4: m64.animation.AnimationInfo
000234A4 - 000234A4: m64.animation.AnimationData1
00023E08 - 00023E08: m64.animation.AnimationData2
00023F34 - 00023F4C: m64.animation.AnimationInfo
00023F4C - 00023F4C: m64.animation.AnimationData1
000240A4 - 000240A4: m64.animation.AnimationData2
000241D0 - 000241E8: m64.animation.AnimationInfo
000241E8 - 000241F8: m64.animation.AnimationList
***
BANK FROM 008FB8A0 to 009089D0
00007708 - 00007708: m64.animation.AnimationData1
00007954 - 00007954: m64.animation.AnimationData2
000079E4 - 000079FC: m64.animation.AnimationInfo
000079FC - 000079FC: m64.animation.AnimationData1
00007D3C - 00007D3C: m64.animation.AnimationData2
00007DCC - 00007DE4: m64.animation.AnimationInfo
00007DE4 - 00007DE4: m64.animation.AnimationData1
00008730 - 00008730: m64.animation.AnimationData2
000087C0 - 000087D8: m64.animation.AnimationInfo
000087D8 - 000087D8: m64.animation.AnimationData1
00008ACC - 00008ACC: m64.animation.AnimationData2
00008B5C - 00008B74: m64.animation.AnimationInfo
00008B74 - 00008B8C: m64.animation.AnimationList
0000CD58 - 0000CD58: m64.animation.AnimationData1
0000CE60 - 0000CE60: m64.animation.AnimationData2
0000CED8 - 0000CEF0: m64.animation.AnimationInfo
0000CEF0 - 0000CEF0: m64.animation.AnimationData1
0000D088 - 0000D088: m64.animation.AnimationData2
0000D100 - 0000D118: m64.animation.AnimationInfo
0000D118 - 0000D124: m64.animation.AnimationList
***
BANK FROM 00A09940 to 00A2EAC8
00000E78 - 00000E78: m64.animation.AnimationData1
00000FA4 - 00000FA4: m64.animation.AnimationData2
00001010 - 00001028: m64.animation.AnimationInfo
00001028 - 00001030: m64.animation.AnimationList
0000C6A0 - 0000C6A0: m64.animation.AnimationData1
0000CB64 - 0000CB64: m64.animation.AnimationData2
0000CC24 - 0000CC3C: m64.animation.AnimationInfo
0000CC3C - 0000CC3C: m64.animation.AnimationData1
0000CEF8 - 0000CEF8: m64.animation.AnimationData2
0000CFB8 - 0000CFD0: m64.animation.AnimationInfo
0000CFD0 - 0000CFD0: m64.animation.AnimationData1
0000D458 - 0000D458: m64.animation.AnimationData2
0000D518 - 0000D530: m64.animation.AnimationInfo
0000D530 - 0000D530: m64.animation.AnimationData1
0000D744 - 0000D744: m64.animation.AnimationData2
0000D804 - 0000D81C: m64.animation.AnimationInfo
0000D81C - 0000D81C: m64.animation.AnimationData1
0000DCD0 - 0000DCD0: m64.animation.AnimationData2
0000DD90 - 0000DDA8: m64.animation.AnimationInfo
0000DDA8 - 0000DDA8: m64.animation.AnimationData1
0000E26C - 0000E26C: m64.animation.AnimationData2
0000E32C - 0000E344: m64.animation.AnimationInfo
0000E344 - 0000E344: m64.animation.AnimationData1
0000E868 - 0000E868: m64.animation.AnimationData2
0000E928 - 0000E940: m64.animation.AnimationInfo
0000E940 - 0000E940: m64.animation.AnimationData1
0000F32C - 0000F32C: m64.animation.AnimationData2
0000F3EC - 0000F404: m64.animation.AnimationInfo
0000F404 - 0000F404: m64.animation.AnimationData1
0000FA5C - 0000FA5C: m64.animation.AnimationData2
0000FB1C - 0000FB34: m64.animation.AnimationInfo
0000FB34 - 0000FB34: m64.animation.AnimationData1
00010198 - 00010198: m64.animation.AnimationData2
00010258 - 00010270: m64.animation.AnimationInfo
00010270 - 00010270: m64.animation.AnimationData1
00010574 - 00010574: m64.animation.AnimationData2
00010634 - 0001064C: m64.animation.AnimationInfo
0001064C - 0001064C: m64.animation.AnimationData1
00010D88 - 00010D88: m64.animation.AnimationData2
00010E48 - 00010E60: m64.animation.AnimationInfo
00010E60 - 00010E60: m64.animation.AnimationData1
00011018 - 00011018: m64.animation.AnimationData2
000110D8 - 000110F0: m64.animation.AnimationInfo
000110F0 - 000110F0: m64.animation.AnimationData1
0001128C - 0001128C: m64.animation.AnimationData2
0001134C - 00011364: m64.animation.AnimationInfo
00011364 - 000113A0: m64.animation.AnimationList
00016F80 - 00016F80: m64.animation.AnimationData1
00017B90 - 00017B90: m64.animation.AnimationData2
00017C38 - 00017C50: m64.animation.AnimationInfo
00017C50 - 00017C50: m64.animation.AnimationData1
00017CE0 - 00017CE0: m64.animation.AnimationData2
00017D88 - 00017DA0: m64.animation.AnimationInfo
00017DA0 - 00017DA0: m64.animation.AnimationData1
00018708 - 00018708: m64.animation.AnimationData2
000187B0 - 000187C8: m64.animation.AnimationInfo
000187C8 - 000187C8: m64.animation.AnimationData1
00018B00 - 00018B00: m64.animation.AnimationData2
00018BA8 - 00018BC0: m64.animation.AnimationInfo
00018BC0 - 00018BC0: m64.animation.AnimationData1
000197AC - 000197AC: m64.animation.AnimationData2
00019854 - 0001986C: m64.animation.AnimationInfo
0001986C - 0001986C: m64.animation.AnimationData1
00019F6C - 00019F6C: m64.animation.AnimationData2
0001A014 - 0001A02C: m64.animation.AnimationInfo
0001A02C - 0001A02C: m64.animation.AnimationData1
0001AA3C - 0001AA3C: m64.animation.AnimationData2
0001AAE4 - 0001AAFC: m64.animation.AnimationInfo
0001AAFC - 0001AAFC: m64.animation.AnimationData1
0001AE8C - 0001AE8C: m64.animation.AnimationData2
0001AF34 - 0001AF4C: m64.animation.AnimationInfo
0001AF4C - 0001AF4C: m64.animation.AnimationData1
0001B58C - 0001B58C: m64.animation.AnimationData2
0001B634 - 0001B64C: m64.animation.AnimationInfo
0001B64C - 0001B64C: m64.animation.AnimationData1
0001C25C - 0001C25C: m64.animation.AnimationData2
0001C304 - 0001C31C: m64.animation.AnimationInfo
0001C31C - 0001C348: m64.animation.AnimationList
00020098 - 00020098: m64.animation.AnimationData1
00020240 - 00020240: m64.animation.AnimationData2
000202DC - 000202F4: m64.animation.AnimationInfo
000202F4 - 000202F4: m64.animation.AnimationData1
00020950 - 00020950: m64.animation.AnimationData2
000209EC - 00020A04: m64.animation.AnimationInfo
00020A04 - 00020A10: m64.animation.AnimationList
***
BANK FROM 008A5460 to 008B9190
00006CA0 - 00006CA0: m64.animation.AnimationData1
00008BDC - 00008BDC: m64.animation.AnimationData2
00008CFC - 00008D14: m64.animation.AnimationInfo
00008EB4 - 00008EBC: m64.animation.AnimationList
0000AA00 - 0000AA00: m64.animation.AnimationData1
0000ADDC - 0000ADDC: m64.animation.AnimationData2
0000AE3C - 0000AE54: m64.animation.AnimationInfo
0000AE54 - 0000AE5C: m64.animation.AnimationList
0000E310 - 0000E310: m64.animation.AnimationData1
0000FB34 - 0000FB34: m64.animation.AnimationData2
0000FBF4 - 0000FC0C: m64.animation.AnimationInfo
0000FC0C - 0000FC0C: m64.animation.AnimationData1
000103C8 - 000103C8: m64.animation.AnimationData2
00010488 - 000104A0: m64.animation.AnimationInfo
000104A0 - 000104A0: m64.animation.AnimationData1
00010A94 - 00010A94: m64.animation.AnimationData2
00010B54 - 00010B6C: m64.animation.AnimationInfo
00010B6C - 00010B6C: m64.animation.AnimationData1
000113C8 - 000113C8: m64.animation.AnimationData2
00011488 - 000114A0: m64.animation.AnimationInfo
000114A0 - 000114A0: m64.animation.AnimationData1
000117D0 - 000117D0: m64.animation.AnimationData2
00011890 - 000118A8: m64.animation.AnimationInfo
000118A8 - 000118A8: m64.animation.AnimationData1
00011C80 - 00011C80: m64.animation.AnimationData2
00011D40 - 00011D58: m64.animation.AnimationInfo
00011D58 - 00011D58: m64.animation.AnimationData1
0001274C - 0001274C: m64.animation.AnimationData2
0001280C - 00012824: m64.animation.AnimationInfo
00012824 - 00012844: m64.animation.AnimationList
***
BANK FROM 0088C3C0 to 0089D460
0000B730 - 0000B730: m64.animation.AnimationData1
0000BC88 - 0000BC88: m64.animation.AnimationData2
0000BDFC - 0000BE14: m64.animation.AnimationInfo
0000BE14 - 0000BE14: m64.animation.AnimationData1
0000C138 - 0000C138: m64.animation.AnimationData2
0000C2AC - 0000C2C4: m64.animation.AnimationInfo
0000C2C4 - 0000C2C4: m64.animation.AnimationData1
0000C3AC - 0000C3AC: m64.animation.AnimationData2
0000C520 - 0000C538: m64.animation.AnimationInfo
0000C538 - 0000C538: m64.animation.AnimationData1
0000C600 - 0000C600: m64.animation.AnimationData2
0000C774 - 0000C78C: m64.animation.AnimationInfo
0000C78C - 0000C78C: m64.animation.AnimationData1
0000CE58 - 0000CE58: m64.animation.AnimationData2
0000CFCC - 0000CFE4: m64.animation.AnimationInfo
0000CFE4 - 0000CFE4: m64.animation.AnimationData1
0000D43C - 0000D43C: m64.animation.AnimationData2
0000D5B0 - 0000D5C8: m64.animation.AnimationInfo
0000D5C8 - 0000D5C8: m64.animation.AnimationData1
0000D804 - 0000D804: m64.animation.AnimationData2
0000D978 - 0000D990: m64.animation.AnimationInfo
0000D990 - 0000D990: m64.animation.AnimationData1
0000DC64 - 0000DC64: m64.animation.AnimationData2
0000DDD8 - 0000DDF0: m64.animation.AnimationInfo
0000DDF0 - 0000DDF0: m64.animation.AnimationData1
0000DF98 - 0000DF98: m64.animation.AnimationData2
0000E10C - 0000E124: m64.animation.AnimationInfo
0000E124 - 0000E124: m64.animation.AnimationData1
0000EF04 - 0000EF04: m64.animation.AnimationData2
0000F078 - 0000F090: m64.animation.AnimationInfo
0000F090 - 0000F090: m64.animation.AnimationData1
0000F554 - 0000F554: m64.animation.AnimationData2
0000F6C8 - 0000F6E0: m64.animation.AnimationInfo
0000F6E0 - 0000F6E0: m64.animation.AnimationData1
0000FCA4 - 0000FCA4: m64.animation.AnimationData2
0000FE18 - 0000FE30: m64.animation.AnimationInfo
0000FE30 - 0000FE64: m64.animation.AnimationList
***
BANK FROM 00860EE0 to 00876240
00004EC0 - 00004EC0: m64.animation.AnimationData1
0000529C - 0000529C: m64.animation.AnimationData2
000053EC - 00005404: m64.animation.AnimationInfo
00005404 - 00005404: m64.animation.AnimationData1
00005600 - 00005600: m64.animation.AnimationData2
00005750 - 00005768: m64.animation.AnimationInfo
00005768 - 00005774: m64.animation.AnimationList
***
BANK FROM 00A36AC0 to 00A4E938
00005638 - 00005638: m64.animation.AnimationData1
00005844 - 00005844: m64.animation.AnimationData2
000058E0 - 000058F8: m64.animation.AnimationInfo
000058F8 - 00005900: m64.animation.AnimationList
00008CF0 - 00008CF0: m64.animation.AnimationData1
00008F70 - 00008F70: m64.animation.AnimationData2
0000906C - 00009084: m64.animation.AnimationInfo
00009084 - 00009084: m64.animation.AnimationData1
00009304 - 00009304: m64.animation.AnimationData2
00009400 - 00009418: m64.animation.AnimationInfo
00009418 - 00009418: m64.animation.AnimationData1
000099E4 - 000099E4: m64.animation.AnimationData2
00009AE0 - 00009AF8: m64.animation.AnimationInfo
00009AF8 - 00009AF8: m64.animation.AnimationData1
0000A0C4 - 0000A0C4: m64.animation.AnimationData2
0000A1C0 - 0000A1D8: m64.animation.AnimationInfo
0000A1D8 - 0000A1D8: m64.animation.AnimationData1
0000B660 - 0000B660: m64.animation.AnimationData2
0000B75C - 0000B774: m64.animation.AnimationInfo
0000B774 - 0000B774: m64.animation.AnimationData1
0000CE6C - 0000CE6C: m64.animation.AnimationData2
0000CF68 - 0000CF80: m64.animation.AnimationInfo
0000CF80 - 0000CF80: m64.animation.AnimationData1
0000E408 - 0000E408: m64.animation.AnimationData2
0000E504 - 0000E51C: m64.animation.AnimationInfo
0000E51C - 0000E51C: m64.animation.AnimationData1
0000FB34 - 0000FB34: m64.animation.AnimationData2
0000FC30 - 0000FC48: m64.animation.AnimationInfo
0000FC48 - 0000FC6C: m64.animation.AnimationList
000120D0 - 000120D0: m64.animation.AnimationData1
00013260 - 00013260: m64.animation.AnimationData2
00013338 - 00013350: m64.animation.AnimationInfo
00013350 - 00013350: m64.animation.AnimationData1
000136B4 - 000136B4: m64.animation.AnimationData2
0001378C - 000137A4: m64.animation.AnimationInfo
000137A4 - 000137A4: m64.animation.AnimationData1
00013A10 - 00013A10: m64.animation.AnimationData2
00013AE8 - 00013B00: m64.animation.AnimationInfo
00013B00 - 00013B00: m64.animation.AnimationData1
00014BAC - 00014BAC: m64.animation.AnimationData2
00014C84 - 00014C9C: m64.animation.AnimationInfo
00014C9C - 00014C9C: m64.animation.AnimationData1
00015634 - 00015634: m64.animation.AnimationData2
0001570C - 00015724: m64.animation.AnimationInfo
00015724 - 0001573C: m64.animation.AnimationList
***
BANK FROM 008C1190 to 008D57E0
000051E8 - 000051E8: m64.animation.AnimationData1
00005D00 - 00005D00: m64.animation.AnimationData2
00005E44 - 00005E5C: m64.animation.AnimationInfo
00005E5C - 00005E5C: m64.animation.AnimationData1
00007430 - 00007430: m64.animation.AnimationData2
00007574 - 0000758C: m64.animation.AnimationInfo
0000758C - 0000758C: m64.animation.AnimationData1
0000786C - 0000786C: m64.animation.AnimationData2
000079B0 - 000079C8: m64.animation.AnimationInfo
000079C8 - 000079C8: m64.animation.AnimationData1
00007CF0 - 00007CF0: m64.animation.AnimationData2
00007E34 - 00007E4C: m64.animation.AnimationInfo
00007E4C - 00007E4C: m64.animation.AnimationData1
0000857C - 0000857C: m64.animation.AnimationData2
000086C0 - 000086D8: m64.animation.AnimationInfo
000086D8 - 000086D8: m64.animation.AnimationData1
000088D4 - 000088D4: m64.animation.AnimationData2
00008A18 - 00008A30: m64.animation.AnimationInfo
00008A30 - 00008A30: m64.animation.AnimationData1
00008BA0 - 00008BA0: m64.animation.AnimationData2
00008CE4 - 00008CFC: m64.animation.AnimationInfo
00008CFC - 00008D1C: m64.animation.AnimationList
***
BANK FROM 00960210 to 009770D0
0000E6F0 - 0000E6F0: m64.animation.AnimationData1
0000EBA8 - 0000EBA8: m64.animation.AnimationData2
0000EC74 - 0000EC8C: m64.animation.AnimationInfo
0000EC8C - 0000EC94: m64.animation.AnimationList
***
BANK FROM 0087E240 to 008843C0
00004038 - 00004038: m64.animation.AnimationData1
000041FC - 000041FC: m64.animation.AnimationData2
000042A4 - 000042BC: m64.animation.AnimationInfo
000042BC - 000042BC: m64.animation.AnimationData1
00004330 - 00004330: m64.animation.AnimationData2
000043D8 - 000043F0: m64.animation.AnimationInfo
000043F0 - 000043F0: m64.animation.AnimationData1
000044F0 - 000044F0: m64.animation.AnimationData2
00004598 - 000045B0: m64.animation.AnimationInfo
000045B0 - 000045B0: m64.animation.AnimationData1
0000464C - 0000464C: m64.animation.AnimationData2
000046F4 - 0000470C: m64.animation.AnimationInfo
0000470C - 00004720: m64.animation.AnimationList
***
BANK FROM 00FC7810 to 00FD9088
0000C7C8 - 0000C7C8: m64.animation.AnimationData1
0000C8F0 - 0000C8F0: m64.animation.AnimationData2
0000C944 - 0000C95C: m64.animation.AnimationInfo
0000C95C - 0000C964: m64.animation.AnimationList
***
BANK FROM 00A81820 to 00AAA410
0001D770 - 0001D770: m64.animation.AnimationData1
0001D9D4 - 0001D9D4: m64.animation.AnimationData2
0001DA34 - 0001DA4C: m64.animation.AnimationInfo
0001DA4C - 0001DA54: m64.animation.AnimationList
00023528 - 00023528: m64.animation.AnimationData1
00023754 - 00023754: m64.animation.AnimationData2
000237FC - 00023814: m64.animation.AnimationInfo
00023814 - 00023814: m64.animation.AnimationData1
000238AC - 000238AC: m64.animation.AnimationData2
00023954 - 0002396C: m64.animation.AnimationInfo
0002396C - 00023978: m64.animation.AnimationList
***



Comments:
- AFAIK, all animation data from AnimationList is in the same bank.
- This is useless, but you can see a pattern in the organization: An AnimationList refers to some AnimationInfo before its offset, and an AnimationInfo refers to a AnimationData1 and a AnimationData2 before its offset.
MarIO0
Member
Level: 16


Posts: 26/43
EXP: 19156
For next: 1100

Since: 09-03-09


Since last post: 9.2 years
Last activity: 8.6 years

Posted on 06-07-11 09:19:04 PM (last edited by MarIO0 at 06-09-11 06:51 PM) Link | Quote
Well, I have found some new information.

First, the size of AnimationData2 can be calculated from AnimationInfo. The formula is:


nBytesAnim2 = (unknown4 + 1) * 12



The size of AnimationData1 can't be calculated from AnimationInfo, simply because two equal AnimationInfo can contain AnimationData1 of different size. I'm starting to believe that its length is not in the ROM (since it isn't necessary after all, AnimationData2 provides all needed info to parse it).

---

The size of AnimationList is still unknown, and it's NOT a zero-terminated list (assuming that, overlapping ROM bank zones are created).

I'm guessing that the length is set in the object structure using some behaviour command, but I haven't found it so far.
messiaen
Catgirl
Level: 68


Posts: 1024/1085
EXP: 2594037
For next: 134763

Since: 11-20-07


Since last post: 8.1 years
Last activity: 7.2 years

Posted on 06-09-11 03:33:28 PM Link | Quote
I have some notes on animation data somewhere in my old notebook, I'll post them whenever I get a chance. By the way, you should check out the Zelda hacking forum www.spinout182.com, these guys are way more advanced regarding animations (there are already custom animations and animation viewers tools)
Dudaw
Member
Level: 17


Posts: 33/49
EXP: 22029
For next: 2714

Since: 01-07-11


Since last post: 9.1 years
Last activity: 5.8 years

Posted on 06-15-11 06:17:36 PM Link | Quote
Originally posted by messiaen
I have some notes on animation data somewhere in my old notebook, I'll post them whenever I get a chance. By the way, you should check out the Zelda hacking forum www.spinout182.com, these guys are way more advanced regarding animations (there are already custom animations and animation viewers tools)


I read over some of their docs and was able to trace back these "rotation indexes" from the 0x27 commands, thanks to Twili13 for a little bit of clarification to me on this format.
I got a Bully to do some even wilder things.
It may be easy to modify existing behaviors, but making new ones seems to be a hassle.

Looking forward to your notes.
Lyskar
12210
-The Chaos within trumps the Chaos without-
Level: 192


Posts: 9238/12211
EXP: 99235467
For next: 638104

Since: 07-03-07

From: 52-2-88-7

Since last post: 7.4 years
Last activity: 7.3 years

Posted on 06-15-11 06:22:43 PM Link | Quote
Stats
Time/Date
06-15-11 12:22:43 PM
Posts
9238
Days Here
1443
Level
141
Metal_Man88's Post
Good luck on finding all the info. The more we can change about SM64, the better.

____________________

Eisnaught - SSQ² - Mobius Roleplay - SSS
Lyskar
12210
-The Chaos within trumps the Chaos without-
Level: 192


Posts: 9858/12211
EXP: 99235467
For next: 638104

Since: 07-03-07

From: 52-2-88-7

Since last post: 7.4 years
Last activity: 7.3 years

Posted on 08-02-11 07:07:16 PM Link | Quote
Stats
Time/Date
08-02-11 01:07:16 PM
Posts
9858
Days Here
1491
Level
146
Metal_Man88's Post
Adding in Twili's tutorial here, since he sort of destructed from his hubris. I've taken the liberty of rehosting his images in case he decides to try anything else stupid.



We will be using a gs code of yoshiman's, as well as creating one for this. His code being:

Replace signpost with Blarrg in Lethal Lava Land Star 1 (JS)

NTSC

8133E9FC 8018
8133E9FE A15C
8133EA24 8014
8133EA26 9A10
8133EA14 4000
8133EA18 4000
8133EA1C 4000
8133EA88 C5A8
8133EA8C 421A
8133EA90 45B0
8033EB19 0020
8133EBE0 4406
8033EB6B 0002


Were you to startup the game and turn this code on before entering Lethal Lava Land, you would be greeted with Blarrg bobbing up and down. Let's go to the RAM offset of the animation itself. You will need to use an emulator like Nemu64 to view the memory.

I know from verification via the SM64 Exposed Animation Values page that lines 3 and 4 contain the RAM offset of the animation header, 80149A10:

00 00 00 00 00 00 00 00 [00 2D] [00 05] [05] [00 5E B8] [05] [00 60 28]

002D is the frame count (45 in decimal).
0005 is the number of limbs/joints/bones/nodes/etc. in the geo layout/object hierarchy for Blarrg.

The lone 05 bytes in brackets are the RAM bank this is in, 05.
005EB8 is the offset to the rotation and translation values.
006028 is the offset to the rotation and translation index.


The start of RAM bank 05 when in Lethal Lava Land is 801439A0, so to reach the rotation/translation values, we would do 801439A0 + 005EB8 to get 80149858. There, you will see:

[00 00] [00 16] [FF FC] [FF B9] [FF 61] [FF 08] [FE C0] [FE 9F]

These are the rotation/translation values for Blarrg's animation. Rotations are unsigned shorts (16-bit). 4000 is 90 degrees, 8000 is 180 degrees, C000 is 270 degrees, 0000 is 360/0 degrees, etc.

Translation values are SIGNED shorts.

0000 - 7FFF = 0 to 32,767.
8000 - FFFF = -32,768 to -1.

So how do we differentiate between rotations and translations? That's what the rotation/translation index is for! It's at 801499C8 (801439A0 + 006028):

[00 01] [00 00]
[00 2D] [00 01]
[00 01] [00 00]


[00 01] [00 00]
[00 01] [00 2E]
[00 01] [00 00]

[00 01] [00 00]
[00 01] [00 00]
[00 2D] [00 8A]

[00 01] [00 00]
[00 01] [00 00]
[00 2D] [00 5D]

[00 01] [00 00]
[00 01] [00 00]
[00 01] [00 5C]

[00 01] [00 00]

[00 01] [00 00]
[00 2D] [00 2F]

Each group of twelve bytes represents a complete rotation/translation, X, Y, and Z. The top row is X, middle is Y, and bottom is Z. The first twelve bytes here are for Blarrg's translation. The rest are for rotation of its limbs. The part in brackets on the left is the key. If the key is equal to the number of frames the animation has (002D!), the rotation/translation is dynamic (changing each frame). If it is equal to 0001, it's static.

The part in brackets on the right is the indexed location inside of the rotation/translation values. For dynamic rotation/translation, the index points to the rotation/translation value for the first frame. The next two bytes in from the indexed location are for the second frame, etc. For static, the same value is used for every frame.

To prove this information accurate, I have created a new code to use in conjunction with the one that loads Blarrg in Lethal Lava Land:

811499CC 0001
811499CE 0015
811499DA 0000
811499E8 0001
811499EA 0000
811499F4 0001
811499F6 0000
81149A02 0000

81149A0C 0001
81149A0E 0000

This manipulates the rotation/translation index to give Blarrg the highest Y translation (indexed location 0015) the animation has to offer (because it bobs up and down), and locks it from changing each frame. The first two code lines do that. The rest lock the limb rotations and point to indexed location 0000 (which seems to always contain a rotation of zero, a Nintendo standard).

Using both codes together, you will be greeted with this:



Blarrg in default rotation. From reading his geo layout and nulling the Display List pointers one at a time, I have reached the following consensus:

Limb 1 is the base/root for the entire model.
Limb 2 is Blarrg's body.
Limb 3 is Blarrg's head.
Limb 4 governs Blarrg's jaw.
Limb 5 is Blarrg's jaw.


The second grouping of twelve bytes in the rotation/translation index is for the model root, because I said the first was for Blarrg's translation. Third is for Blarrg's body, you get the idea. Change line 3 of my code from 0000 to 002E, and upon reloading, you will notice that Blarrg has rotated to be perpendicular to the island in the lava:



This code line modifies the indexed location for the model root's Y rotation.

Now change code line 5 from 0000 to 008A, and THIS will happen:



Just a bit more recognizable, eh? This code line modifies the indexed location for Blarrg's body's Z rotation.

Change code line 7 from 0000 to 005D:



Blarrg's head is lowered slightly. This code line modifies the indexed location for Blarrg's head's Z rotation.


Change code line 8 from 0000 to 005C:



This change is perhaps the most subtle of them all. It rotates Blarrg's jaw out of the head and into the body. This code line modifies the indexed location for the limb that governs Blarrg's jaw's Z rotation.

One final change. Code line 10. Change from 0000 to 0048:



Blarrg's jaw is now rotated correctly to show an open mouth! This code line modifies the indexed location for Blarrg's jaw's direct Z rotation.

This concludes Animation 101.


____________________
Don't ever let bad luck stop you from achieving your dreams.
Eisnaught - SSQ² - Mobius Roleplay - SSS
Twili
Random nobody
Level: 5


Posts: 4/4
EXP: 503
For next: 26

Since: 06-24-11


Since last post: 10.7 years
Last activity: 10.7 years

Posted on 08-10-11 04:18:39 PM (last edited by Twili at 08-10-11 01:19 PM) Link | Quote
Mario's animation table is at 0x4EC000 in the ROM, regardless of being "extended." It starts with the animation count and some padding:

[00 00 00 D1] 00 00 00 00

He has 209 animations (decimal). Immediately after these 8 bytes starts the entries.

[00 00 06 90] [00 00 0B 40]

00 00 06 90 is the offset (hex) relative to the start of the table to the animation header.
00 00 0B 40 is the size (hex) of the animation (header, rotation/translation index, and rotation/translation values).

0x4EC690 (0x4EC000 + 0x690):

[00 01 00 BD] 00 00 00 00 [00 22] [00 14] [00 00 01 14] [00 00 00 18] [00 00 0B 40]

I don't know what 00 01 00 BD is.
00 22 is the number of frames (hex) in this animation.
00 14 is Mario's limb count (hex) in his hierarchy.
00 00 01 14 is a pointer (relative to the start of the animation header, hex) to the rotation/translation values.
00 00 00 18 is a pointer (relative to the start of the animation header, hex) to the rotation/translation index.

The format for the rotation/translation values and index is the same as what I posted about regular animations.

00 00 0B 40 is a reiteration of the size of the animation data.

All of this information has been used in MACE (Mario Animation Creator/Editor) to view Mario's animations, as I linked a video to in my topic:

http://www.youtube.com/watch?v=WOWcuBA08Vk

His polygons and hierarchy were ripped from the 64DD BIOS, but the animations are being read from SM64.
MarIO0
Member
Level: 16


Posts: 40/43
EXP: 19156
For next: 1100

Since: 09-03-09


Since last post: 9.2 years
Last activity: 8.6 years

Posted on 08-10-11 06:24:02 PM (last edited by MarIO0 at 08-10-11 03:27 PM) Link | Quote
Wow, great job. That's some progress.
Pages: 1 2 Next newer thread | Next older thread
Jul - SM64 Hacking (Archive) - Hacking animations New poll - New thread - New reply


Rusted Logic

Acmlmboard - commit 47be4dc [2021-08-23]
©2000-2022 Acmlm, Xkeeper, Kaito Sinclaire, et al.

38 database queries, 6 query cache hits.
Query execution time:  0.121622 seconds
Script execution time:  0.051657 seconds
Total render time:  0.173279 seconds


TidyHTML vomit below
line 1 column 1 - Warning: missing <!DOCTYPE> declaration
line 2 column 205 - Warning: unescaped & or unknown entity "&page"
line 119 column 11 - Warning: <form> isn't allowed in <table> elements
line 118 column 10 - Info: <table> previously mentioned
line 120 column 11 - Warning: missing <tr>
line 120 column 119 - Warning: missing </font> before </td>
line 124 column 16 - Warning: plain text isn't allowed in <tr> elements
line 120 column 11 - Info: <tr> previously mentioned
line 125 column 68 - Warning: missing </nobr> before </td>
line 141 column 68 - Warning: missing </nobr> before <tr>
line 147 column 35 - Warning: missing <tr>
line 147 column 50 - Warning: missing </font> before </td>
line 148 column 37 - Warning: unescaped & or unknown entity "&id"
line 147 column 189 - Warning: missing </font> before </table>
line 149 column 35 - Warning: missing <tr>
line 149 column 94 - Warning: unescaped & or unknown entity "&page"
line 149 column 50 - Warning: missing </font> before </td>
line 149 column 131 - Warning: missing </font> before </table>
line 156 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 158 column 9 - Warning: missing <tr>
line 176 column 13 - Warning: missing <tr>
line 177 column 99 - Warning: unescaped & or unknown entity "&postid"
line 179 column 84 - Warning: <style> isn't allowed in <td> elements
line 179 column 9 - Info: <td> previously mentioned
line 179 column 2372 - Warning: unescaped & or unknown entity "&config"
line 179 column 2562 - Warning: unescaped & or unknown entity "&pr"
line 179 column 2567 - Warning: unescaped & or unknown entity "&lv"
line 179 column 2573 - Warning: unescaped & or unknown entity "&ep"
line 179 column 2581 - Warning: unescaped & or unknown entity "&ed"
line 179 column 2590 - Warning: unescaped & or unknown entity "&ll"
line 179 column 2599 - Warning: unescaped & or unknown entity "&ex"
line 179 column 2610 - Warning: unescaped & or unknown entity "&le"
line 179 column 2621 - Warning: unescaped & or unknown entity "&eg"
line 179 column 2628 - Warning: unescaped & or unknown entity "&et"
line 182 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 184 column 9 - Warning: missing <tr>
line 202 column 13 - Warning: missing <tr>
line 203 column 99 - Warning: unescaped & or unknown entity "&postid"
line 214 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 216 column 9 - Warning: missing <tr>
line 234 column 13 - Warning: missing <tr>
line 235 column 99 - Warning: unescaped & or unknown entity "&postid"
line 241 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 243 column 9 - Warning: missing <tr>
line 261 column 13 - Warning: missing <tr>
line 262 column 99 - Warning: unescaped & or unknown entity "&postid"
line 269 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 271 column 9 - Warning: missing <tr>
line 289 column 13 - Warning: missing <tr>
line 290 column 99 - Warning: unescaped & or unknown entity "&postid"
line 315 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 317 column 9 - Warning: missing <tr>
line 335 column 13 - Warning: missing <tr>
line 336 column 99 - Warning: unescaped & or unknown entity "&postid"
line 364 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 366 column 9 - Warning: missing <tr>
line 384 column 13 - Warning: missing <tr>
line 385 column 99 - Warning: unescaped & or unknown entity "&postid"
line 392 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 394 column 9 - Warning: missing <tr>
line 412 column 13 - Warning: missing <tr>
line 413 column 101 - Warning: unescaped & or unknown entity "&postid"
line 433 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 435 column 9 - Warning: missing <tr>
line 453 column 13 - Warning: missing <tr>
line 454 column 101 - Warning: unescaped & or unknown entity "&postid"
line 471 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 473 column 9 - Warning: missing <tr>
line 491 column 13 - Warning: missing <tr>
line 492 column 101 - Warning: unescaped & or unknown entity "&postid"
line 496 column 340 - Warning: unescaped & or unknown entity "&current"
line 501 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 503 column 9 - Warning: missing <tr>
line 521 column 13 - Warning: missing <tr>
line 522 column 101 - Warning: unescaped & or unknown entity "&postid"
line 524 column 74 - Warning: <style> isn't allowed in <td> elements
line 524 column 9 - Info: <td> previously mentioned
line 524 column 1512 - Warning: missing </font> before <blockquote>
line 530 column 1994 - Warning: inserting implicit <font>
line 530 column 1994 - Warning: missing </font> before <hr>
line 538 column 1 - Warning: inserting implicit <font>
line 538 column 1 - Warning: missing </font> before <hr>
line 540 column 1 - Warning: inserting implicit <font>
line 524 column 138 - Warning: missing </div>
line 548 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 550 column 9 - Warning: missing <tr>
line 568 column 13 - Warning: missing <tr>
line 569 column 101 - Warning: unescaped & or unknown entity "&postid"
line 1107 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 1109 column 9 - Warning: missing <tr>
line 1127 column 13 - Warning: missing <tr>
line 1128 column 101 - Warning: unescaped & or unknown entity "&postid"
line 1145 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 1147 column 9 - Warning: missing <tr>
line 1165 column 13 - Warning: missing <tr>
line 1166 column 101 - Warning: unescaped & or unknown entity "&postid"
line 1171 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 1173 column 9 - Warning: missing <tr>
line 1191 column 13 - Warning: missing <tr>
line 1192 column 101 - Warning: unescaped & or unknown entity "&postid"
line 1203 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 1205 column 9 - Warning: missing <tr>
line 1223 column 13 - Warning: missing <tr>
line 1224 column 101 - Warning: unescaped & or unknown entity "&postid"
line 1226 column 74 - Warning: <style> isn't allowed in <td> elements
line 1226 column 9 - Info: <td> previously mentioned
line 1226 column 1365 - Error: <z> is not recognized!
line 1226 column 1365 - Warning: discarding unexpected <z>
line 1226 column 1377 - Warning: discarding unexpected </z>
line 1228 column 1409 - Error: <z> is not recognized!
line 1228 column 1409 - Warning: discarding unexpected <z>
line 1228 column 1417 - Warning: discarding unexpected </z>
line 1230 column 1433 - Error: <z> is not recognized!
line 1230 column 1433 - Warning: discarding unexpected <z>
line 1230 column 1445 - Warning: discarding unexpected </z>
line 1232 column 1461 - Error: <z> is not recognized!
line 1232 column 1461 - Warning: discarding unexpected <z>
line 1232 column 1469 - Warning: discarding unexpected </z>
line 1235 column 2294 - Warning: discarding unexpected </td>
line 1238 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 1240 column 9 - Warning: missing <tr>
line 1258 column 13 - Warning: missing <tr>
line 1259 column 101 - Warning: unescaped & or unknown entity "&postid"
line 1261 column 74 - Warning: <style> isn't allowed in <td> elements
line 1261 column 9 - Info: <td> previously mentioned
line 1261 column 1365 - Error: <z> is not recognized!
line 1261 column 1365 - Warning: discarding unexpected <z>
line 1261 column 1377 - Warning: discarding unexpected </z>
line 1263 column 1409 - Error: <z> is not recognized!
Tidy found 355 warnings and 8 errors! Not all warnings/errors were shown.

The alt attribute should be used to give a short description
of an image; longer descriptions should be given with the
longdesc attribute which takes a URL linked to the description.
These measures are needed for people using non-graphical browsers.

For further advice on how to make your pages accessible
see http://www.w3.org/WAI/GL.
You are recommended to use CSS to specify the font and
properties such as its size and color. This will reduce
the size of HTML files and make them easier to maintain
compared with using <FONT> elements.

You are recommended to use CSS to control line wrapping.
Use "white-space: nowrap" to inhibit wrapping in place
of inserting <NOBR>...</NOBR> into the markup.

About HTML Tidy: https://github.com/htacg/tidy-html5
Bug reports and comments: https://github.com/htacg/tidy-html5/issues
Official mailing list: https://lists.w3.org/Archives/Public/public-htacg/
Latest HTML specification: http://dev.w3.org/html5/spec-author-view/
Validate your HTML documents: http://validator.w3.org/nu/
Lobby your company to join the W3C: http://www.w3.org/Consortium

Do you speak a language other than English, or a different variant of
English? Consider helping us to localize HTML Tidy. For details please see
https://github.com/htacg/tidy-html5/blob/master/README/LOCALIZE.md