Jump to content
 

WWE GAMES / YUKES PAC Extractor v1.0


Recommended Posts

Posted (edited)

Well, I know DRAVEN was supposed to make a thread about it, but I don't know if he's seen Brien's post yet, so I think I'm just going to make a thread about it :xmassmiley:

This file is only allowed to be hosted at XeNTaX.com or 360Haven.com unless you give a link back. Posting this readme unedited with the download is sufficient enough.

Download it from XeNTaX Link at bottom of this post..

Here is the README file -

WWE GAMES / YUKES PAC Extractor v1.0 by Brien L. Johnson AKA brienj, President and Owner of XHP Creations

This file is only allowed to be hosted at XeNTaX.com or 360Haven.com unless you give a link back. Posting this readme unedited with the download is sufficient enough. Requests to host elsewhere can be made to brienj@insightbb.com

First of all, I want to give full credit and thanks to Luigi Auriemma for his source code to decompress Yukes BPE files.

This program opens PAC files from the Yukes wrestling games (Xbox versions), including the WWE13 PAC files which are compressed.

Prerequisites:

You MUST have plenty of space on your HD to extract all the files. Expect anywhere from 4 to 5 times the size of the initial PAC file size.

Changelog:

v1.0 - Initial Release

To Do List:

Use some of the code from this project to make a PAC file extractor/rebuilder.

Instructions:

Just start the program and open a PAC file, then choose the directory where you want the files extracted to. If the program says it completed, but only extracted 0 files, check the box to force the newer EPK8 format. The difference between the older and newer formats, is the length of the names in the header. In the older ones, the name is 4 bytes long, in the newer ones, the name is 8 bytes long. The only ones it can not auto-detect, are the newer PAC files with only one entry. There have been checks put in the auto-detector to prevent trying to extract a very large file if it is read incorrectly, and then it will re-run it as the newer style. On PAC files with only one entry though, it can't auto-detect it correctly. It shouldn't lock-up if it reads an older PAC file as a newer one, but there is the slight possibility that it could hang, and why it always tries the old format first. I've figured out some more info on how to detect the different formats, but haven't recoded the program with the detection, because this program will be replaced with a PAC file extractor/rebuilder in the near future, so this program is just to hold you over until that gets released, so you can start exploring what is contained in the PAC files.

Extra Instructions:

The program will overwrite all files with the same name, so if you extract the PAC file a second time, it will overwrite the files it exracted the first time. Since the program can extract THOUSANDS of files, it's ridiculous for it to ask if it can overwrite anything, so it does it by default. After the files are extracted, wait until the program tells you it is completely done processing the files before you start opening files in a hex editor or whatever. It goes through and renames files appropriately and cleans-up some left over files from the extracton process.

This comes with additional source code with comments for a "decompressBPE" program and a "YukesBPE.dll" file to use in your own programs. For people that do not know C++ and program in .NET, I've also included a "SampleYukesBPEProgram" with source code that shows you how to use the "YukesBPE.dll" file with your .NET program. People that program in C/C++ should not need any help, although they can use the pre-compiled "YukesBPE.dll" file if they wanted, the exports are listed in the "SampleYukesBPEProgram".

If you need any help with this program, just go to http://www.xhpcreations.com and there are links to the XHP Creations Twitter and Facebook page where I can help if needed or post your questions in the topic for the program at XeNTaX.com or 360Haven.com. If you like this work and feel like donating anything, my PayPal email is brienj@insightbb.com

Hope you enjoy!

The Source Code from the "decompressBPE" program -



#include <stdafx.h>
#include <windows.h>

// include all of the following in all target environments
// using <cstring> instead of <string> to be compatible with newer g++
#include <cstring>
#include <fstream>
#include <iostream>
#include <stdio.h>

// if this isn't included, you would have to type 'std::ifstream' instead of just 'ifstream' for example
// lazy way to do it, but it's a small program
using namespace std;

// declare constant variables
const char *MAGIC_HEADER = "BPE ";

// function prototypes
static int xgetc(unsigned char **in, unsigned char *inl);
int yukes_bpe(unsigned char *in, int insz, unsigned char *out, int outsz, int fill_outsz);

// only include for windows versions to use the function that most computer geeks that use the console HATE :)
void ClearScreen();

