Register - Login
Views: 99797962
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - Stats - Latest Posts - Color Chart - Smilies
05-03-22 06:01:28 AM
Jul - Posts by MarIO0
Pages: 1 2 3
MarIO0
Member
Level: 16


Posts: 21/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 05-26-11 09:57:07 AM, in Help/Questions about Toad's Tool 64 and SM64 hacking Link
I'm trying to parse the M64 ROM, but I'm having a problem with segment mapping:

(This is about the normal ROM, but I have the same problem with the extended ROM).

At offset 0x00219BC0, there's the following geometry command:




15 04 00 00 02 01 1E D8
According to the doc (and it seems to work in other cases), it means:
Load polygon data from segment 0x02 at offset 0x011ED8, with drawing later 0x04.



The problem is, segment 0x02 is not mapped. To prove that it's not a bug in my program, I tried the following: Since the only commands that load banks are 0x17, 0x18 and 0x1A, and they all have the format (with segment 0x02);




XX 0C 00 02 00 XX XX XX 00 XX XX XX



Searching with 0C 00 02 00 should find the command that loads it, but it doesn't.

So, the question is: Where's segment 0x02 defined? I'm guessing it's hardcoded or loaded with some undocumented command...

MarIO0
Member
Level: 16


Posts: 22/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 05-26-11 02:34:17 PM, in Help/Questions about Toad's Tool 64 and SM64 hacking Link
Thanks! That was a clear and useful answer. I wasn't even expecting a reply to this posting in the middle of an ask-anything topic
MarIO0
Member
Level: 16


Posts: 23/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 05-28-11 12:15:38 PM, in MariOZMAV - a Super Mario 64 level viewer Link
There's a bug that crashes the program (at least with the latest version of Code::Blocks+MinGW).

On helpers.c, HelperFunc_ScriptLogCommand, the line that reads:


char * CmdTypeText;



Should be:


char CmdTypeText[4];



I'm surprised that some compiler actually manages not to crash the program with this bug.
MarIO0
Member
Level: 16


