[XBox360] Dynasty Warriors 8 (Early Access)

Release and comment on game extractors and other tools here.

Moderators: Dazzy, semory

Site Admin
User avatar
Posts: 7666
Joined: Sat Aug 04, 2012 7:38 pm
Location: Torrance, CA
Custom Rank: Kitty pu tu tu lay!

Re: [XBox360] Dynasty Warriors 8 (Early Access)

Postby semory » Thu Jun 12, 2014 1:10 am

oh and here is my testing code for the data i sent you. sorry it's not python, but it should be easy to follow.

Code: Select all
bool TestNUNO(void)
{
 // pathnames
 using namespace std;
 STDSTRING pathname = TEXT("X:\\WORKSPACE\\[PS3] Sengoku Musou 4\\LINKDATA_B_CHARS\\7834\\");
 STDSTRING savepath = TEXT("X:\\WORKSPACE\\[PS3] Sengoku Musou 4\\LINKDATA_B_CHARS\\7834\\");

 // control point filename
 STDSTRING cpf_name = pathname;
 cpf_name += TEXT("nuno1_cp.bin");

 // influence data filename
 STDSTRING inf_name = pathname;
 inf_name += TEXT("nuno1_inf.bin");

 // vertex buffer filename
 STDSTRING vbf_name = pathname;
 vbf_name += TEXT("vbuffer1.bin");

 // properties
 uint32 n_cp = 0x23; // number of control points
 uint32 n_verts = 0x60; // number of vertices
 uint32 vtxsize = 0x7C; // vertex size in bytes
 uint32 offset1 = 0x00; // vertex offset #1
 uint32 offset2 = 0x10; // vertex offset #2
 uint32 offset3 = 0x24; // vertex offset #3
 uint32 offset4 = 0x34; // vertex offset #4
 uint32 offset5 = 0x44; // vertex offset #5 (indices)

 //
 // create output file
 //

 STDSTRING ofname = pathname;
 ofname += TEXT("output.obj");
 ofstream ofile(ofname.c_str());
 if(!ofile) return error("Failed to create output file.");

 // output obj header
 ofile << "o output" << endl;
 ofile << endl;

 //
 // read control point data
 //

 boost::shared_array<boost::shared_array<real32>> cp_data;
 cp_data.reset(new boost::shared_array<real32>[n_cp]);

 // open control point file
 ifstream cpf(cpf_name.c_str(), ios::binary);
 if(!cpf) return error("Failed to open file.");

 for(uint32 i = 0; i < n_cp; i++) {
     cp_data[i].reset(new real32[4]);
     if(!BE_read_array(cpf, cp_data[i].get(), 4)) return error("Read failure.");
    }

 //
 // read vertex data
 //

 uint32 vb_size = n_verts * vtxsize;
 boost::shared_array<char> vb_data(new char[vb_size]);

 // open vertex buffer file
 ifstream vbf(vbf_name.c_str(), ios::binary);
 if(!vbf) return error("Failed to open file.");

 // read vertex buffer data
 vbf.read(vb_data.get(), vb_size);
 if(vbf.fail()) return error("Read failure.");

 // create vertex buffer stream
 binary_stream bs(vb_data, vb_size);
 uint32 position = 0;

 // read vertex buffer data
 for(uint32 i = 0; i < n_verts; i++)
    {
     // move to offset #1
     bs.seek(position + offset1);
     if(bs.fail()) return error("Stream seek failure.");

     // read vector
     real32 v1[4];
     bs.BE_read_array(&v1[0], 4);
     if(bs.fail()) return error("Stream read failure.");

     // move to offset #2
     bs.seek(position + offset2);
     if(bs.fail()) return error("Stream seek failure.");

     // read vector
     real32 v2[4];
     bs.BE_read_array(&v2[0], 4);
     if(bs.fail()) return error("Stream read failure.");

     // move to offset #3
     bs.seek(position + offset3);
     if(bs.fail()) return error("Stream seek failure.");

     // read vector
     real32 v3[4];
     bs.BE_read_array(&v3[0], 4);
     if(bs.fail()) return error("Stream read failure.");

     // move to offset #4
     bs.seek(position + offset4);
     if(bs.fail()) return error("Stream seek failure.");

     // read vector
     real32 v4[4];
     bs.BE_read_array(&v4[0], 4);
     if(bs.fail()) return error("Stream read failure.");

     // move to offset #5
     bs.seek(position + offset5);
     if(bs.fail()) return error("Stream seek failure.");

     // read indices
     uint08 i1[4]; bs.BE_read_array(&i1[0], 4);
     uint08 i2[4]; bs.BE_read_array(&i2[0], 4);
     uint08 i3[4]; bs.BE_read_array(&i3[0], 4);
     uint08 i4[4]; bs.BE_read_array(&i4[0], 4);
     if(bs.fail()) return error("Stream seek failure.");

     // determine if anchor point
     bool is_anchor = ((v3[0] == 0.0f) && (v3[1] == 0.0f) &&
                       (v3[2] == 0.0f) && (v3[3] == 0.0f));

     // anchor point
     if(is_anchor)
       {
        ofile << "v " << v1[0] << " " << v1[1] << " " << v1[2] << endl;
       }
     // non-anchor point
     else
       {
        // first control point index set
        uint32 cpidx1 = i1[0];
        uint32 cpidx2 = i1[1];
        uint32 cpidx3 = i1[2];
        uint32 cpidx4 = i1[3];

        // first control point set
        auto cp1 = cp_data[cpidx1];
        auto cp2 = cp_data[cpidx2];
        auto cp3 = cp_data[cpidx3];
        auto cp4 = cp_data[cpidx4];

        // cp1 * v1[0] + cp2 * v1[1]
        real32 x = (cp1[0] * v1[0]) + (cp2[0] * v1[1]) + (cp3[0] * v1[2]) + (cp4[0] * v1[3]);
        real32 y = (cp1[1] * v1[0]) + (cp2[1] * v1[1]) + (cp3[1] * v1[2]) + (cp4[1] * v1[3]);
        real32 z = (cp1[2] * v1[0]) + (cp2[2] * v1[1]) + (cp3[2] * v1[2]) + (cp4[2] * v1[3]);
        real32 w = (cp1[3] * v1[0]) + (cp2[3] * v1[1]) + (cp3[3] * v1[2]) + (cp4[3] * v1[3]);

        ofile << "v " << x << " " << y << " " << z << endl;
        cout << "v " << x << " " << y << " " << z << " " << w << endl;
       }

     // update position
     position += vtxsize;
    }

 return true;
}

};