// program start function
int main(int argc, char* argv[])
{
// declare and initialize the variables used in this function
// will be used to make sure it has the 'magic' of a BPE file
char *magic = new char[4];
// our input buffer
char *inbuffer;
// our output buffer
char *outbuffer;
// used to calculate the compressed size
char *readzsize = new char[4];
// used to calculate the uncompressed size
char *readsize = new char[4];
// compressed size
int zsize;
// uncompressed size
int size;
// difference between size and zsize or (size - zsize)
int fillsize;

// make sure that there are three arguments passed to the program, which are:
// the program name, the input file name, and the output filename
if (argc != 3)
{
// comes here if there are not three arguments

// only include this function call on Windows, to make geeks mad that you cleared out the console contents :)
ClearScreen();

// obligatory fancy ASCII art to show what a geek you are
cout << "\n================================================================";
cout << "\n+++++++++++++==== == == ==== == ==++++++++++++++====";
cout << "\n================== == === ==== == ==== ===================";
cout << "\n=+++++++++++++==== == === ==== == ==== ==++++++++++++++===";
cout << "\n=================== ==== ==== == ==== ===================";
cout << "\n==+++++++++++++===== ===== == ====++++++++++++++==";
cout << "\n=================== ==== ==== == =========================";
cout << "\n===+++++++++++++== == === ==== == ==========++++++++++++++=";
cout << "\n================== == === ==== == =========================";
cout << "\n=== ========= ==== == ==== == ===========++++++++++++++";
cout << "\n== === =======================================================";
cout << "\n= ================================ ===========================";
cout << "\n= ======== = ==== ==== === == === === = ==== ==";
cout << "\n= ======== = == = == = === ======= == == = =";
cout << "\n= ======== ======= ===== === === == = == = === ===";
cout << "\n= ======== ======= ====== === === == = == = ==== ==";
cout << "\n== === == ======= = == = === === == = == = == = =";
cout << "\n=== === ======== ==== === == === === = === ==";
cout << "\n================================================================";

// gives program info and usage instructions
cout << "\n\nYukes BPE Decompress example program";
cout << "\nby Brien L. Johnson of XHP Creations";

// 'argv[0]' is the first argument, which is the name of the program
cout << "\n\nUsage: " << argv[0] << " <inputfile> <outputfile>";
cout << "\n\nWebsite: ";
cout << "\n[url="http://www.xhpcreations.com/"]http://www.xhpcreations.com[/url]";
cout << "\n\nSpecial thanks to Luigi Auriemmma for yuke_bpe.c source code!\n\n";

// return any code that says it didn't complete the task, in this case we use -1 to show an error
return -1;
}
else
{
// comes here if there are three arguments

// open an input filestream named 'file' in binary mode with the second argument value 'argv[1]'
ifstream file(argv[1], ios::in|ios::binary);

// checks if the file is open
if (file.is_open())
{
// make sure the starting file position is at the beginning of file
file.seekg(0, ios::beg);

// read the contents of the first four bytes into 'magic'
file.read(magic, 4);

// use a compare to make sure the first four bytes (char*) of 'magic' match our constant 'MAGIC_HEADER'
if (memcmp(magic, MAGIC_HEADER, 4) != 0)
{
// if they don't match, insult the user for opening a file that isn't a BPE file
cout << "Open a BPE file, you numbskull!";

// return error code
return -1;
}
// continue code since they opened a BPE file

// set the file position to the 8th byte
file.seekg(8, ios::beg);

// read the contents of the next four bytes into 'readzsize'
file.read(readzsize, 4);

// set the file position to the 12th byte
file.seekg(12, ios::beg);

// read the contents of the next four bytes into 'readsize'
file.read(readsize, 4);

// set the value of 'zsize' using the four bytes in 'readzsize'
memcpy(&zsize, readzsize, sizeof(long));

// set the value of 'size' using the four bytes in 'readsize'
memcpy(&size, readsize, sizeof(long));

// they are only four bytes in size, but we can delete 'readzsize' and 'readsize'
// and free the HUGE amount of memory they are using :)
delete[] readzsize;
delete[] readsize;

// initialize input buffer 'inbuffer' to the size of 'zsize', our compressed size
inbuffer = new char[zsize];

// set the file position to the 16th byte
file.seekg(16, ios::beg);

// read the contents of the file of 'zsize' number of bytes into the input buffer 'inbuffer'
file.read(inbuffer, zsize);

// calculate the fillsize
fillsize = size - zsize;

// the all important closing of the file
file.close();
}
else
{
// if the file can't open, we of course assume they are an idiot and insult them again
cout << "\nUnable to open " << argv[1] << " you numbskull. Does the file exist?\n";

// return error code
return -1;
}

// initialize output buffer 'outbuffer' to the size of 'size', our uncompressed size
outbuffer = new char[size];

// call the function which uncompresses the input buffer to the output buffer
// 'inbuffer' and 'outbuffer' are not unsigned, which the function requires, so we cast them correctly
// with 'reinterpret_cast<unsigned char*>'
int x = yukes_bpe((reinterpret_cast<unsigned char*>(inbuffer)), zsize, (reinterpret_cast<unsigned char*>(outbuffer)), size, fillsize);

// open an output filestream named 'file2' in binary mode with the third argument value 'argv[2]'
ofstream file2(argv[2], ios_base::out|ios_base::binary);

// checks if the file is open
if (file2.is_open())
{
// if the file opened, write the changed contents of the output buffer 'outbuffer' to disk
file2.write(outbuffer, size);

// let the person know the file saved correctly
cout << "\nSuccessfully saved " << argv[2] << " to disk.\n";

// return successful code
return 0;
}
else
{
// let the person know that the file couldn't be saved and they were probably an idiot again
cout << "\nCannot write " << argv[2] << " to disk, you knucklehead. Do you have the file opened in your hex editor?\n";

// return an error code
return -1;
}
}
}