Posts: 24/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 05-28-11 01:28:02 PM, in Help/Questions about Toad's Tool 64 and SM64 hacking (last edited by MarIO0 at 05-29-11 04:28 PM) Link
Found the right way to parse. It turns 0x0F is just 0x14 bytes (found this in a Cellar Dweller's doc by chance). It didn't work for me previously because I had a bug somewhere else. Here's the fixed parse, for reference:

0x454D54: 0A 01 00 2D 00 64 20 8029AA3C
0x454D60: 04 00 00 00 (Start node)
0x454D64: 0F 00 00 10 00 00 05 DC 09 C4 00 00 05 DC D1 20 80287D30
0x454D78: 04 00 00 00 (Start node)


Most likely solved. But I'd like confirmation of this:
- There's a 0x80 geometry layout command (this seems strange because all other comands are <= 0x20).
- Very rarely, 0x04 and 0x05 geometry layout commands are not followed by 3 zeroes.

EDIT: But in Flatworld Battlefield, the pointer to the 0x80 command is just before the pointed data, so not referenced by the game...



Well, I'm getting really confused... probably something stupid.

I parse the level script instruction 1F08 01 00 0E00073C (start area / load geometry), that starts loading geometry data at ROM 0x454D1C.

So well, after some easy instructions, there's this:
0x454D54: 0A 01 00 2D 00 64 20 8029AA3C
0x454D60: 04 00 00 00 (Start node)
0x454D64: 0F 00 00 10 00 00 05 DC
0x454D6C: 09 C4 00 00 (LOOKS DIFFERENT THAN OTHER 0x09)
0x454D70: 05 DC D1 20 (DOESN'T LOOK GOOD)
0x454D74: 80287D30 (THAT'S A RAM ADDRESS)
0x454D78: 04 00 00 00 (Start node)(OK AGAIN)
More ok instructions...

I'm pretty sure that the 0x0A and 0x04 instructions are OK, and the 0x0F instruction looks like the other 0x0F instructions I've found before, but 0x09 looks already desynched and the next instructions are just wrong.

Can anyone tell me how it that interpreted? Probably obvious, but I can't figure it out (changing 0x0F/0x09 size breaks other things)...

MariOZMAV seems to use the same sizes as me for the opcodes, but I'm not sure if it parses that script so it may be wrong.

EDIT: I'm also thinking 0x0F may be a jump/return instruction, but there are about 100 other 0x0F before and it continues parsing correctly...

EDIT 2: By looking at Flatworld Battlefield, I've found that my interpretation looks like it until the 0x09. And that there's a 0x80 instruction that is 8 bytes (but the doc. says it's just for Toad's Tool...?). That would allow me to parse it. But there's still the weird 0x05, which makes me think something may be wrong...
MarIO0
Member
Level: 16


Posts: 25/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 06-05-11 02:10:50 PM, in Hacking animations (last edited by MarIO0 at 06-05-11 11:15 AM) Link
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: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 06-07-11 09:19:04 PM, in Hacking animations (last edited by MarIO0 at 06-09-11 06:51 PM) Link
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.
MarIO0
Member
Level: 16


Posts: 27/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 07-05-11 11:20:39 AM, in Mario 64 Level Importer (last edited by MarIO0 at 07-05-11 08:21 AM) Link
Originally posted by dsx9069
I'm not totally sure if this question belongs in another thread, but...

How do I find the exact address of a "RAM segment"? I've been going through VL-Tone's docs and keep seeing command structures that end in a "RAM segment" and offset. Are these segments also referred to as ROMbanks? I was looking at Mario's geo-layout data and wanted to locate segment 17h(23 dec), accessed by the jump instruction 02 01 00 00 17 00 2C E0.


RAM segments and ROM banks aren't exactly the same, but closely related.
- A ROM bank is a chunk of the ROM which contains resources (and can be loaded using the 0x17, 0x18 or 0x1A commands).
- A segment address is an identifier which is given to a ROM bank.

Now, on the question: How to find the offset corresponding to a segment? You have to find the command that associated this RAM segment to a ROM bank. If you have a script command dump, you'll find it here. But you probably don't, so here's a trick.

As I said before, the ROM banks are loaded with the 0x17, 0x18 and 0x1A commands. If you look at the documentation and replace the known data, you'll find out that your instruction can be:




170C0017 XXXXXXXX XXXXXXXX
180C0017 XXXXXXXX XXXXXXXX
1A0C0017 XXXXXXXX XXXXXXXX



So open an hex editor and try to find bytes with this format. I did this for you, and here's the only result:

17 0C 00 17 00 12 79 B0 00 12 A7 E0



So, segment 0x17 represents a bank that starts at ROM offset 0x1279B0 and ends at ROM offset 0x12A7E0.

Hope this was useful!
MarIO0
Member
Level: 16


Posts: 28/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 07-06-11 02:34:32 PM, in Mario 64 Level Importer (last edited by MarIO0 at 07-06-11 11:35 AM) Link
It's documented in this post: http://acmlm.no-ip.org/board/thread.php?id=1657&page=4

But it's pretty simple, basically:



0x0041: Specifies the end of the terrain data. It's followed by 2 bytes, I don't know what they mean.

0x0040: Loads vertices.
First there's 2 bytes which specifies the number of vertices. Each vertice has 6 bytes which mean:
2 bytes: X coordinate.
2 bytes: Y coordinate.
2 bytes: Z coordinate.

0x000E, 0x002C, 0x0024, 0x0025, 0x0027, 0x002D: Defines a chunk of terrain with extra data.
First there's 2 bytes which specifies the number of triangles. Each triangle has 8 bytes which mean:
2 bytes: 1st vertex index
2 bytes: 2nd vertex index
2 bytes: 3rd vertex index
2 bytes: Extra data (I think it usually means a direction).

All other types: Defines a chunk of terrain.
First there's 2 bytes which specifies the number of triangles. Each triangle has 6 bytes which mean:
2 bytes: 1st vertex index
2 bytes: 2nd vertex index
2 bytes: 3rd vertex index



The type of the terrain depends on the opcode used to define it. I think there's a list on Dudaw's homepage.
MarIO0
Member
Level: 16


Posts: 29/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 07-06-11 03:01:15 PM, in Mario 64 Level Importer Link
Oh, and a small correction: Banks can also be loaded using the 0x0010 (Load bank and call level script) opcode.
MarIO0
Member
Level: 16


Posts: 30/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 07-13-11 07:57:20 PM, in Mario 64 Level Importer Link
Originally posted by dsx9069
Originally posted by DarkSpacer
I know that Dudaw12 managed to do that in his hack "SM64 Wacky Worlds"...Maybe you should ask him.


I'm not sure what you mean by that. It's one thing to change body parts around between two models that have the same number of nodes...it's another thing to give Toad a behavior that belongs to a model with less nodes...

I would need to know exactly what most of the behavior script codes do (individually). Unfortunately, in the current version of VL-Tone's SM64 behaviors doc (available in one of MM88's threads), most of these codes are undocumented. Only few, like the one that creates sub-objects, are documented.

Nonetheless, I'll ask Dudaw about this.

EDIT: I am also aware of the animation pointer which is a 0x27 command. In fact, it was this particular code that I was playing around with. In one of my attempts to create a goomba-walking Toad, I managed to have Toad's model stay in tact during the animation, but he was somewhat offset from his central coordinates, and he was facing the wrong way.


Most common behavior script commands are documented, with VL-Tone doc + Cellar Dweller's doc you pretty much have it. But you must be aware that a lot of behavior scripts just call a function in game code (MIPS).

As for the behavior changing thing, it's not strange at all that Toad is distorted, since other models likely don't have the same internal structure.You may want to try some more behaviors, but it'd be rare to get it working perfectly.
MarIO0
Member
Level: 16


Posts: 31/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 07-14-11 12:32:50 AM, in Mario 64 Level Importer Link
Also, have a look at http://www.youtube.com/results?search_query=yoshielectron+toad
Specially http://www.youtube.com/watch?v=gEdU4vbnFbU

The distortion is most likely caused by the enemy moving some part of its body. Assigning a behaviour which does not move parts of the body (the shyguy is probably one of those) will likely work.
MarIO0
Member
Level: 16


Posts: 33/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 07-14-11 11:00:17 PM, in Evolving to Mario Galaxy? Link
We know a lot of Mario 64. We've been discovering every little detail in the ROM. With some work, we're able to pretty much edit everything. And this is great. We've had several revolutions, mainly due to the release of Toad's Tool, MusicXML importer and OBJ importer.

But there isn't going to be another revolution. We've hit the limits of the engine. Any new kind of interesting modification will require some in-depth knowledge of MIPS assembly and the Mario 64 engine, and lots of manual work. And this, simply, means that we're stuck.

And as much as we love this game, I think that it's time to move on.

We already have the perfect candidate: Super Mario Galaxy. It's one of the greatest games of all time. The engine, basically, is better than the Mario 64 engine in every aspect, save for the cool glitchyness, but I can live without that. And it works with Dolphin so we can test things easily. Some editing tools already exist, but they're really limited, so there's still a lot to do.

Of course, that's my subjective view, and my interpretation of it. What do you think?

PS: Sorry for the deleted post, I forgot to write the correct title.
MarIO0
Member
Level: 16


Posts: 34/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 08-06-11 04:42:21 PM, in M64Tool - Level exporter (+ documentation) (last edited by MarIO0 at 01-27-13 08:20:00 AM) Link
M64Tool is a level exporter. It wasn't meant to be a level exporter, but that's another story and part of the reason I have lost my interest on Mario 64 modifications.

Right now, it doesn't work *really* well. Most levels and platforms export correctly, but many of the moving/alive objects don't render too well (I suspect this may have to do with some unimplemented stuff like scaling, but behaviour scripts may also play a part). Sometimes huge chunks of the levels are missing (this is probably caused by the objects which are inserted with ID=0, which I don't know what it means... any information about this will be great).

And of couse, since I'm exporting to .OBJ, there are many things that can't work, like billboards.

Anyway, if you want to use it to export levels, the usage is:



./m64tool ROM.z64



If you don't know how to use the command line, just drag&drop the ROM to the program.
You can use a normal ROM or a extended ROM. I have only tested it with a original (unmodified) ROM, but it should work with any ROM as long as it doesn't use any feature not used in the original ROM.

It will create two folders, called "M64_Levels" and "M64_Exports". "levels" will contain the whole levels (note that it will create some duplicate ones, since it'll export the whole level for any reference to it, and some are refered multiple times). "exports" will contain all textures and all collision data found.

Other random things:
- It's cross platform (tested on Windows and Linux).
- I may post an update in some days.
- I will try to implement a viewer or switch to another format to support more things.

DOWNLOAD CURRENT r3.2
download old r3
download old r3 (link broken)
download old r2 (link broken)
download old r1 (link broken)

--- *** --- *** --- *** ---

Anyway, another use you can give to this program is as documentation, as in MAME. There's not really any updated or complete documentation available, and most programs posted here don't come with source. And the ones that do (I'm talking about MariOZMAV) aren't really clean.

The source code is written in the D programming language.

My source code may not be the best, but:
- It works.
- It's pretty complete (can parse level scripts, geometry layout, display lists, animation data, behaviour scripts, collision data and textures).
- It's not really hacky (no special cases).
- It hardly uses any hardcoded data. The only hardcoded offsets are the ones of the entry point banks and the preset models table, all pretty essential in order to get level exporting working.
- It doesn't have too many boilerplate code. I (ab)used D templates in order to auto-generate most parts that would require it.
- It's pretty commented/documented, and includes references to sources and relevant documentation/discussion.

--- *** --- *** --- *** ---

This program is pretty much based on all documentation that I've found around, which is very sparse. Credits go (in no specific order) to messiaen, Nagra, VL-Tone, Cellar Dweller, dudaw, Twili, yoshiman, xdaniel, Michael Tedder and everyone else I'm probably missing.

EXTRA: Download Cellar Dweller's ROM Extender (original host is down)
MarIO0
Member
Level: 16


Posts: 35/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 08-06-11 09:05:17 PM, in M64Tool - Level exporter (+ documentation) Link
Not a virus. Checked with VirusTotal and also nothing, not even a false positive.
MarIO0
Member
Level: 16


Posts: 36/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 08-07-11 04:32:23 PM, in M64Tool - Level exporter (+ documentation) (last edited by MarIO0 at 08-07-11 01:32 PM) Link
Originally posted by Apache Thunder
No problems with my virus scanner so I can attest that it is clean.

Ok tried it and it failed to extract anything.

Here's the error I got:

"object.Exception@m64\binarystream.d(154): Casting failed; probably some limit has been broken."

Here's the error I got when I tried the extended rom instead:

"object.Exception@m64\polygon.d(204): Polygon vertex: Unexpected byte count."


I'm using the US version of the rom (tried both untouched rom and extended rom) and am using this on Windows XP 64-Bit Edition.

So that is my "constructive" feedback on the editor.


Thanks for your feedback.

I have found that the first problem is caused because you have a swapped ROM (extension N64). I've uploaded a version that fixes this.

However, I cannot reproduce your second problem. What kind of extended ROM you have? I have only tried using a ROM extended with VL-Tone's/Cellar Dweller's extender, not the OBJ importer patches or anything.
MarIO0
Member
Level: 16


Posts: 37/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 08-07-11 10:52:54 PM, in M64Tool - Level exporter (+ documentation) Link
The "model with ID=0 not found" message is expected. There are many level script commands which try to insert a model with ID 0, which does not seem to be defined anywhere... probably it means something special. Some parts of some levels are missing and I expect this to be the cause, but I don't know what it actually means.

Anyway, I solved the material problem. I was creating a material each time a texture was selected. Now I reuse them and it looks like the boss battle has gone down to only 7 materials.

Thanks for testing my program, and that image looks great!
MarIO0
Member
Level: 16


Posts: 38/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 08-08-11 10:37:17 PM, in M64Tool - Level exporter (+ documentation) Link
I think that I figured out what the objects with ID=0 mean. Since there are consecutive objects with ID=0 and different behavior addresses, I can only assume that ID=0 means that drawing is handled by the behavior script. And unfortunately, pretty much every single behaviour script is just a call to the game code, which means that those objects will never be rendered.
MarIO0
Member
Level: 16


Posts: 39/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 08-10-11 06:16:54 PM, in M64Tool - Level exporter (+ documentation) Link
The maps should be compatible with the level importer, since I'm just generating a .OBJ file. However, I've never used the level importer, so I have no idea on how easy it'll be to get everything working like in the original again.

(For example, I don't export the terrain types (which are part of the colision map, not of the models). I'm not sure how the OBJ importer handles this).
MarIO0
Member
Level: 16


Posts: 40/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 08-10-11 06:24:02 PM, in Hacking animations (last edited by MarIO0 at 08-10-11 03:27 PM) Link
Wow, great job. That's some progress.
MarIO0
Member
Level: 16


Posts: 41/43
EXP: 19175
For next: 1081

Since: 09-03-09


Since last post: 9.3 years
Last activity: 8.6 years

Posted on 08-11-11 03:28:50 PM, in M64Tool - Level exporter (+ documentation) Link
It rips both. However, it creates a different object name for each model, so if you only want the level geometry, you can use a 3D editor and remove all objects except the first.
Pages: 1 2 3
Jul - Posts by MarIO0


Rusted Logic

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

25 database queries, 51 query cache hits.
Query execution time: 0.195990 seconds
Script execution time: 0.042553 seconds
Total render time: 0.238543 seconds