<- 1  -   of 75 ->
^^
vv
List results:
Search options:
Use \ before commas in usernames
And it's also filled with fog during most of the fight, and I didn't mean minor as in size or events, I meant minor as in frequency of visitation, as I quite clearly said.
Quarantine Cave is a huge setpiece... it makes no sense to claim it's minor or unimportant just because you don't have to revisit it very many times. By that logic Artifact Temple isn't very important either because you only have to visit it once per game. I really doubt that was Retro's thought process.
Parax, that wasn't what I was claiming, and the conversation is done.
Any plans for Metroid Prime 2 multiplayer hacking? I'm curious to see if singleplayer enemies can be placed in multiplayer maps and attack players.
I don't believe there's any difference in how multiplayer maps are handled compared to single player maps, so that should be totally possible. Miles actually did a little screwing around with multiplayer a few months ago:

I'm assuming messing with multiplayer is lower on the priorities atm.
Edit history:
Aruki: 2014-10-19 07:09:14 pm
Aruki: 2014-10-19 07:07:40 pm
Considering it's not really any different from messing with single player it's in the exact same place on the priorities as single player. Tools for hacking single player = tools for hacking multiplayer.

PWE can already open multiplayer maps just fine, actually, though there's not much to see since Echoes support is so basic right now.

I guess I should clarify personally my focus is on Prime 1, but once I start messing with Prime 2 further I'll likely end up looking at both single player and multiplayer.
Quote from a cow that likes cookies:
I'm curious to see if singleplayer enemies can be placed in multiplayer maps and attack players.

I've tried fighting Emperor Ing with two players before, and IIRC it only reacted to Player 1. If all enemies are like that then it'll be more complicated than just putting them in the multiplayer maps.
Edit history:
Aruki: 2014-11-01 10:36:12 pm
In other things-that-no-one-ever-noticed-before-and-are-totally-a-big-deal-I-swear news, this random red crystal in Monitor Station has a glitched material! It's transparent, but it erroneously doesn't have the flag set that tells the game it's transparent, which means the game isn't doing any depth sorting with it, and since it writes to the depth buffer, it means any objects behind the crystal won't be drawn, since the game thinks they're obscured. Notice how the morph ball, the lava, and the bridge aren't being drawn behind the crystal, but you can see terrain. It's actually pretty hard to look at objects through the crystal normally since it's so small and low to the ground, which is probably why no one noticed before.



edit: more accurate explanation

I swear I'll have more interesting things to post about soon
Edit history:
Aruki: 2014-10-27 06:46:13 am
Aruki: 2014-10-27 06:27:50 am
Small update... I recently took the time to figure out how DKCR's CMDL format works. Funny enough, it actually taught me a couple things about Prime 1's CMDL format:

1. The third value, the one that I have marked down as "format", is probably a set of bit flags. DKCR has a similar value in about the same spot, except a lot more flags are used, so it's more obvious what it is; Prime seems to only use three bits. So out of those three, it seems bit 3 enables the short UV array (more on that in a minute), bit 2 enables normals to be stored as floats instead of shorts, and I dunno what bit 1 does. Makes me wonder if there are any unused flags that toggle more settings; will probably investigate a bit at some point later. No pun intended.

2. The empty section that appears between UVs and submesh offsets is actually a second UV array, like MREA has. Every mesh always tracks two separate UV arrays, provided bit 3 is set - the first one floats, the second one shorts. MREA uses the second UV array for lightmaps. With CMDL, though, there are no models that use that array - not even models that have lightmaps - so it's always empty. I assume a CMDL could actually use that array by toggling the relevant bit on the materials, like how MREA uses it. In DKCR, it's actually fairly common for CMDLs to use the short UV array and leave the float one empty instead... this confused me quite a bit til I realized what was going on.

One other little neat note is I actually created what is AFAIK the first custom CMDL today :P It hasn't been tested ingame, but nonetheless, here it is! I opted to give it a very simple material for now. Which doesn't even work properly. It's supposed to be red. Oh well...

