Skip to content

Commit ea7d1a7

Browse files
OlivercometOlivercomet
authored andcommitted
Added support for version 1 Sims TPL files (MySims) and added more type IDs
1 parent 5e42c5b commit ea7d1a7

3 files changed

Lines changed: 156 additions & 23 deletions

File tree

MorcuTool/src/FileTypes/Package.cs

Lines changed: 134 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -201,11 +201,11 @@ public void LoadPackage()
201201
subfiles.Add(newSubfile);
202202
}
203203
}
204-
else //MySims, MySims Kingdom etc, don't know if all the index versions work
204+
else //MySims and MySims Kingdom use these
205205
{
206206
uint indexversion = reader.ReadUInt32();
207207

208-
if (indexversion == 0) //MYSIMS USES THIS, SO YOU NEED TO IMPLEMENT IT
208+
if (indexversion == 0)
209209
{
210210
Console.WriteLine("index version 0");
211211
for (uint i = 0; i < filecount; i++)
@@ -284,6 +284,34 @@ public void LoadPackage()
284284
subfiles.Add(newSubfile);
285285
}
286286
}
287+
if (indexversion == 4)
288+
{
289+
Console.WriteLine("index version 4");
290+
reader.BaseStream.Position += 4;
291+
292+
for (uint i = 0; i < filecount; i++)
293+
{
294+
Subfile newSubfile = new Subfile();
295+
296+
newSubfile.typeID = reader.ReadUInt32();
297+
newSubfile.hash = reader.ReadUInt64();
298+
newSubfile.fileoffset = reader.ReadUInt32();
299+
newSubfile.filesize = reader.ReadUInt32();
300+
newSubfile.uncompressedsize = reader.ReadUInt32();
301+
302+
if (newSubfile.filesize == newSubfile.uncompressedsize)
303+
{
304+
newSubfile.uncompressedsize = 0;
305+
}
306+
307+
subfiles.Add(newSubfile);
308+
}
309+
}
310+
else
311+
{
312+
MessageBox.Show("Unknown index version: "+indexversion);
313+
return;
314+
}
287315
}
288316

289317
//extract files
@@ -362,12 +390,12 @@ public void LoadPackage()
362390
break;
363391

364392
case 0x3681D75B: //LUA MSA
365-
fileextension = ".lua";
393+
fileextension = ".luac";
366394
containslua = true;
367395
break;
368396

369397
case 0x2B8E2411: //LUA MSK
370-
fileextension = ".lua";
398+
fileextension = ".luac";
371399
containslua = true;
372400
break;
373401

@@ -399,11 +427,11 @@ public void LoadPackage()
399427
fileextension = ".buildableregion";
400428
break;
401429

402-
case 0xA5DCD485: //LLMF MSA
430+
case 0xA5DCD485: //LLMF level bin MSA
403431
fileextension = ".llmf";
404432
break;
405433

406-
case 0x58969018: //LLMF MSK
434+
case 0x58969018: //LLMF level bin MSK
407435
fileextension = ".llmf";
408436
break;
409437

@@ -435,6 +463,106 @@ public void LoadPackage()
435463
fileextension = ".phys";
436464
break;
437465

