This post has been edited by Dude: 28 November 2008 - 07:09 PM
SADX model import/export Done right this time
Posted 28 November 2008 - 02:00 PM
Posted 28 November 2008 - 02:22 PM
Posted 28 November 2008 - 04:58 PM
This post has been edited by MIkeTC: 28 November 2008 - 04:59 PM
Posted 04 December 2008 - 05:06 PM
Posted 04 December 2008 - 09:06 PM
This post has been edited by Dude: 11 December 2008 - 06:04 PM
Posted 24 December 2008 - 10:42 PM
Posted 03 January 2009 - 08:18 PM
keyed pointer value 17019504Instances:101137210117751012025The loading function seems to process things in chunks (obviously), and interestingly enough it uses the byte 0x68 to determine where the end of one chunk is, and where the beginning of the next one is. However, it isn't consistent whatsoever, and editing things inside of the chunks isn't doing anything productive at all (even copy-pasting data from similar objects is causing the loader to crash) I think this is where geometry objects that are instanced (ie: more than one copy of exactly the same thing). Also, the examples I listed above are pretty simple, but still confusing the hell out of me. I know it works a little something like this:
chunk markerpointer to seg structunknown (seems to be one byte and two shorts?)chunk markerNow I realize I'm probably the only person who gives a damn about this game, but I'm at a block here with the loading routine. If someone else could take a look into it, I'd be very appreciative.Objects that don't fall under the special use category aren't listed here, but rather go under the collision structure (which is what I'm using for my level edits btw) How the game calculates collision (and also surface properties) is as follows:start with 3 coordinates for an origin. Use the 4th float as a radius, and make a detection sphere using this data. The game constantly checks to see if sonic is inside this sphere, and if he is, it'll run the following surface properties. You can set basically any object to from non-solid to solid by making the flags read 01001080
Collision dataUnfinishedStruct Collision Data 0x24Float X position; //Float y position; //Float z position; //Float Spheresize; //Float Unknown; //Float padding; //Dword Objectpointer; // points to OBJECT structDword Unknown; // Short Unknown flags; // 01Short Surface Flags; // These can hurt sonic, support sonic, take traction, etcUnknown flags0 - no collision1 - default2 - weird alphaSurface flags (first byte)type1x = can land on2x = push3x = push4x = Kill sonic5x = no alpha, no col6x = water7x = lighting8x = Stage Specific on/off (EC footprints)9x = normal surfbehaviorx0 = normalx1 = hurtx2 = low tractionx3 = hurtSurface Flags (second byte)Visibility1x = invisible (still solid)8x = visibleAlpha blendingx0 = normalx1 = blending mode 1x2 = blending mode 2Also, here's some tidbits on the player starts
=========================Spawnpoints - better known as 'player starts', these define where in a map to start the player. Spawn point entries are always 0x14 bytes long=========================short x_rotation; // rotation values might not really be stored here, just a guessshort y_rotation; // short z_rotation; // short segue; // seems to affect how the spawn point is interpreted. Editing this can cause the player to start at 0,0,0float x_position;float y_position;float z_position;And Sonic's 'attack' state. This address jumps around, so I'm not going to list it until I find a pointer address.
00 - completely vulnerable, no jump ball.05 - attack mode, can't be hurt by enemies, but not invulnerable. Jump ball will show if this is active02 - light dash charged and holding, sonic will glow.
Material Struct - keep bugging me to update this, so I'll actually do it================================Byte Blue_Diffuse; // This is the amount of blue light to add to the diffuse (texture) channelByte Green_Diffuse; // This is the amount of green light to add to the diffuse (texture) channelByte Red_Diffuse; // This is the amount of red light to add to the diffuse (texture) channelByte Alpha_Diffuse; // This is the transparency for the texture channelByte Blue_Specular; // This is the gloss or specularity, blue channelBtye Green_Specular; // This is the specularity, red channelByte Red_specular; // This is the specularity, green chanelByte Alpha_specular; // This is the transparency for the specularityFloat unknown; // seems to act like a float most of the timeByte TexID; // this is the pvr to load... not a gbix - I think the gbix is interpreted somewhere in the pvm caching functionByte SomethingImportant; // crashes when put to FFByte unknown2; //Byte unknown3; // seems to be Ax (x being a variable)Byte Spheremap; // first bit - U clamping, second bit - V clamping. Set to 21 to get normal uvs, set to 66 for screen mappingByte EndOfStruct; // always 94edit: More structures added, fixed material struct it was horribly outdated.
This post has been edited by Dude: 03 January 2009 - 08:19 PM
Posted 08 August 2009 - 04:40 PM
Posted 09 August 2009 - 01:06 PM
A bit of Googling reveals it's Castlevania Symphony of the Night - Bloody Tears. Ta =P