// the following two functions for Yukes BPE decompression were written by Luigi Auriemma

static int xgetc(unsigned char **in, unsigned char *inl) {
int ret;
if(*in >= inl) return(-1);
ret = **in;
(*in)++;
return(ret);
}

int yukes_bpe(unsigned char *in, int insz, unsigned char *out, int outsz, int fill_outsz) {
unsigned char stack[512 + 4096];
int c,
count,
i,
size,
n;

unsigned char *inl,
*o,
*outl;

inl = in + insz;
o = out;
outl = out + outsz;

count = 0;
for(;;) {
i = 0;
do {
if((c = xgetc(&in, inl)) < 0) break;
if(c > 127) {
c -= 127;
while((c > 0) && (i < 256)) {
stack[i * 2] = i;
c--;
i++;
}
}
c++;
while((c > 0) && (i < 256)) {
if((n = xgetc(&in, inl)) < 0) break;
stack[i * 2] = n;
if(i != n) {
if((n = xgetc(&in, inl)) < 0) break;
stack[(i * 2) + 1] = n;
}
c--;
i++;
}
} while(i < 256);

if((n = xgetc(&in, inl)) < 0) break;
size = n;
if((n = xgetc(&in, inl)) < 0) break;
size |= (n << 8);

while(size || count) {
if(count) {
count--;
n = stack[count + 512];
} else {
if((n = xgetc(&in, inl)) < 0) break;
size--;
}
c = stack[n * 2];
if(n == c) {
if(o >= outl) return(-1);
*o++ = n;
} else {
if((count + 512 + 2) > sizeof(stack)) return(-1);
stack[count + 512] = stack[(n * 2) + 1];
stack[count + 512 + 1] = c;
count += 2;
}
}
}
if(fill_outsz) { // this is what is wanted by the format
memset(o, 0, outl - o);
o = outl;
}
return(o - out);
}

// the dreaded ClearScreen function which clears all the contents out of the console window, and
// of course it must be included in my program :)
void ClearScreen()
{
HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD count;
DWORD cellCount;
COORD homeCoords = { 0, 0 };

hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );
if (hStdOut == INVALID_HANDLE_VALUE) return;

// get the number of cells in the current buffer
if (!GetConsoleScreenBufferInfo( hStdOut, &csbi )) return;
cellCount = csbi.dwSize.X *csbi.dwSize.Y;

// fill the entire buffer with spaces
if (!FillConsoleOutputCharacter(
hStdOut,
(TCHAR) ' ',
cellCount,
homeCoords,
&count
)) return;