466+
case 0x01661233: //model used by MySims, not the same as rmdl
467+
fileextension = ".model";
468+
break;
469+
470+
case 0x0166038c:
471+
fileextension = ".KeyNameMap";
472+
break;
473+
474+
case 0x015A1849:
475+
fileextension = ".geometry";
476+
break;
477+
478+
case 0x00b552ea:
479+
fileextension = ".oldSpeedTree";
480+
break;
481+
482+
case 0x021d7e8c:
483+
fileextension = ".speedTree";
484+
break;
485+
486+
case 0x8e342417:
487+
fileextension = ".compositeTexture";
488+
break;
489+
490+
case 0x025ed6f4:
491+
fileextension = ".simOutfit";
492+
break;
493+
494+
case 0x585ee310:
495+
fileextension = ".levelXml";
496+
break;
497+
498+
case 0x474999b4: //uncompiled lua script
499+
fileextension = ".lua";
500+
break;
501+
502+
case 0x50182640: //Light set XML MySims
503+
fileextension = ".lightSetXml";
504+
break;
505+
506+
case 0x50002128: //Light set bin MySims
507+
fileextension = ".lightSetBin";
508+
break;
509+
510+
case 0xdc37e964: //xml
511+
fileextension = ".xml";
512+
break;
513+
514+
case 0x2c81b60a: //footprint set MySims
515+
fileextension = ".footprintSet";
516+
break;
517+
518+
case 0xc876c85e: //object construction xml
519+
fileextension = ".objectConstructionXml";
520+
break;
521+
522+
case 0xc08ec0ee: //object construction bin
523+
fileextension = ".objectConstructionBin";
524+
break;
525+
526+
case 0x4045d294: //slot xml
527+
fileextension = ".slotXml";
528+
break;
529+
530+
case 0xcf60795e: //swm
531+
fileextension = ".swm";
532+
break;
533+
534+
case 0x9752e396: //SwarmBin
535+
fileextension = ".SwarmBin";
536+
break;
537+
538+
case 0xe0d83029: //XmlBin
539+
fileextension = ".XmlBin";
540+
break;
541+
542+
case 0xa6856948: //CABXml
543+
fileextension = ".CABXml";
544+
break;
545+
546+
case 0xc644f440: //CABBin
547+
fileextension = ".CABBin";
548+
break;
549+
550+
case 0x5bca8c06: //big
551+
fileextension = ".big";
552+
break;
553+
554+
case 0xb61215e9: //LightBoxXml
555+
fileextension = ".lightBoxXml";
556+
break;
557+
558+
case 0xd6215201: //LightBoxBin
559+
fileextension = ".lightBoxBin";
560+
break;
561+
562+
case 0x1e1e6516: //xmb
563+
fileextension = ".xmb";
564+
break;
565+
438566
default:
439567
Console.WriteLine("Unknown type ID " + subfiles[i].typeID);
440568
Console.WriteLine("and this type ID appears " + GetNumOccurrencesOfTypeID(subfiles[i].typeID) + " times in total.");

MorcuTool/src/FileTypes/Vault.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ public class luaString
2424
}
2525

2626

27-
2827
public void LoadVault() {
2928
using (BinaryReader reader = new BinaryReader(File.Open(filename, FileMode.Open)))
3029
{

MorcuTool/src/Utility/imageTools.cs

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,28 @@ public static List<byte> ConvertToTPL(string filename, byte[] file)
4646
flags = utility.ReverseEndian(BitConverter.ToUInt32(file, pos));
4747
pos+=4;
4848

49-
if (version == 2) //MYSIMS
49+
if (version == 1) //MYSIMS
50+
{
51+
pos = 0x1C;
52+
53+
width = utility.ReverseEndianShort(BitConverter.ToUInt16(file, pos));
54+
pos += 2;
55+
height = utility.ReverseEndianShort(BitConverter.ToUInt16(file, pos));
56+
pos += 5;
57+
58+
imageformat = file[pos];
59+
pos++;
60+
imagecount = utility.ReverseEndian(BitConverter.ToUInt32(file, pos));
61+
pos += 4;
62+
63+
pos += 0x14;
64+
65+
imageoffset = 0x4C;
66+
pos += 4;
67+
68+
imagesize = (uint)(height * width * 4);
69+
}
70+
else if (version == 2) //MYSIMS
5071
{
5172
pos = 0x1C;
5273

@@ -64,7 +85,6 @@ public static List<byte> ConvertToTPL(string filename, byte[] file)
6485

6586
imageoffset = 0x4C;
6687
pos += 4;
67-
File.WriteAllBytes("test.tpl",file);
6888

6989
imagesize = (uint)(height * width * 4);
7090
}
@@ -125,15 +145,6 @@ public static List<byte> ConvertToTPL(string filename, byte[] file)
125145

126146
Array.Copy(file,pos,imageData,0,file.Length-pos);
127147

128-
//List<Byte[]> imagesubblocks = new List<Byte[]>();
129-
130-
131-
// for (int i = 0; i < imagesize / 8; i++)
132-
// {
133-
// imagesubblocks.Add(BitConverter.GetBytes(BitConverter.ToUInt64(file,pos)));
134-
// pos += 8;
135-
// }
136-
137148
//create tpl file byte array
138149

139150
output.AddRange(BitConverter.GetBytes(utility.ReverseEndian(0x0020AF30)));
@@ -166,12 +177,7 @@ public static List<byte> ConvertToTPL(string filename, byte[] file)
166177
output.AddRange(BitConverter.GetBytes(utility.ReverseEndian(0x00000000)));
167178
output.AddRange(BitConverter.GetBytes(utility.ReverseEndian(0x00000000)));
168179

169-
170180
output.AddRange(imageData);
171-
//for (int i = 0; i < imagesize / 8; i++)
172-
//{
173-
// output.AddRange(imagesubblocks[i]);
174-
//}
175181

176182
return output;
177183
}

0 commit comments

Comments
 (0)