#endif

Site Admin
User avatar
Posts: 7666
Joined: Sat Aug 04, 2012 7:38 pm
Location: Torrance, CA
Custom Rank: Kitty pu tu tu lay!

Re: [XBox360] Dynasty Warriors 8 (Early Access)

Postby semory » Thu Jun 12, 2014 1:14 am

BTW, how easy is it to extract the G1M files from DW8:XL Steam version? Is there a tool for it? I might buy the game if it is possible to modify certain things like data in G1M files. It would help a lot. But if the stuff is zlibbed and repacking is hard or impossible, screw it lol.

Site Admin
User avatar
Posts: 7666
Joined: Sat Aug 04, 2012 7:38 pm
Location: Torrance, CA
Custom Rank: Kitty pu tu tu lay!

Re: [XBox360] Dynasty Warriors 8 (Early Access)

Postby semory » Thu Jun 12, 2014 1:26 am

He he he at one time I was even thinking about e-mailing Hideyuki Kan (the lead programmer) for hints but he is not a public figure like say Katsuhiro Harada is from Tekken.

Posts: 16
Joined: Wed Jun 04, 2014 10:04 pm
Custom Rank: Aaaa

Re: [XBox360] Dynasty Warriors 8 (Early Access)

Postby SaintLouisX » Thu Jun 12, 2014 1:30 am

It's easy, I made tools for extracting/importing files a long time ago. Including full unzipping and re-zipping and extracting all textures from the game (didn't include models, but that's easy to add in). Your one should work too if you just reversed the endian. I don't change the filenames to add its extension though, or split the files into separate folders or anything like that. That may be useful, but looking around a whole bunch of folders for specific file numbers and seeing where data changes happen is harder when the files are split up.

extract: http://pastebin.com/Bx93uZ7C - Run it from the same folder as LINKDATAs. Specify any argument to have it extract textures.
import: http://pastebin.com/pRKVSDji - Run it from the same folder as LINKDATAs, specify the folder to import files from. Files should be named with their file num, can be . anything.

They should work for any DW game. If you reverse the endians for the unpacks then you can use it for console too. Although for the import you would need to edit the file split locations.

I did have to disable the re-zipping for importing because it was making the game crash. The code itself works perfectly fine, it's just because of the first dword of the file. I *think* it's the output buffer, but for re-importing I just zipped the whole file and set that dword to be the nearest 0x10000, but unfortunately that was causing me divide by zero errors on some files. Some worked, some made the game crashed, so yeah dunno. I was planning to re-write it to split the file into streams of smaller sizes like the game has, but I don't know the criteria they have for splitting the file up.

Either way it's not needed, you can just specify the zip qword to be 0x0 in the index, but it's there if you figure out that first dword.

Suzumiya's tool can also view models, partly: http://i.imgur.com/LwDeG5a.jpg

It can't export/import models, but you can export/import any textures really easily.

Site Admin
User avatar
Posts: 7666
Joined: Sat Aug 04, 2012 7:38 pm
Location: Torrance, CA
Custom Rank: Kitty pu tu tu lay!

Re: [XBox360] Dynasty Warriors 8 (Early Access)

Postby semory » Thu Jun 12, 2014 3:31 am

awesome thanks. i think i will pick up the pc version of game but not right now funds are low lol (anniversary vacation this week and beach hotels are expensive lmao).

Moderator
User avatar
Posts: 6513
Joined: Sun Aug 19, 2012 9:59 am
Location: The Land of the Free
Custom Rank: Fappy Bird

Re: [XBox360] Dynasty Warriors 8 (Early Access)

Postby iheartibuki » Thu Jun 12, 2014 12:39 pm

I smell some cheeky pow pow! :ggl: :LOL:
"They’re not only moron but also Galapagosian Lolita Complexed Chicken."





Posts: 18
Joined: Thu Jan 21, 2016 4:35 pm

Re: [XBox360] Dynasty Warriors 8 (Early Access)

Postby havie » Thu Jan 21, 2016 5:32 pm

semory wrote:For all members of the Porters group, here is early access to Dynasty Warriors 8. Note that this ripper only works with the XBox360 version of the game and not the PS3 version (yet).

Questions and comments go here for now. In a couple weeks, after testing, I will make this download public for everyone.

Instructions:

1. Use the same password used for the Warriors Orochi 3 download.
2. Place the exe and dll file in the same directory where the LINKDATA.IDX files are.
3. Run the exe.
4. Come back an hour later.
5. Use Noesis to browse through OBJ files.
6. If you see something you like, use the SMC import script to load the model and bones.

Models are in folders 0018 - 1749.
Some miscellaneous weapon models are in folders 6704 - 6754.

Thanks to all those interested who help test before my releases,
Steven



the DW8extract.7z says its archive is corrupt?

Previous

Return to Releases

Who is online

Users browsing this forum: No registered users and 1 guest