// fill the entire buffer with the current colors and attributes
if (!FillConsoleOutputAttribute(
hStdOut,
csbi.wAttributes,
cellCount,
homeCoords,
&count
)) return;

// move the cursor home
SetConsoleCursorPosition( hStdOut, homeCoords );
}
// not needed for ports to other systems
The Source Code from the "SampleYukesBPEProgram" program -


using System.IO;
using System.Text;
using System.Windows.Forms;
// this is needed to use DLLImport
using System.Runtime.InteropServices;

namespace SampleYukesBPEProgram
{
public partial class Form1 : Form
{
// this is where we load the functions from our unmanaged dll
[DllImport("YukesBPE.dll")]
public static extern int yukes_bpe(byte[] input, int insz, byte[] ouput, int outsz, int fill_outsz);
[DllImport("YukesBPE.dll")]
public static extern int bpefile_open_save(string filename1, string filename2);

// setup a constant string equal to the 'magic' of a BPE file
public const string magicString = "BPE ";

public Form1()
{
InitializeComponent();
}

// event handler for button1 being clicked
private void button1_Click(object sender, EventArgs e)
{
// check that the open and save dialogs were not cancelled and the user selected some filenames
if (openFileDialog1.ShowDialog() == DialogResult.OK && saveFileDialog1.ShowDialog() == DialogResult.OK)
{
// read the file into byte array 'conts'
byte[] conts = ReadFile(openFileDialog1.FileName);

// setup a buffer that will be used to find some values from the file
byte[] buff = new byte[4];

// copy first four bytes of the file to the buffer
Array.Copy(conts, 0, buff, 0, 4);

// checks that the four bytes are equal to the magic string "BPE "
if (Encoding.ASCII.GetString(buff) == magicString)
{
// copy four bytes from the 8th offset to our buffer
Array.Copy(conts, 8, buff, 0, 4);

// makes sure the system BitConverter is Little Endian and reverses the bytes if it isn't
if (!BitConverter.IsLittleEndian)
Array.Reverse(buff);

// get the value of the compressed size from the buffer
int zsize = BitConverter.ToInt32(buff, 0);

// copy four bytes from the 12th offset to our buffer
Array.Copy(conts, 12, buff, 0, 4);

// makes sure the system BitConverter is Little Endian and reverses the bytes if it isn't
if (!BitConverter.IsLittleEndian)
Array.Reverse(buff);

// get the value of the uncompressed size from the buffer
int size = BitConverter.ToInt32(buff, 0);

// reset the buffer to the uncompressed size, this buffer will be changed by the function in the dll
buff = new byte[size];

// compute the fillsize
int fillsize = size - zsize;

// create a new byte array to hold the remainder of the file, which is what we want to actually decompress
byte[] contents = new byte[zsize];

// copy the file contents starting at the 16th byte, where the actual BPE data is contained
Array.Copy(conts, 16, contents, 0, zsize);

// call the 'yukes_bpe' function in the dll which will change the contents of our buffer to the decompressed bytes
// and make sure the function returns the decompressed size, which means it finished successfully
if (yukes_bpe(contents, zsize, buff, size, fillsize) == size)
{
// you should always use a try block when dealing with file I/O
try
{
// write the buffer contents to the name the person chose in the saveFileDialog
WriteFile(buff, saveFileDialog1.FileName);

// tell them it worked
MessageBox.Show("Successfully saved uncompressed file " + saveFileDialog1.FileName);
}
catch
{
// it will come here if the try block failed, meaning there was a problem with the file I/O
MessageBox.Show("There was an error saving " + saveFileDialog1.FileName);
}
}
else
{
// comes here if the yukes_bpe function did not return the decompressed size
MessageBox.Show("There was an error decompressing " + saveFileDialog1.FileName);
}
}
else
{
// displays that the file does not have the correct BPE magic if it failed the check earlier
MessageBox.Show("Not a BPE file!");
}
}
}

// event handler for button2 being clicked
private void button2_Click(object sender, EventArgs e)
{
// check that the open and save dialogs were not cancelled and the user selected some filenames
if (openFileDialog1.ShowDialog() == DialogResult.OK && saveFileDialog1.ShowDialog() == DialogResult.OK)
{
// call the 'bpefile_open_save' function in the dll and make sure it returns 0, which means it worked
if (bpefile_open_save(openFileDialog1.FileName, saveFileDialog1.FileName) == 0)
{
// if the function returns that it worked, tell the user it was successful
MessageBox.Show("Successfully saved uncompressed file " + saveFileDialog1.FileName);
}
else
{
// if the function returns anything but 0, tell the user it didn't work
MessageBox.Show("There was an error saving " + saveFileDialog1.FileName);
}
}
}

// function to read the file contents into a byte array
private byte[] ReadFile(string fileName)
{
// create a buffer
byte[] buff = null;

// create a FileStream 'fs' with the correct parameters
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite);

// create a BinaryReader 'br' with 'fs'
BinaryReader br = new BinaryReader(fs);

// determine the length of the file, so we can set the buffer to accept it
long numBytes = new FileInfo(fileName).Length;

// set the buffer length to the file length
buff = br.ReadBytes((int)numBytes);

// close the BinaryReader and FileStream
br.Close();
fs.Close();

// return the buffer contents
return buff;
}

// function to write a byte array to a file
private void WriteFile(byte[] buff, string fileName)
{
// this is a check to make sure the file is not a read-only file, and if it is, remove the read-only property
System.IO.FileInfo fi = new System.IO.FileInfo(fileName);
if (fi.IsReadOnly && File.Exists(fileName))
{
fi.IsReadOnly = false;
}

// create a FileStream 'fs' with the correct parameters
FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);

// create a BinaryWriter 'bw' with 'fs'
BinaryWriter bw = new BinaryWriter(fs);

// write the buffer contents
bw.Write(buff);

// close the BinaryWriter and FileStream
bw.Close();
fs.Close();
}
}
}
[/code]
using System;

