#include #include // 5D8120 building_nt // 5D5AA0 CCustomCVBuildingPipeline__vucode 0 // 5D8150 CCustomCVBuildingDNPipeline__vucode 0 // 5E0710 CCustomCVBuildingEnvMapPipeline__vucode // 5E1FD0 CCustomCVBuildingDNEnvMapPipeline__vucode // 5E62D0 CCustomCVBuildingUVAPipeline__vucode 0 // 5E89D0 CCustomCVBuildingDNUVAPipeline__vucode 0 // 5DA950 vehicle_nt // 5DA980 CCustomCarPipeline__vucode 0 1 2 // 5CE630 CCustomCarEnvMapPipeline__vucode // 5DD580 skin_nt // 5DD5B0 CCustomSkinPedPipeline__vucode // 5D1F50 grass_nt // 5D1F80 grass // 5CBD60 water_nt // 5CBD90 water_0 // 5CCC40 water_1 // 5E5390 water_2 // 5E3910 water_3 char buf[16*1024]; void writePacket(FILE *inf, FILE *outf) { int *tag; int qwc, wc, num, addr, vifcode; int *p; tag = (int*)buf; fread(tag, 16, 1, inf); printf("%08x %08x %08x %08x\n", tag[0], tag[1], tag[2], tag[3]); qwc = tag[0] & 0xFFFF; fread(buf+16, qwc*0x10, 1, inf); p = (int*)buf; p += 2; // skip tag wc = qwc*4 + 2; printf("c: %x %x %x\n", qwc, wc, *p); while(wc--){ vifcode = *p++ & 0x7F000000; switch(vifcode){ case 0x4A000000: num = (p[-1] >> 16) & 0xFF; if(num == 0) num = 256; addr = p[-1] & 0xFFFF; fseek(outf, addr*8, 0); printf("%08x %x %x %x ", p[-1], num, addr, wc); fwrite(p, num*8, 1, outf); p += num*2; wc -= num*2; printf("%x\n", wc); break; default: printf("%08x\n", p[-1]); break; } } } void extract(FILE *f, int offset, char *out) { FILE *outf; if(outf = fopen(out, "wb"), outf == NULL) return; fseek(f, offset, 0); writePacket(f, outf); } int main(int argc, char *argv[]) { FILE *f; if(argc < 2) return 1; if(f = fopen(argv[1], "rb"), f == NULL) return 1; //extract(f, 0x5D8120, "sa_building.bin"); //extract(f, 0x5DA950, "sa_vehicle.bin"); //extract(f, 0x5DD580, "sa_skin.bin"); // extract(f, 0x5D1F50, "sa_grass_nt.bin"); // extract(f, 0x5D1F80, "sa_grass.bin"); // extract(f, 0x5CBD60, "sa_water_nt.bin"); // extract(f, 0x5CBD90, "sa_water_0.bin"); // extract(f, 0x5CCC40, "sa_water_1.bin"); // extract(f, 0x5E5390, "sa_water_2.bin"); // extract(f, 0x5E3910, "sa_water_3.bin"); extract(f, 0x5D8120, "building_nt.bin"); extract(f, 0x5D5AA0, "CCustomCVBuildingPipeline.bin"); extract(f, 0x5D8150, "CCustomCVBuildingDNPipeline.bin"); extract(f, 0x5E0710, "CCustomCVBuildingEnvMapPipeline.bin"); extract(f, 0x5E1FD0, "CCustomCVBuildingDNEnvMapPipeline.bin"); extract(f, 0x5E62D0, "CCustomCVBuildingUVAPipeline.bin"); extract(f, 0x5E89D0, "CCustomCVBuildingDNUVAPipeline.bin"); extract(f, 0x5DA950, "vehicle_nt.bin"); extract(f, 0x5DA980, "CCustomCarPipeline.bin"); extract(f, 0x5CE630, "CCustomCarEnvMapPipeline.bin"); extract(f, 0x5DD580, "skin_nt.bin"); extract(f, 0x5DD5B0, "CCustomSkinPedPipeline.bin"); extract(f, 0x5D1F50, "grass_nt.bin"); extract(f, 0x5D1F80, "grass.bin"); extract(f, 0x5CBD60, "water_nt.bin"); extract(f, 0x5CBD90, "water_0.bin"); extract(f, 0x5CCC40, "water_1.bin"); extract(f, 0x5E5390, "water_2.bin"); extract(f, 0x5E3910, "water_3.bin"); //extract(f, 0x567140, "bully.bin"); fclose(f); }