This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
kirby64_the_crystal_shards:level_settings_blocks [2020/05/27 12:19] jesusyoshi54 |
kirby64_the_crystal_shards:level_settings_blocks [2020/08/18 16:11] jesusyoshi54 [Camera&Kirby Nodes] |
||
---|---|---|---|
Line 110: | Line 110: | ||
==== Normal Groups ==== | ==== Normal Groups ==== | ||
- | The normal groups is a list that matches each normal to a triangle. It is formed in pairs with the first item being the index of the normal, and the second item being the index of the triangle. | + | The normal groups are a binary space partition tree of the level normals and corresponding triangles associated with those normals. Each normal group represents a node in the tree, and has a right and left child based on whether the ensemble of triangles is in front or behind the parent node. |
- | Normal groups are sorted by polygon index. Only floors & ceilings are referenced by the normal groups, walls are given the first index of the normals list (-1,-2,-3,-4). | + | The first index of the normal group is (-1,-2,-3,-4), the search through the tree starts at the last member in the array, indices of zero refer to leaf nodes. |
<code c> | <code c> | ||
Line 118: | Line 118: | ||
{ | { | ||
/*0x0*/ u16 Normal_Index; | /*0x0*/ u16 Normal_Index; | ||
- | /*0x2*/ u16 Next_Norm_Group; | + | /*0x2*/ u16 Left_Child; |
- | /*0x4*/ u16 Unk; | + | /*0x4*/ u16 Right_Child; |
/*0x6*/ u16 Tri_Cell_Index | /*0x6*/ u16 Tri_Cell_Index | ||
}; | }; | ||
Line 314: | Line 314: | ||
</code> | </code> | ||
+ | For any of the camera values, 9999 can be used to disable reading that value. For a pair, -9999 is used in the first member and 9999 in the second member to disable them. | ||
+ | |||
+ | Certain values are only used if the bool enables them. For example a focus pos is only used if that axis is locked. | ||
+ | |||
+ | The bounds variables basically set limits on how far the camera moves before panning to face kirby instead of scrolling. | ||
<code c> | <code c> | ||
struct Camera_Node | struct Camera_Node | ||
{ | { | ||
- | /*0x00*/ u16 Camera_Type; | + | /*0x00*/ u8 Profile_View; /* Set position to be in line with kirbys side*/ |
+ | /*0x01*/ u8 Pad; /*Unused*/ | ||
/*0x02*/ u8 Lock_X_pos; | /*0x02*/ u8 Lock_X_pos; | ||
/*0x03*/ u8 Lock_Y_pos; | /*0x03*/ u8 Lock_Y_pos; | ||
/*0x04*/ u8 Lock_Z_pos; | /*0x04*/ u8 Lock_Z_pos; | ||
/*0x05*/ u8 unused; | /*0x05*/ u8 unused; | ||
- | /*0x06*/ u8 unk1; | + | /*0x06*/ u8 DisableCamPhi; |
- | /*0x07*/ u8 unk2; | + | /*0x07*/ u8 DisableCamPhiDown; |
- | /*0x08*/ u8 Follow_X_Angle; | + | /*0x08*/ u8 EnableCamTheta; |
- | /*0x09*/ u8 unk4; | + | /*0x09*/ u8 pad2; |
- | /*0x0A*/ u8 unk5; | + | /*0x0A*/ u16 pad3; |
/*0x0C*/ f32 X_Focus_Pos; | /*0x0C*/ f32 X_Focus_Pos; | ||
/*0x10*/ f32 Y_Focus_Pos; | /*0x10*/ f32 Y_Focus_Pos; | ||
- | /*0x14*/ f32 Flag; //usually 9999 | + | /*0x14*/ f32 Z_Focus_Pos; |
/*0x18*/ f32 Near_Clip_Plane; | /*0x18*/ f32 Near_Clip_Plane; | ||
/*0x1C*/ f32 Far_Clip_Plane; | /*0x1C*/ f32 Far_Clip_Plane; | ||
- | /*0x20*/ f32[2] Cam_Y_Pos; | + | /*0x20*/ f32[2] CamRadiusScale; |
- | /*0x28*/ f32[2] Cam_X_Pos; | + | /*0x28*/ f32[2] CamTheta; |
- | /*0x30*/ f32[2] Cam_Z_Pos; | + | /*0x30*/ f32[2] CamRadius; |
/*0x38*/ f32[2] FOV_Pair; | /*0x38*/ f32[2] FOV_Pair; | ||
- | /*0x40*/ f32[2] Lateral_Y_Pos; | + | /*0x40*/ f32[2] CamPhi; |
- | /*0x48*/ f32 Unk6; | + | /*0x48*/ f32[2] Cam_X_LockBounds; |
- | /*0x4C*/ f32 Cam_X_Offset_Locked; | + | /*0x50*/ f32[2] Cam_Y_LockBounds; |
- | /*0x50*/ f32 Unk7; | + | /*0x58*/ f32[2] Cam_Z_LockBounds; |
- | /*0x54*/ f32 Cam_Y_Pos_Locked; | + | /*0x60*/ f32[2] Cam_Yaw_LockBounds; |
- | /*0x58*/ f32[2] Flag2; //mostly a 9999 pair | + | /*0x68*/ f32[2] Cam_Pitch_LockBounds; |
- | /*0x60*/ f32 Focus_Y_Above; //while 0x6 is true | + | |
- | /*0x64*/ f32 Focus_Y_Below; //while 0x6 is true | + | |
- | /*0x68*/ f32 Focus_X_Left; //while 0x6 is true | + | |
- | /*0x6C*/ f32 Focus_X_Right; //while 0x6 is true | + | |
}; | }; | ||
</code> | </code> |