EDIT: Does anyone have any opinions as to what formats would be best to import/export custom assets from? I used OBJ to convert that box model, but I'd rather use a more robust format in the future. The main problem with OBJ is it doesn't support rigs. Best option I've heard so far is FBX. Same question for animations as well; I have no idea what common animation formats there are.
I've played with Collada but that gets into the mess of dealing with XML. Since you are working in C# maybe it won't be so bad but I really hate all of the C++ XML libraries. It's an interchange format so don't expect it to be fast but nearly all of the modern 3d tools can import and export to it.
I'm using C++ and I'm already using XML for object properties, but from what I've heard Collada is a huge pain to support because nobody respects the standards for it.
Edit history:
Ntsc: 2014-10-27 06:43:00 pm
Ntsc: 2014-10-27 06:42:09 pm
Damn, well it probably isn't that bad if you are writing an exporter since you can probably find the lowest common denominator supported by the common editors but I'm guessing you want import from whatever format as well for replacing. Sorry I don't have any other suggestions. I've only worked with the Maya DAG API and then Collada.
Edit history:
Aruki: 2014-10-30 05:18:08 am
Aruki: 2014-10-30 05:14:38 am
Aruki: 2014-10-30 05:05:03 am
Aruki: 2014-10-28 10:58:34 pm
Aruki: 2014-10-28 10:56:53 pm
Aruki: 2014-10-28 10:56:40 pm
So, on the submesh headers, following the primitive table size value I think we have this:

Code:
u32 unknown1; // always 0?
u32 unknown2; // always 0?
u32 extra_data_size; // in bytes; always 0x0 in CMDL, 0x18 in MREA
float unknown3[3]; // normalized vector; unsure of the purpose
u8 extra_data[]; // generally used to set an AABB for the submesh on MREA


So if that's correct, that means the geometry format is actually identical, not just similar, between CMDL and MREA and doesn't need to be handled differently for each format. Yay for that!

I'm gonna update my previous posts with the new info as well.

EDIT: I figured out what the value in the bottom three bits of the primitive flag is. It turns out it has nothing to do with transparency or blending type. It's one of the arguments to GX_Begin(), vtxfmt. It specifies one of eight vertex attribute formats (see GX_SetVtxAttrFmt()), which I believe Retro has hardcoded to a few possible presets. We know the game uses 0, 1, and 2; 0 indicates float normals and 1 indicates short normals. No clue what 2 specifies; only thing different about those as far as I know is the short UV array being used.

EDIT 2: Yeah, so what's different about format 2 is tex0 is set to use s16 instead of f32. This kind of explains why there was a pattern with add-blended stuff... add-blended stuff doesn't use lightmaps, so they would get set to use format 1, while anything opaque/alpha-blended does use lightmaps, and therefore needs format 2.

EDIT 3: For anyone interested, here is how the three vertex attribute formats are set up
Quote from Paraxade:
Does anyone have any opinions as to what formats would be best to import/export custom assets from? I used OBJ to convert that box model, but I'd rather use a more robust format in the future. The main problem with OBJ is it doesn't support rigs. Best option I've heard so far is FBX. Same question for animations as well; I have no idea what common animation formats there are.


Unreal .psk/.psa skeletal meshes/animations perhaps... or maybe Valve Studiomdl Data (.smd)
Edit history:
Antidote: 2014-10-30 10:49:19 pm
The problem with PSK/PSA is that it requires skinning information, which we can't currently assign easily (fuck you PAS4, you are the bane of our existence)

The most robust format would probably be DAE, most 3D software support it, including 3DS Max and Blender. I think Maya does as well (it would make sense being an autodesk product)
I'm asking about what formats would be best assuming everything has been cracked, to clarify.
Edit history:
Antidote: 2014-10-30 11:07:29 pm
Antidote: 2014-10-30 11:06:05 pm
Antidote: 2014-10-30 11:05:40 pm
Antidote: 2014-10-30 11:05:03 pm
Antidote: 2014-10-30 11:03:57 pm
Antidote: 2014-10-30 11:03:41 pm
Antidote: 2014-10-30 11:00:56 pm
I'd go with Collada DAE, since you can export an entire scene that way, I believe it also allows you to link to separate models externally.

