Line 626: |
Line 626: |
| <pre> | | <pre> |
| struct folder_entry { | | struct folder_entry { |
− | u32 parent_folder_index; | + | u32 parent_folder_index; // stores entry count for dummy folders; 0 for the root folder (entry[1]) |
− | u8 filename[0x10]; | + | u8 filename[0x10]; // "b" for dummy folders; "" for the root folder (entry[1]) |
− | u32 folder_index; | + | u32 next_folder_index; // 0 if the last folder, or a dummy folder |
− | u32 unk1; | + | u32 first_sub_folder_index; // 0 if has no sub folder, or a dummy folder |
− | u32 last_file_index; | + | u32 first_sub_file_index; // 0 if has no sub file(?), or a dummy folder |
− | u32 unk3; | + | u32 unk; // flags? always 0? |
− | u32 unk4; | + | u32 next_dummy_folder_index; // 0 if the last dummy folder; unknown (often 0) if not a dummy folder |
| } | | } |
| </pre> | | </pre> |
Line 639: |
Line 639: |
| <pre> | | <pre> |
| struct file_entry { | | struct file_entry { |
− | u32 parent_folder_index; | + | u32 parent_folder_index; // stores entry count for dummy files |
− | u8 filename[0x10]; | + | u8 filename[0x10]; // "\x01\x15" for dummy files |
− | u32 index; | + | u32 next_file_index; // 0 if the last file, or a dummy file |
− | u32 unk1; // magic? | + | u32 unk1; // looks like time stamp? 0 if a dummy file |
− | u32 block_offset; | + | u32 block_offset; // 0 if a dummy file |
− | u64 file_size; | + | u64 file_size; // 0 if a dummy file |
− | u32 unk2; // flags? | + | u32 unk2; // flags? |
− | u32 unk3; | + | u32 next_dummy_file_index; // 0 if the last dummy file, unknown (always zero?) if not a dummy file |
| } | | } |
| </pre> | | </pre> |
| | | |
− | The first entry in both tables is the count of the table, the parent directory index will be the amount of table rows. The root includes itself, so there are the amount - 1 (minus one) folders in the root directory (or files). The entries that follow after the root are the actual folders/files.
| + | Both table contains some "dummy" entries, which are probably left there when deleting files/folders, reserved for future use. The first entry of the two tables are always a dummy entry. |
| | | |
| Reading the files out is as simple as taking the file base offset and adding (block_offset * 0x200) to it. | | Reading the files out is as simple as taking the file base offset and adding (block_offset * 0x200) to it. |