[/spoiler]

Enjoy!

Source(and download):

This PAC file extracts EVERYHING in a single Pac file and neatly organizes it so that the person can easily find what they're looking for. I found where the selection pictures were located within minutes after extraction. BTW The selection pics are located in the menuHD and menuSD pac files in folder SSFA, SSFB, SSFC and SSFD(located inside the MENU folder). This is truly awesome work Brien and an awesome christmas present from you for us ;)

Merry Christmas :xmassmiley:

Edited by DRAVEN
  • Like 1
Posted

No problem mate, always happy to help out.

Happy Holidays!

Posted (edited)

Thanks for making the topic. Glad you like it. I've found three PAC files from WWE13, that it chokes on. When I make my extractor/rebuilder, I'll be able to narrow down where the problem is. I just didn't have time to track these three down yet.

The PAC files that it chokes on are 'casThumb.pac', 'edit.pac', and 'prtcls.pac'. Now, I don't know about the first two, but trust me when I say that the last one is full of a bunch of nothing. You can verify this by extracting the dlc prtcls file, not sure why THAT works, but the main one doesn't. It's just a TON of particles, and right now, I don't see anybody messing with them.

I will also be uploading the program to 360Haven shortly, for people that don't have an account at XeNTaX, and can't afford to donate to get one. I didn't know he requires a donation to register now, although I believe if you email him, he can work around that. He had a bunch of problems with leeches and spam accounts, and I kind of don't blame him, since he has to pay for the servers and everything. It would be nice if Mr. Mouse could make enough through advertisements, but he must have the luck that I have, when it comes to relying on that.

Edited by brienj
Posted (edited)

Thanks for making the topic. Glad you like it. I've found three PAC files from WWE13, that it chokes on. When I make my extractor/rebuilder, I'll be able to narrow down where the problem is. I just didn't have time to track these three down yet.

The PAC files that it chokes on are 'casThumb.pac', 'edit.pac', and 'prtcls.pac'. Now, I don't know about the first two, but trust me when I say that the last one is full of a bunch of nothing. You can verify this by extracting the dlc prtcls file, not sure why THAT works, but the main one doesn't. It's just a TON of particles, and right now, I don't see anybody messing with them.

I will also be uploading the program to 360Haven shortly, for people that don't have an account at XeNTaX, and can't afford to donate to get one. I didn't know he requires a donation to register now, although I believe if you email him, he can work around that. He had a bunch of problems with leeches and spam accounts, and I kind of don't blame him, since he has to pay for the servers and everything. It would be nice if Mr. Mouse could make enough through advertisements, but he must have the luck that I have, when it comes to relying on that.