edit:
In reference to what Parax said about the primitive flag, we've determined that it's most likely a GX display list, as it fairly closely matches the code example provided in the SDK:
Code:
u8 OneTriDL[] ATTRIBUTE_ALIGN(32) =
{
    (GX_DRAW_QUADS | GX_VTXFMT0),    // command, primitive type | vat idx
    0, 36,    // number of verts, 16b
    8, 0, 7, 0, 2, 0, 3, 0,    // quad 0
    1, 1, 2, 1, 7, 1, 6, 1,    // quad 1
    1, 2, 0, 2, 9, 2, 10, 2,    // quad 2
    4, 1, 1, 1, 10, 1, 11, 1,    // quad 3
    1, 2, 12, 2, 13, 2, 2, 2,    // quad 4
    2, 0, 13, 0, 14, 0, 5, 0,    // quad 5
    18, 2, 15, 2, 16, 2, 17, 2,    // quad 6
    20, 1, 17, 1, 16, 1, 19, 1,    // quad 7
    20, 0, 21, 0, 18, 0, 17, 0,    // quad 8
    GX_NOP, GX_NOP, GX_NOP, GX_NOP, GX_NOP, GX_NOP, GX_NOP, // pad
    GX_NOP, GX_NOP, GX_NOP, GX_NOP, GX_NOP, GX_NOP, GX_NOP, // pad
    GX_NOP, GX_NOP, GX_NOP, GX_NOP, GX_NOP, GX_NOP, GX_NOP // pad to 32B
};
Edit history:
Antidote: 2014-10-31 10:50:52 pm
Quote from Paraxade:
One other little neat note is I actually created what is AFAIK the first custom CMDL today :P It hasn't been tested ingame, but nonetheless, here it is! I opted to give it a very simple material for now. Which doesn't even work properly. It's supposed to be red. Oh well...


I beat you by about 3 months :P
Went spelunking through a disassembly of the demo.

Code:
struct PASDatabase
{
  u32 PAS4_magic;
  u32 PASAnimState_count;
  u32 default_state;

  struct PASAnimState {
    u32 unknown1;
    u32 PASParmInfo_count;
    u32 PASAnimInfo_count;

    struct PASParmInfo {
      EParmType type;
      u32 unknown2;
      float unknown3;
      // two values of the type specified by type
    };
  
    struct PASAnimInfo {
      u32 unknown4;
      // There is one value here per PASParmInfo instance. The type of each value is the type specified by the corresponding PASParmInfo's type value.
    };

  };
};

enum EParmType {
  Int32 = 0,
  Uint32 = 1,
  Real32 = 2,
  Bool = 3,
  Enum = 4
};


With that we can FINALLY parse ANCS files! That means I can finally display the correct models for most objects in the editor. Before, Baby Sheegoths looked like tiny adult Sheegoths, Shadow Pirates and Beam Troopers looked like regular Space Pirates, Phazon Elite looked like a regular Elite, etc... now they don't!




(crappy bottom shot, sorry; wanted to show Phazon Elite + Shadow Pirates)

It also means it's finally feasible to try exporting skinned models.

I have no idea what most of the stuff in the PAS database actually does, so if anyone wants to experiment with it now that the structure is known be my guest.

Hope you're happy Antidote :P
Edit history:
Antidote: 2014-11-09 09:37:59 pm
Nice :D, Now i'm going to start really hacking Prime now!!
That float is most likely going to be angle in degrees, because the most common values I've seen fit within 0-360
If you could export the skins, would it be possible for a texture pack project to begin? Not like this game really needs it, but still.
Skins are how the model is rigged to the skeleton for animation. It's completely unrelated to textures. Custom textures have been possible for a very long time already.
As, Paraxade says skinning == animation, the term was originally used for texturing models, but it was repurposed for animation when morph-target animation became a thing.
Oh. I should probably just stay out of this thread.