Like? LIKE? Okay I want you to take that 'like' and throw it out of the window. I LOVE this program! :p I sent you a PM mate, it includes the PS3 caw files you asked for!

Cheers mate(s)

EDIT: I have 69 posts, HAH. If we were on XHP right now my rank would be diva magnet or something, lol.

EDIT#2: I don't play around with anything that doesn't have the extension dds, lol

Edited by Miztah Raza
Posted

Like? LIKE? Okay I want you to take that 'like' and throw it out of the window. I LOVE this program! :p I sent you a PM mate, it includes the PS3 caw files you asked for!

Cheers mate(s)

EDIT: I have 69 posts, HAH. If we were on XHP right now my rank would be diva magnet or something, lol.

EDIT#2: I don't play around with anything that doesn't have the extension dds, lol

So I take it that it works well. That's great. If you love this, you'll love the next program that I'll be making for PAC files, even more.
  • Like 1
Posted (edited)

So I take it that it works well. That's great. If you love this, you'll love the next program that I'll be making for PAC files, even more.

I'm sure I will. But will you ever make a tool that adds wrestlers as DLC? That and a rebuilder is all I could ever want so I'd be pretty excited if you had those in mind mate.

Edited by Miztah Raza
Posted

Miztah did you be able to get the dlc2 misc.pac to work ?

Posted

Miztah did you be able to get the dlc2 misc.pac to work ?

no.

Posted

no.

Hmm I wonder if it will when dlc pack 3

Comes out I hope so :) or if there's another way

Somehow to do it :)

Posted

whatever pac i try i get the message error : Error Parsing!

Anyone?

Posted

I don't understand the tool?

We can unpack/open pac file (like menuHD for exemple) but we can't modifiy anything to re-inject back?

Am I getting it all wrong?

Posted

sorry, I red again what Brienj said... the extractor/injector will come in a near futur :)

For the moment we can explore the files.

Thanks Brienj! You still got it bro! :)

  • 2 weeks later...
Posted

so after we explore these files what can we do with them?

Posted

so after we explore these files what can we do with them?

As of yet, nothing. BrienJ is going to release his rebuilder in the future. You can use the extractor to explore files and see what contains what.

Posted

As of yet, nothing. BrienJ is going to release his rebuilder in the future. You can use the extractor to explore files and see what contains what.

Nice we really need to be able to get the dlc 2 and 3 texture modded will the be able to do it?

Posted

I found a bug in my rebuilder finally. Just be patient for the rebuilder guys. If I released it with the bugs in it, you would just be screwing up your files, and be really frustrated. ;)

Posted

with this program we can change the menu background image for example?

Posted

Just out of curiosity, is there a way to extract the models, bring them into 3DS Max or Maya and create your own content or wrestler models?

Posted

i'm new to this modding idea so can someone please explain what this software does?

Posted

Just out of curiosity, is there a way to extract the models, bring them into 3DS Max or Maya and create your own content or wrestler models?

Well, I am working on making a YOBJ to OBJ converter, although I am having some difficulty with the face data at this point. Once I get that figured out, we can export OBJ data from them, load them in 3dsMax, you could modify the vertices and uv mapping, export as an OBJ and then import back into the YOBJ. Still waiting on chrrox to reply to me about the face data, unless there is someone here that understand the face data for a model. I am having problems converting the data in the YOBJ to a usable format.

Posted

No not as of yet.. Wait and see..

New models and models from any old game are not likely to happen due to one stupid file..

Wwe12 models work but need a proper fix

I can bypass the texture glitch but not the lighting glitch..

Posted

Hey Brienj, you seem to be really busy these days ;)2

Editing 3D models like back in 2011 would be so great.

Thank you for doing all that bro.

Posted

No not as of yet.. Wait and see..

New models and models from any old game are not likely to happen due to one stupid file..

Wwe12 models work but need a proper fix

I can bypass the texture glitch but not the lighting glitch..

Speaking of that lighting glitch. I noticed that arenas I add to the game, the lighting does not work, unless the arena replaces the original arena. Is the lighting glitch on the models the same? If you replace a model in the game, does the lighting on them work, or does it still not work, because that could narrow down if the problem is actually in the model or not, and is a separate file somewhere else, like it is for the arenas.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

Terms of Use Privacy Policy Guidelines We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.