20 #include <QDataStream> 21 #include <QTextStream> 22 #include <QCryptographicHash> 24 #if defined(OPENSSL) && (OPENSSL == 1) 25 #include <openssl/evp.h> 26 #include <openssl/hmac.h> 27 #include <openssl/aes.h> 53 if(fileName.isEmpty()){
return false;}
55 if(!file.open(QIODevice::ReadOnly)){
return false;}
56 int file_size = file.size();
87 if((fileName.contains(
"00867")) || (fileName.contains(
"00869")) || (fileName.contains(
"00900")) ||
88 (fileName.contains(
"94163")) || (fileName.contains(
"00700")) || (fileName.contains(
"01057")) ||
89 (fileName.contains(
"00868")))
92 string = fileName.mid(fileName.lastIndexOf(
"/")+1,fileName.lastIndexOf(
".")-1-fileName.lastIndexOf(
"/"));
93 SG_Region_String[0]=
string.mid(
string.lastIndexOf(
"BA")-1,
string.lastIndexOf(
"FF7-S")+8);
108 QByteArray mc_header;
110 if(
SG_TYPE ==
"PSP"){offset = 0x80;}
111 if(
SG_TYPE ==
"VGS"){offset = 0x40;}
112 if(
SG_TYPE ==
"DEX"){offset = 0xF40;}
115 for(
int i=0; i<15;i++)
117 int index = (128*i) +138;
137 if(data.size() !=
SG_HEADER){
return false;}
154 if(s<0 || s>14){
return false;}
170 if(data.size() !=
SG_FOOTER){
return false;}
185 if(s<0 || s>14){
return false;}
193 if(
filename.isEmpty()){
return QByteArray(
"\x00");}
194 else if (
type() ==
"PC"){
return QByteArray(
"\x00");}
195 else if ((
type() ==
"PSV") || (
type() ==
"PSX"))
198 if(!file.open(QIODevice::ReadOnly)){
return QByteArray(
"\x00");}
199 QByteArray temp(file.readAll());
200 if(
type()==
"PSV"){temp.remove(0,0x84);}
208 for(
int i=0; i<blocks;i++)
220 if(s<0 || s>14){
return false;}
221 int blocks = data.length()/0x2000;
223 for(
int i=0; i< blocks ; i++)
225 int offset = (i*0x2000);
239 if(fileName.isEmpty()){
return false;}
247 QFile file(fileName);
248 if(!file.open(QIODevice::ReadWrite)){
return false;}
262 metadata.chop(metadata.length()-metadata.lastIndexOf(
"/"));
263 metadata.append(
"/metadata.xml");
271 if(fileName.isEmpty()){
return false;}
274 if(newType ==
"PC"){
return exportPC(fileName);}
275 else if(newType ==
"PSX"){
return exportPSX(s,fileName);}
276 else if(newType ==
"MC"){
return exportVMC(fileName);}
277 else if(newType ==
"VGS"){
return exportVGS(fileName);}
278 else if(newType ==
"DEX"){
return exportDEX(fileName);}
287 if(fileName.isEmpty()){
return false;}
298 for(
int i=0;i<15;i++)
324 if(fileName.isEmpty()){
return false;}
357 QFile file(fileName);
358 if(!file.open(QIODevice::ReadWrite)){
return false;}
360 for(
int i=0;i<blocks;i++)
377 if(fileName.isEmpty()){
return false;}
405 if(fileName.isEmpty()){
return false;}
408 if(prev_type !=
"VGS")
441 if(fileName.isEmpty()){
return false;}
489 if(s<0 || s>14){
return;}
490 if(fileName.isEmpty()){
return;}
491 QFile file(fileName);
492 if(!file.open(QIODevice::ReadOnly)){
return;}
493 int file_size = file.size();
537 else{file.close();
return;}
545 if(
slot[s].checksum != 0x0000 &&
slot[s].checksum != 0x4D1D)
547 setRegion(s,QString(
"BASCUS-94163FF7-S%1").arg(QString::number(s).toInt(),2,10,QChar(
'0').toUpper()));
551 else if (inType ==
"MC" || inType ==
"PSP" || inType ==
"VGS" ||inType==
"DEX")
554 QByteArray mc_header;
561 mc_header = file.read(headerSize);
563 index = (128*fileSlot) +138;
564 setRegion(s,QString(mc_header.mid(index,19)));
566 else if (inType ==
"PSX")
568 if((file.fileName().contains(
"00867")) || (file.fileName().contains(
"00869")) || (file.fileName().contains(
"00900")) ||
569 (file.fileName().contains(
"94163")) || (file.fileName().contains(
"00700")) || (file.fileName().contains(
"01057")) || (file.fileName().contains(
"00868")))
572 string = file.fileName().mid(file.fileName().lastIndexOf(
"/")+1,file.fileName().lastIndexOf(
".")-1-file.fileName().lastIndexOf(
"/"));
573 setRegion(s,
string.mid(
string.lastIndexOf(
"BA")-1,
string.lastIndexOf(
"FF7-S")+8));
577 else if (inType==
"PSV")
595 temp.fill(0x00,0x10f4);
597 memcpy(&
slot[rmslot],temp,0x10f4);
602 int index = (128+(128*rmslot));
603 if (
SG_TYPE ==
"PSP"){index +=0x80;}
604 else if (
SG_TYPE ==
"VGS"){index +=0x40;}
605 else if (
SG_TYPE ==
"DEX"){index +=0xF40;}
618 QFile file(fileName);
619 if(!file.open(QIODevice::ReadWrite)){
return false;}
633 if(checksum == 0x4D1D){
slot[i].checksum=0x0000; }
634 else{
slot[i].checksum = checksum;}
643 quint16 r = 0xFFFF, len =4336, pbit = 0x8000;
650 if( r & pbit ){r = ( r << 1 ) ^ 0x1021;}
653 r &= ( 1 << 16 ) - 1;
655 return ((r^0xFFFF)&0xFFFF);
662 #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN 664 #elif Q_BYTE_ORDER == Q_BIG_ENDIAN 665 item = ((itemraw & 0xFF) << 8) | ((itemraw >> 8) & 0xFF);
688 item = ((itemraw & 0xFF) << 8) | ((itemraw >> 8) & 0xFF);
696 item = ((itemraw & 0xFF) << 8) | ((itemraw >> 8) & 0xFF);
704 quint16
item,itemraw;
706 #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN 707 item = ((qty << 9) & 0xFE00) | (
id & 0x1FF);
709 #elif Q_BYTE_ORDER == Q_BIG_ENDIAN 710 item = ((qty << 9) & 0xFE00) | (
id & 0x1FF);
711 itemraw = ((item & 0xFF) << 8) | ((item >> 8) & 0xFF);
725 item = ((qty << 9) & 0xFE00) | (
id & 0x1FF);
741 item = ((qty << 9) & 0xFE00) | (
id & 0x1FF);
742 itemraw = ((item & 0xFF) << 8) | ((item >> 8) & 0xFF);
749 item = ((qty << 9) & 0xFE00) | (
id & 0x1FF);
754 item = ((qty << 9) & 0xFE00) | (
id & 0x1FF);
755 itemraw = ((item & 0xFF) << 8) | ((item >> 8) & 0xFF);
766 slot[s].items[item_num]=rawitem;
771 if(
region(s).contains(
"SLPS-00700") &&(new_qty>99) &&(new_id != 0x1FF)){new_qty = 99;}
781 QList<quint16> item_list;
782 for (
int i=0;i<320;i++){item_list.append(
slot[s].
items[i]);}
788 if(
region(s).contains(
"SLPS-00700"))
790 for(
int i=0;i<320;i++)
793 else{
slot[s].items[i]= items.at(i);}
796 else{
for(
int i=0;i<320;i++){
slot[s].items[i]= items.at(i);}}
808 quint8 newheader[0x09] = {0x71,0x73,0x27,0x06,0x00,0x00,0x00,0x00,0x00};
812 case 0: newheader[4]=0x00;
break;
813 case 1: newheader[4]=0x01;
break;
814 default:newheader[4]= (16 * (s-2))+2;
break;
819 if(
isFF7(i)){mask |= (1<<i);}
824 for(
int i=8;i<15;i++)
826 if(
isFF7(i)){mask |= (1<<(i-8));}
835 if((
slot[s].
time/3600)>99){
hf[s].sl_header[27]=0x58;
hf[s].sl_header[29]=0x58;}
838 hf[s].sl_header[27] = ((
slot[s].time/3600)/10)+0x4F;
839 hf[s].sl_header[29] = ((
slot[s].time/3600)%10)+0x4F;
841 hf[s].sl_header[33] = ((
slot[s].time/60%60)/10)+0x4F;
842 hf[s].sl_header[35] = ((
slot[s].time/60%60)%10)+0x4F;
853 QByteArray keySeed =
fileHeader().mid(0x08,20);
856 QByteArray hmacDigest =
fileHeader().mid(0x1C,20);
857 QByteArray signedData =
fileHeader().mid(0x30);
859 QByteArray decryptedKeySeed;decryptedKeySeed.resize(keySeed.size()+16);
861 const EVP_CIPHER *cipher = EVP_aes_128_cbc();
862 int inLen=keySeed.length();
866 EVP_CIPHER_CTX_init(&ctx);
867 EVP_DecryptInit(&ctx, cipher, (
const unsigned char*)
ps3Key().data(), (
const unsigned char*)
ps3Seed().data());
868 EVP_DecryptUpdate(&ctx, (
unsigned char*)decryptedKeySeed.data(), &outLen, (
const unsigned char*)keySeed.data(), inLen);
870 EVP_DecryptFinal(&ctx,(
unsigned char*)decryptedKeySeed.data()+tempLen,&outLen);
871 EVP_CIPHER_CTX_cleanup(&ctx);
873 decryptedKeySeed.resize(tempLen);
877 QByteArray newHMAC; newHMAC.resize(0x14);
878 unsigned int result_len = 0x14;
882 HMAC_CTX_init(&ctx2);
883 HMAC_Init(&ctx2, decryptedKeySeed.data(), decryptedKeySeed.length(), EVP_sha1());
884 HMAC_Update(&ctx2, (
unsigned char *)signedData.data(), signedData.length());
885 HMAC_Final(&ctx2, (
unsigned char*)newHMAC.data(), &result_len);
886 HMAC_CTX_cleanup(&ctx2);
890 QByteArray temp =
fileHeader().replace(0x1C,0x14,newHMAC);
898 QByteArray mc_header_2;
903 quint8 xor_byte = 0x00;
904 mc_header_2.append(
"MC");
910 if(
SG_TYPE ==
"MC"){
for(
int x=0;x<127;x++){xor_byte^=mc_header_2[x];}}
911 if(
SG_TYPE ==
"PSP"){
for(
int x=128;x<256;x++){xor_byte^=mc_header_2[x];}}
912 if(
SG_TYPE ==
"VGS"){
for(
int x=64;x<192;x++){xor_byte^=mc_header_2[x];}}
913 if(
SG_TYPE ==
"DEX"){
for(
int x=0xF40;x<0x1000;x++){xor_byte^=mc_header_2[x];}}
915 mc_header_2.append(xor_byte);
917 for(
int i=0;i<15;i++)
920 index= (128 +(128*i));
921 if(
SG_TYPE ==
"PSP"){index+=0x80;}
922 if(
SG_TYPE ==
"VGS"){index+=0x40;}
923 if(
SG_TYPE ==
"DEX"){index+=0xF40;}
928 temp[0]=0x51;temp[1]=0x00;temp[2]=0x00;temp[3]=0x00;temp[4]=0x00;
929 temp[5]=0x20;temp[6]=0x00;temp[7]=0x00;temp[8]=0xFF;temp[9]=0xFF;
930 mc_header_2.append(temp);
931 mc_header_2.append(
region(i));
933 for(
int f=0;f<98;f++){temp[f]=0x00;}
934 mc_header_2.append(temp);
936 for(
int x=0;x<127;x++){xor_byte^=mc_header_2[x+index];}
937 mc_header_2.append(xor_byte);
939 if(
region(i).endsWith(
"FF7-S01"))
940 {
for(
int P=0;P<512;P++)
943 else{
hf[i].sl_header[P]= 0x00;}
946 if(
region(i).endsWith(
"FF7-S02"))
947 {
for(
int P=0;P<512;P++)
950 else{
hf[i].sl_header[P]= 0x00;}
953 if(
region(i).endsWith(
"FF7-S03"))
954 {
for(
int P=0;P<512;P++)
957 else{
hf[i].sl_header[P]= 0x00;}
960 if(
region(i).endsWith(
"FF7-S04"))
961 {
for(
int P=0;P<512;P++)
964 else{
hf[i].sl_header[P]= 0x00;}
967 if(
region(i).endsWith(
"FF7-S05"))
968 {
for(
int P=0;P<512;P++)
971 else{
hf[i].sl_header[P]= 0x00;}
974 if(
region(i).endsWith(
"FF7-S06"))
975 {
for(
int P=0;P<512;P++)
978 else{
hf[i].sl_header[P]= 0x00;}
981 if(
region(i).endsWith(
"FF7-S07"))
982 {
for(
int P=0;P<512;P++)
985 else{
hf[i].sl_header[P]= 0x00;}
988 if(
region(i).endsWith(
"FF7-S08"))
989 {
for(
int P=0;P<512;P++)
992 else{
hf[i].sl_header[P]= 0x00;}
995 if(
region(i).endsWith(
"FF7-S09"))
996 {
for(
int P=0;P<512;P++)
999 else{
hf[i].sl_header[P]= 0x00;}
1002 if(
region(i).endsWith(
"FF7-S10"))
1003 {
for(
int P=0;P<512;P++)
1006 else{
hf[i].sl_header[P]= 0x00;}
1009 if(
region(i).endsWith(
"FF7-S11"))
1010 {
for(
int P=0;P<512;P++)
1013 else{
hf[i].sl_header[P]= 0x00;}
1016 if(
region(i).endsWith(
"FF7-S12"))
1017 {
for(
int P=0;P<512;P++)
1020 else{
hf[i].sl_header[P]= 0x00;}
1023 if(
region(i).endsWith(
"FF7-S13"))
1024 {
for(
int P=0;P<512;P++)
1027 else{
hf[i].sl_header[P]= 0x00;}
1030 if(
region(i).endsWith(
"FF7-S14"))
1031 {
for(
int P=0;P<512;P++)
1034 else{
hf[i].sl_header[P]= 0x00;}
1037 if(
region(i).endsWith(
"FF7-S15"))
1038 {
for(
int P=0;P<512;P++)
1041 else{
hf[i].sl_header[P]= 0x00;}
1058 mc_header_2.append(
"\xA0\x00\x00\x00\x00\x00\x00\x00\xFF\xFF",10);
1059 for (
int j=0;j<117;j++){mc_header_2.append(
'\x00');}
1060 mc_header_2.append(
'\xA0');
1075 for(
int i=0;i<6143;i++){mc_header_2.append(
file_header_mc[index+i]);}
1081 for(
int i=0;i<6143;i++){mc_header_2.append(
file_header_psp[index+i]);}
1088 for(
int i=0;i<6143;i++){mc_header_2.append(
file_header_vgs[index+i]);}
1094 for(
int i=0;i<6143;i++){mc_header_2.append(
file_header_dex[index+i]);}
1104 SG_Region_String[s].append(QString(
"%1").arg(QString::number(saveNum),2,QChar(
'0')));
1112 if( (new_region ==
"USA") || (new_region ==
"NTSC-U") || (new_region ==
"1") )
1114 SG_Region_String[s]= QString(
"BASCUS-94163FF7-S%1").arg(QString::number(s+1),2,QChar(
'0'));
1116 else if( (new_region ==
"UK") || (new_region ==
"PAL-E") || (new_region ==
"2") )
1118 SG_Region_String[s]= QString(
"BESCES-00867FF7-S%1").arg(QString::number(s+1),2,QChar(
'0'));
1120 else if( (new_region ==
"French") || (new_region ==
"PAL-FR") || (new_region ==
"3") )
1122 SG_Region_String[s]= QString(
"BESCES-00868FF7-S%1").arg(QString::number(s+1),2,QChar(
'0'));
1124 else if( (new_region ==
"German") || (new_region ==
"PAL-DE") || (new_region ==
"4") )
1126 SG_Region_String[s]= QString(
"BESCES-00869FF7-S%1").arg(QString::number(s+1),2,QChar(
'0'));
1128 else if( (new_region ==
"Spanish")||(new_region ==
"PAL-ES")||(new_region ==
"5") )
1130 SG_Region_String[s]= QString(
"BESCES-00900FF7-S%1").arg(QString::number(s+1),2,QChar(
'0'));
1132 else if( (new_region ==
"Japanese")||(new_region ==
"NTSC-J")||(new_region ==
"6") )
1134 SG_Region_String[s]= QString(
"BISLPS-00700FF7-S%1").arg(QString::number(s+1),2,QChar(
'0'));
1136 else if( (new_region ==
"International")||(new_region ==
"NTSC-JI")||(new_region ==
"7") )
1138 SG_Region_String[s]= QString(
"BISLPS-01057FF7-S%1").arg(QString::number(s+1),2,QChar(
'0'));
1163 int index=128+(128*s);
1164 if (
type() ==
"PSP"){index+=0x80;}
1165 else if (
type() ==
"VGS"){index+=0x40;}
1166 else if (
type() ==
"DEX"){index+=0xF40;}
1176 int index=128+(128*s);
1177 if (
type() ==
"PSP"){index+=0x80;}
1178 else if (
type() ==
"VGS"){index+=0x40;}
1179 else if (
type() ==
"DEX"){index+=0xF40;}
1187 if(
type()==
"PC" ||
type()==
"PSX" ||
type()==
"PSV"){
return;}
1188 if(next <0 || next >14){
return;}
1189 if(s <0 || s >14){
return;}
1190 if(next==s){
return;}
1192 int index=128+(128*s);
1193 if (
type() ==
"PSP"){index+=0x80;}
1194 else if (
type() ==
"VGS"){index+=0x40;}
1195 else if (
type() ==
"DEX"){index+=0xF40;}
1204 int index=128+(128*s);
1205 if (
type() ==
"PSP"){index+=0x80;}
1206 else if (
type() ==
"VGS"){index+=0x40;}
1207 else if (
type() ==
"DEX"){index+=0xF40;}
1216 if(
type()==
"PC" ||
type()==
"PSX" ||
type()==
"PSV"){
return;}
1217 if(s <0 || s >14){
return;}
1218 if(blockSize>15){
return;}
1220 int index=128+(128*s);
1221 if (
type() ==
"PSP"){index+=0x80;}
1222 else if (
type() ==
"VGS"){index+=0x40;}
1223 else if (
type() ==
"DEX"){index+=0xF40;}
1225 qint32 filesize= blockSize *0x2000;
1228 file_headerp[index+0x06] = (filesize & 0xff0000) >> 16;
1232 if(
type() ==
"PC"){
return 0;}
1233 else if(
type()==
"PSV")
1235 qint64 size = QFile(
fileName()).size();
1237 quint8 v = size / 0x2000;
1240 else if(
type()==
"PSX")
1246 int index=128+(128*s);
1247 if (
type() ==
"PSP"){index+=0x80;}
1248 else if (
type() ==
"VGS"){index+=0x40;}
1249 else if (
type() ==
"DEX"){index+=0xF40;}
1252 return value/0x2000;
1259 QTextCodec *codec = QTextCodec::codecForName(QByteArray(
"Shift-JIS"));
1262 if((index = desc.indexOf(
'\x00')) != -1) {desc.truncate(index);}
1263 if(codec == 0){
return "";}
1264 else{
return codec->toUnicode(desc);}
1268 QTextCodec *codec = QTextCodec::codecForName(QByteArray(
"Shift-JIS"));
1271 qDebug() <<
"Failed to Load Codec";
1274 QByteArray temp = codec->fromUnicode(newDesc);
1276 QByteArray codedText;
1277 codedText.fill(
'\x00',64);
1278 codedText.replace(0,temp.size(),temp);
1281 header.replace(4,64,codedText);
1294 if(
region(s).contains(
"00867") ||
region(s).contains(
"00869") ||
1295 region(s).contains(
"00900") ||
region(s).contains(
"94163") ||
1296 region(s).contains(
"00700") ||
region(s).contains(
"01057") ||
1297 region(s).contains(
"00868"))
1304 if(
region(s).contains(
"00867") ||
region(s).contains(
"00869") ||
1305 region(s).contains(
"00900") ||
region(s).contains(
"00868"))
1312 if(
region(s).contains(
"00700") ||
region(s).contains(
"94163") ||
region(s).contains(
"01057"))
1318 if(
region(s).contains(
"00700") ||
region(s).contains(
"01057")){
return true;}
1348 else if(type ==
"PSX")
1376 else if(type==
"PSV")
1390 else if(type==
"PSP")
1404 else if(type==
"VGS")
1418 else if(type==
"DEX")
1435 if(fileName.isEmpty() || fileName.isNull())
1441 QFile file(fileName);
1442 if(!file.open(QFile::ReadOnly)){
return;}
1444 ff7file = file.readAll();
1447 temp = ff7file.mid(index,0x10f4);
1448 memcpy(&
slot[s],temp,0x10f4);
1452 for(
int c=0;c<9;c++){
setCharName(s,c,
"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff");}
1467 else if(
region(s).isEmpty()){
setRegion(s,QString(
"BASCUS-94163FF7-S%1").arg(QString::number(s+1),2,QChar(
'0')));
Text.
init(0);}
1473 if(fileName.isEmpty() || fileName.isNull())
1479 QFile file(fileName);
1480 if(!file.open(QFile::ReadOnly)){
return;}
1482 ff7file = file.readAll();
1485 temp = ff7file.mid(index,0x10f4);
1492 for(
int i=0;i<9;i++)
1499 outFile.append(CharFileName);
1500 outFile.append(
"-cait_sith");
1501 if(
type() !=
"PSX" ||
type() !=
"PSV")
1503 outFile.append(
"-");
1506 outFile.append(str);
1511 outFile.append(CharFileName);
1512 outFile.append(
"-vincent");
1513 if(
type() !=
"PSX" ||
type() !=
"PSV")
1515 outFile.append(
"-");
1518 outFile.append(str);
1521 outFile.append(
".char");
1549 setLocation(s,QT_TRANSLATE_NOOP(
"FF7Save",
"New Game +"));
1555 if(disc<1 || disc>3){
return;}
1560 if(s<0 || s>14){
return 0;}
1561 else{
return slot[s].mprogress;}
1565 if(s<0 || s>14){
return;}
1568 if(mProgress<0){mProgress =0;}
1569 else if(mProgress>0xFFFF){mProgress=0xFFFF;}
1570 if(mProgress !=
slot[s].mprogress)
1572 slot[s].mprogress = mProgress;
1580 QList<QByteArray> icon;
1607 for (
int n=0;n<12;n++){text.append(
slot[s].chars[char_num].name[n]);}
1614 for (
int i=0;i<12;i++){
slot[s].chars[char_num].name[i] =0xFF;}
1616 memcpy(
slot[s].chars[char_num].name,temp,temp.length());
1625 for (
int n=0;n<16;n++){text.append(
slot[s].desc.name[n]);}
1632 for (
int i=0;i<16;i++){
slot[s].desc.name[i] =0xFF;}
1634 memcpy(
slot[s].desc.name,temp,temp.length());
1643 for (
int n=0;n<24;n++){text.append(
slot[s].desc.location[n]);}
1652 for (
int i=0;i<32;i++){
slot[s].desc.location[i] =0xFF;}
1653 QByteArray temp =
Text.
toFF7(new_desc_location);
1654 memcpy(
slot[s].desc.location,temp,temp.length());
1661 return slot[s].desc.party[char_num];
1684 slot[s].time=new_time;
1695 for (
int n=0;n<24;n++){text.append(
slot[s].
location[n]);}
1703 for (
int i=0;i<24;i++){
slot[s].location[i] =0xFF;}
1704 QByteArray temp =
Text.
toFF7(new_location);
1720 default:
return 0;
break;
1731 default:
return 0;
break;
1768 default:
return false;
1776 if(isEmpty){
slot[s].materiacaves |= (1<<0);}
1777 else{
slot[s].materiacaves &= ~(1<<0);}
1782 if(isEmpty){
slot[s].materiacaves |= (1<<1);}
1783 else{
slot[s].materiacaves &= ~(1<<1);}
1788 if(isEmpty){
slot[s].materiacaves |= (1<<2);}
1789 else{
slot[s].materiacaves &= ~(1<<2);}
1794 if(isEmpty){
slot[s].materiacaves |= (1<<3);}
1795 else{
slot[s].materiacaves &= ~(1<<3);}
1806 case 1:
return slot[s].coster_1;
break;
1807 case 2:
return slot[s].coster_2;
break;
1808 case 3:
return slot[s].coster_3;
break;
1809 default:
return 0;
break;
1828 for (
int n=0;n<6;n++){text.append(
slot[s].chocobonames[choco_num][n]);}
1836 for (
int i=0;i<6;i++){
slot[s].chocobonames[choco_num][i] =0xFF;}
1837 memcpy(
slot[s].chocobonames[choco_num],temp,temp.length());
1842 if( (
id<91) && ((ap>=0)&&(ap<=16777215)))
1844 slot[s].materias[mat_num].id = id;
1845 int a = (ap & 0xff);
1846 int b = (ap & 0xff00) >> 8;
1847 int c = (ap & 0xff0000) >> 16;
1848 slot[s].materias[mat_num].ap[0]=a;
1849 slot[s].materias[mat_num].ap[1]=b;
1850 slot[s].materias[mat_num].ap[2]=c;
1854 slot[s].materias[mat_num].id =0xFF;
1855 slot[s].materias[mat_num].ap[0]=0xFF;
1856 slot[s].materias[mat_num].ap[1]=0xFF;
1857 slot[s].materias[mat_num].ap[2]=0xFF;
1864 qint32 ap_temp =
slot[s].materias[mat_num].ap[0] |(
slot[s].materias[mat_num].ap[1] << 8) |
slot[s].materias[mat_num].ap[2]<<16;
1869 if( (
id<91) && ((ap>=0)&&(ap<=16777215)))
1871 slot[s].stolen[mat_num].id = id;
1872 int a = (ap & 0xff);
1873 int b = (ap & 0xff00) >> 8;
1874 int c = (ap & 0xff0000) >> 16;
1875 slot[s].stolen[mat_num].ap[0]=a;
1876 slot[s].stolen[mat_num].ap[1]=b;
1877 slot[s].stolen[mat_num].ap[2]=c;
1881 slot[s].stolen[mat_num].id =0xFF;
1882 slot[s].stolen[mat_num].ap[0]=0xFF;
1883 slot[s].stolen[mat_num].ap[1]=0xFF;
1884 slot[s].stolen[mat_num].ap[2]=0xFF;
1892 qint32 ap_temp =
slot[s].stolen[mat_num].ap[0] |(
slot[s].stolen[mat_num].ap[1] << 8) |
slot[s].stolen[mat_num].ap[2]<<16;
1902 slot[s].colors[0][0]=color.red();
1903 slot[s].colors[0][1]=color.green();
1904 slot[s].colors[0][2]= color.blue();
1909 slot[s].colors[1][0]=color.red();
1910 slot[s].colors[1][1]=color.green();
1911 slot[s].colors[1][2]= color.blue();
1916 slot[s].colors[2][0]=color.red();
1917 slot[s].colors[2][1]=color.green();
1918 slot[s].colors[2][2]= color.blue();
1923 slot[s].colors[3][0]=color.red();
1924 slot[s].colors[3][1]=color.green();
1925 slot[s].colors[3][2]= color.blue();
1935 temp.setRawData(reinterpret_cast <char *>(&
slot[s].chars[char_num]),132);
1965 case 1:
return slot[s].chars[char_num].timesused1;
break;
1966 case 2:
return slot[s].chars[char_num].timesused2;
break;
1967 case 3:
return slot[s].chars[char_num].timesused3;
break;
2025 if( (
id<91) && ((ap>=0)&&(ap<=16777215)))
2027 slot[s].chars[who].materias[mat_num].id = id;
2028 int a = (ap & 0xff);
2029 int b = (ap & 0xff00) >> 8;
2030 int c = (ap & 0xff0000) >> 16;
2031 slot[s].chars[who].materias[mat_num].ap[0]=a;
2032 slot[s].chars[who].materias[mat_num].ap[1]=b;
2033 slot[s].chars[who].materias[mat_num].ap[2]=c;
2037 slot[s].chars[who].materias[mat_num].id =0xFF;
2038 slot[s].chars[who].materias[mat_num].ap[0]=0xFF;
2039 slot[s].chars[who].materias[mat_num].ap[1]=0xFF;
2040 slot[s].chars[who].materias[mat_num].ap[2]=0xFF;
2048 qint32 ap_temp =
slot[s].chars[who].materias[mat_num].ap[0] |(
slot[s].chars[who].materias[mat_num].ap[1] << 8) |
slot[s].chars[who].materias[mat_num].ap[2]<<16;
2053 if(chocoSlot >-1 && chocoSlot <4){
return slot[s].chocobos[chocoSlot];}
2054 else if (chocoSlot ==4){
return slot[s].choco56[0];}
2055 else if (chocoSlot ==5){
return slot[s].choco56[1];}
2061 memcpy(&bob,temp,16);
2069 if(chocoSlot >-1 && chocoSlot <4){
return slot[s].chocobos[chocoSlot].speed;}
2070 else if (chocoSlot ==4){
return slot[s].choco56[0].speed;}
2071 else if (chocoSlot ==5){
return slot[s].choco56[1].speed;}
2076 if(chocoSlot >-1 && chocoSlot <4){
return slot[s].chocobos[chocoSlot].maxspeed;}
2077 else if (chocoSlot ==4){
return slot[s].choco56[0].maxspeed;}
2078 else if (chocoSlot ==5){
return slot[s].choco56[1].maxspeed;}
2083 if(chocoSlot >-1 && chocoSlot <4){
return slot[s].chocobos[chocoSlot].sprintspd;}
2084 else if (chocoSlot ==4){
return slot[s].choco56[0].sprintspd;}
2085 else if (chocoSlot ==5){
return slot[s].choco56[1].sprintspd;}
2090 if(chocoSlot >-1 && chocoSlot <4){
return slot[s].chocobos[chocoSlot].maxsprintspd;}
2091 else if (chocoSlot ==4){
return slot[s].choco56[0].maxsprintspd;}
2092 else if (chocoSlot ==5){
return slot[s].choco56[1].maxsprintspd;}
2097 if(chocoSlot >-1 && chocoSlot <4){
return slot[s].chocobos[chocoSlot].sex;}
2098 else if (chocoSlot ==4){
return slot[s].choco56[0].sex;}
2099 else if (chocoSlot ==5){
return slot[s].choco56[1].sex;}
2104 if(chocoSlot >-1 && chocoSlot <4){
return slot[s].chocobos[chocoSlot].type;}
2105 else if (chocoSlot ==4){
return slot[s].choco56[0].type;}
2106 else if (chocoSlot ==5){
return slot[s].choco56[1].type;}
2111 if(chocoSlot >-1 && chocoSlot <4){
return slot[s].chocobos[chocoSlot].coop;}
2112 else if (chocoSlot ==4){
return slot[s].choco56[0].coop;}
2113 else if (chocoSlot ==5){
return slot[s].choco56[1].coop;}
2118 if(chocoSlot >-1 && chocoSlot <4){
return slot[s].chocobos[chocoSlot].accel;}
2119 else if (chocoSlot ==4){
return slot[s].choco56[0].accel;}
2120 else if (chocoSlot ==5){
return slot[s].choco56[1].accel;}
2125 if(chocoSlot >-1 && chocoSlot <4){
return slot[s].chocobos[chocoSlot].intelligence;}
2126 else if (chocoSlot ==4){
return slot[s].choco56[0].intelligence;}
2127 else if (chocoSlot ==5){
return slot[s].choco56[1].intelligence;}
2132 if(chocoSlot >-1 && chocoSlot <4){
return slot[s].chocobos[chocoSlot].raceswon;}
2133 else if (chocoSlot ==4){
return slot[s].choco56[0].raceswon;}
2134 else if (chocoSlot ==5){
return slot[s].choco56[1].raceswon;}
2139 if(chocoSlot >-1 && chocoSlot <4){
return slot[s].chocobos[chocoSlot].pcount;}
2140 else if (chocoSlot ==4){
return slot[s].choco56[0].pcount;}
2141 else if (chocoSlot ==5){
return slot[s].choco56[1].pcount;}
2146 if(chocoSlot >-1 && chocoSlot <4){
return slot[s].chocobos[chocoSlot].personality;}
2147 else if (chocoSlot ==4){
return slot[s].choco56[0].personality;}
2148 else if (chocoSlot ==5){
return slot[s].choco56[1].personality;}
2156 if(chocoSlot >-1 && chocoSlot <4){
slot[s].chocobos[chocoSlot].speed = speed;
setFileModified(
true,s);}
2162 if(chocoSlot >-1 && chocoSlot <4){
slot[s].chocobos[chocoSlot].maxspeed = maxspeed;
setFileModified(
true,s);}
2168 if(chocoSlot >-1 && chocoSlot <4){
slot[s].chocobos[chocoSlot].sprintspd = sprintSpeed;
setFileModified(
true,s);}
2169 else if (chocoSlot ==4){
slot[s].choco56[0].sprintspd = sprintSpeed;
setFileModified(
true,s);}
2170 else if (chocoSlot ==5){
slot[s].choco56[1].sprintspd = sprintSpeed;
setFileModified(
true,s);}
2174 if(chocoSlot >-1 && chocoSlot <4){
slot[s].chocobos[chocoSlot].maxsprintspd = maxsprintSpeed;
setFileModified(
true,s);}
2175 else if (chocoSlot ==4){
slot[s].choco56[0].maxsprintspd = maxsprintSpeed;
setFileModified(
true,s);}
2176 else if (chocoSlot ==5){
slot[s].choco56[1].maxsprintspd = maxsprintSpeed;
setFileModified(
true,s);}
2180 if(chocoSlot >-1 && chocoSlot <4){
slot[s].chocobos[chocoSlot].sex = value;
setFileModified(
true,s);}
2186 if(chocoSlot >-1 && chocoSlot <4){
slot[s].chocobos[chocoSlot].type = value;
setFileModified(
true,s);}
2192 if(chocoSlot >-1 && chocoSlot <4){
slot[s].chocobos[chocoSlot].coop = value;
setFileModified(
true,s);}
2198 if(chocoSlot >-1 && chocoSlot <4){
slot[s].chocobos[chocoSlot].accel = value;
setFileModified(
true,s);}
2204 if(chocoSlot >-1 && chocoSlot <4){
slot[s].chocobos[chocoSlot].intelligence = value;
setFileModified(
true,s);}
2205 else if (chocoSlot ==4){
slot[s].choco56[0].intelligence = value;
setFileModified(
true,s);}
2206 else if (chocoSlot ==5){
slot[s].choco56[1].intelligence = value;
setFileModified(
true,s);}
2210 if(chocoSlot >-1 && chocoSlot <4){
slot[s].chocobos[chocoSlot].raceswon = value;
setFileModified(
true,s);}
2216 if(chocoSlot >-1 && chocoSlot <4){
slot[s].chocobos[chocoSlot].pcount = value;
setFileModified(
true,s);}
2222 if(chocoSlot >-1 && chocoSlot <4){
slot[s].chocobos[chocoSlot].personality = value;
setFileModified(
true,s);}
2228 if(cantMate){
slot[s].chocomated |= (1 << chocoSlot);}
2229 else{
slot[s].chocomated &=~(1<< chocoSlot);}
2244 if(gp >65535){gp = 65535;}
2251 if(battles <0){battles = 0;}
2252 if(battles >65535){battles = 65535;}
2259 if(runs <0){runs = 0;}
2260 if(runs >65535){runs = 65535;}
2267 if(pos >=0 && pos <3)
2269 if(new_id >=0 && new_id<12){
slot[s].party[pos] = new_id;}
2270 else{
slot[s].party[pos] =0xFF;}
2280 time =
slot[s].SnowBegFastTime;
2283 time =
slot[s].SnowExpFastTime;
2286 time =
slot[s].SnowCrazyFastTime;
2290 return QString(
"%1").arg(time, 8, 16, QChar(
'0'));
2297 slot[s].SnowBegFastTime= value.toInt(0,16);
2301 slot[s].SnowExpFastTime= value.toInt(0,16);
2305 slot[s].SnowCrazyFastTime= value.toInt(0,16);
2316 case 0:
return slot[s].SnowBegScore;
break;
2317 case 1:
return slot[s].SnowExpScore;
break;
2318 case 2:
return slot[s].SnowCrazyScore;
break;
2319 default:
return 0;
break;
2339 if(s<0 || s>14){
return;}
2340 else if(
slot[s].battlepoints==bp){
return;}
2343 slot[s].battlepoints=bp;
2351 QFile file(fileName);
2354 if(file.open(QIODevice::ReadOnly)){ff7file = file.readAll();}
2359 for(
int i=0;i<UserID.length();i++)
2361 if(UserID.at(i).isDigit()){digitcount ++;}
2363 if (digitcount ==UserID.length())
2365 ff7file.append(UserID.toLatin1());
2368 QCryptographicHash md5(QCryptographicHash::Md5);
2369 md5.addData(ff7file);
2370 return md5.result().toHex().toLower();
2376 else{
for(
int i=0;i<15;i++){
slotChanged[i]=
false;}}
2382 QVector< SubContainer > vector( 10,
SubContainer( 16 ) );
2383 QString Md5 =
md5sum(fileName,UserID);
2386 if(number ==
"-1"){}
2387 else {number = QString::number(number.toInt()+1);}
2389 QFile* file2 =
new QFile(metadataPath);
2390 if (!file2->open(QIODevice::ReadOnly)){}
2391 QDomDocument doc(
"metadata");
2392 bool setdoc = doc.setContent(file2);
2395 QDomElement docElem = doc.documentElement();
2396 if(docElem.tagName() !=
"gamestatus"){}
2397 QDomNodeList nodeList = docElem.elementsByTagName(
"savefiles");
2398 for(
int ii = 0;ii < nodeList.count(); ii++)
2400 QDomElement el = nodeList.at(ii).toElement();
2401 QDomNode pEntries = el.firstChild();
2403 while(!pEntries.isNull() && iii <= 15)
2405 QDomElement peData = pEntries.toElement();
2406 vector[ii][iii] = peData.text();
2407 if(el.attribute(
"block") == number)
2409 if(iii==15){vector[ii][iii] = Md5;}
2411 else if(
region(iii).isEmpty()){vector[ii][iii] =
"";}
2412 else if(vector[ii][iii] ==
""){vector[ii][iii] = timestamp;}
2414 pEntries = pEntries.nextSibling();
2423 QVector< SubContainer > vector( 10,
SubContainer( 16 ) );
2424 QString Md5 =
md5sum(fileName,UserID);
2428 if(number ==
"-1"){
return vector;}
2430 for(
int i=0;i<10; i++)
2432 if(i == number.toInt()){
for(
int j=0; j<16; j++)
2434 if(j==15){vector[i][j] = Md5;}
2436 else if(
region(j).isEmpty()){vector[i][j] =
"";}
2437 else if(vector[i][j] ==
""){vector[i][j] = timestamp;}
2445 if(fileName==QString(
"")){fileName=
filename;}
2446 if(OutPath==QString(
""))
2449 temp.truncate(temp.lastIndexOf(
"/"));
2453 Path.chop(Path.length()-Path.lastIndexOf(
"/"));
2454 QString metadataPath = Path;
2455 metadataPath.append(
"/metadata.xml");
2459 QFile Metadata(metadataPath);
2461 QVector< SubContainer > vector( 10,
SubContainer( 16 ) );
2463 if(Metadata.exists())
2465 Path.remove(0,Path.lastIndexOf(
"_")+1);
2467 vector =
parseXML(fileName, metadataPath, UserId);
2474 if (!Metadata.open(QIODevice::ReadWrite)){
return 0;}
2475 QTextStream out (&Metadata);
2477 out << QString (
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
2478 out << QString(
"<gamestatus>\n");
2480 for(
int i=0;i<10; i++)
2482 out << (QString(
" <savefiles block=\"%1\">\n").arg(QString::number(i+1)));
2484 for(
int j=0; j<15; j++)
2486 out << (QString(
" <timestamp slot=\"%1\">%2</timestamp>\n").arg(QString::number(j+1),vector[i][j]));
2488 out << (QString(
" <signature>%1</signature>\n").arg(vector[i][15]));
2489 out << QString(
" </savefiles>\n");
2491 out << QString(
"</gamestatus>\n");
2492 Metadata.resize(Metadata.pos());
2501 number.remove(0,number.lastIndexOf(
"/")+5);
2503 bool isNumber =
false;
2504 number = QString::number(number.toInt(&isNumber));
2505 if(isNumber){
return number;}
2510 QFile tempFile(fileName);
2511 if(tempFile.exists()){QFileInfo file(fileName);
return QString::number(file.lastModified().toMSecsSinceEpoch());}
2516 if(s<0 || s>14){
return QByteArray(0x00);}
2518 temp.setRawData(reinterpret_cast<char *>(&
slot[s]),0x10F4);
2523 if(s<0 || s>14){
return false;}
2524 if(data.size()!=0x10F4){
return false;}
2525 memcpy(&
slot[s],data,0x10F4);
2532 if(s<0 || s>14){
return false;}
2540 if(s<0 || s>14){
return false;}
2541 else if(flyer <0 || flyer >7){
return false;}
2542 else{
return ((
slot[s].turtleflyers) &(1<<flyer));}
2546 if(s<0 || s> 14){
return 0;}
2547 else{
return slot[s].turtleflyers;}
2552 if(s<0 || s>14){
return;}
2553 else if(flyer <0 || flyer >7){
return;}
2556 if(seen){
slot[s].turtleflyers |= (1<<flyer);}
2557 else{
slot[s].turtleflyers &= ~(1<<flyer);}
2563 if(s<0 || s>14){
return;}
2566 slot[s].turtleflyers = flyersSeen;
2572 if(bit <0 || bit> 7){
return false;}
2573 else{
return ((
slot[s].itemsmask_1)& (1<<bit) );}
2577 if(s<0 || s>14){
return;}
2578 else if(bit<0 || bit >7){
return;}
2581 if(pickedUp){
slot[s].itemsmask_1 |= (1<<bit);}
2582 else{
slot[s].itemsmask_1 &= ~(1<<bit);}
2589 if(bit <0 || bit> 7){
return false;}
2590 else{
return ((
slot[s].bm_progress1)& (1<<bit) );}
2594 if(s<0 || s>14){
return;}
2595 else if(bit<0 || bit >7){
return;}
2598 if(isTrue){
slot[s].bm_progress1 |= (1<<bit);}
2599 else{
slot[s].bm_progress1 &= ~(1<<bit);}
2605 if(s<0 ||s>14){
return;}
2608 if(value<0){value=0;}
2609 else if(value>0xFF){value=0xFF;}
2610 if(value !=
slot[s].bm_progress1)
2612 slot[s].bm_progress1 = value;
2619 if(bit <0 || bit> 7){
return false;}
2620 else{
return ((
slot[s].bm_progress2)& (1<<bit) );}
2624 if(s<0 || s>14){
return;}
2625 else if(bit<0 || bit >7){
return;}
2628 if(isTrue){
slot[s].bm_progress2 |= (1<<bit);}
2629 else{
slot[s].bm_progress2 &= ~(1<<bit);}
2635 if(s<0 ||s>14){
return;}
2638 if(value<0){value=0;}
2639 else if(value>0xFF){value=0xFF;}
2640 if(value !=
slot[s].bm_progress3)
2642 slot[s].bm_progress2 = value;
2649 if(bit <0 || bit> 7){
return false;}
2650 else{
return ((
slot[s].bm_progress3)& (1<<bit) );}
2654 if(s<0 || s>14){
return;}
2655 else if(bit<0 || bit >7){
return;}
2658 if(isTrue){
slot[s].bm_progress3 |= (1<<bit);}
2659 else{
slot[s].bm_progress3 &= ~(1<<bit);}
2665 if(s<0 ||s>14){
return;}
2668 if(value<0){value=0;}
2669 else if(value>0xFF){value=0xFF;}
2670 if(value !=
slot[s].bm_progress3)
2672 slot[s].bm_progress3 = value;
2680 if(bit <0 || bit> 7){
return false;}
2681 else{
return ((
slot[s].midgartrainflags)& (1<<bit) );}
2685 if(s<0 || s>14){
return;}
2686 else if(bit<0 || bit >7){
return;}
2689 if(isTrue){
slot[s].midgartrainflags |= (1<<bit);}
2690 else{
slot[s].midgartrainflags &= ~(1<<bit);}
2696 if(s<0 ||s>14){
return;}
2699 if(value<0){value=0;}
2700 else if(value>0xFF){value=0xFF;}
2701 if(value !=
slot[s].midgartrainflags)
2703 slot[s].midgartrainflags = value;
2711 if(s<0 || s>14){
return QByteArray(
"\x00");}
2715 temp.setRawData(reinterpret_cast<char *>(&
slot[s].keyitems),
sizeof(
slot[s].keyitems));
2721 if(s<0 || s>14){
return false;}
2722 else if(keyItem <0 || keyItem>51){
return false;}
2723 else{
return ((
slot[s].keyitems[keyItem/8]) & (1<< (keyItem%8)));}
2727 if(s<0 || s>14){return ;}
2728 else if(keyItem <0 || keyItem>51){
return;}
2731 if(pickedUp){
slot[s].keyitems[keyItem/8] |= (1<< (keyItem%8));}
2732 else{
slot[s].keyitems[keyItem/8] &= ~(1<< (keyItem%8));}
2739 if(data.size() !=
sizeof(
slot[s].keyitems)) {
return false;}
2742 memcpy(&
slot[s].keyitems,data,
sizeof(
slot[s].keyitems));
2749 if(s<0 || s>14){
return QByteArray(0x00);}
2753 case 0: temp.setRawData(0x00,1);
break;
2754 case 1: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_1),
sizeof(
slot[s].z_1));
break;
2755 case 2: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_2),
sizeof(
slot[s].z_2));
break;
2756 case 3: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_3),
sizeof(
slot[s].z_3));
break;
2757 case 4: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_4),
sizeof(
slot[s].z_4));
break;
2758 case 5: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_5),
sizeof(
slot[s].z_5));
break;
2759 case 6: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_6),
sizeof(
slot[s].z_6));
break;
2760 case 7: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_7),
sizeof(
slot[s].z_7));
break;
2761 case 8: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_8),
sizeof(
slot[s].z_8));
break;
2762 case 9: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_9),
sizeof(
slot[s].z_9));
break;
2763 case 10: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_10),
sizeof(
slot[s].z_10));
break;
2764 case 11: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_11),
sizeof(
slot[s].z_11));
break;
2765 case 12: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_12),
sizeof(
slot[s].z_12));
break;
2766 case 13: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_13),
sizeof(
slot[s].z_13));
break;
2767 case 14: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_14),
sizeof(
slot[s].z_14));
break;
2768 case 15: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_15),
sizeof(
slot[s].z_15));
break;
2769 case 16: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_16),
sizeof(
slot[s].z_16));
break;
2770 case 17: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_17),
sizeof(
slot[s].z_17));
break;
2771 case 18: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_18),
sizeof(
slot[s].z_18));
break;
2772 case 19: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_19),
sizeof(
slot[s].z_19));
break;
2773 case 20: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_20),
sizeof(
slot[s].z_20));
break;
2774 case 21: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_21),
sizeof(
slot[s].z_21));
break;
2775 case 22: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_22),
sizeof(
slot[s].z_22));
break;
2776 case 23: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_23),
sizeof(
slot[s].z_23));
break;
2777 case 24: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_24),
sizeof(
slot[s].z_24));
break;
2778 case 25: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_25),
sizeof(
slot[s].z_25));
break;
2779 case 26: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_26),
sizeof(
slot[s].z_26));
break;
2780 case 27: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_27),
sizeof(
slot[s].z_27));
break;
2781 case 28: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_28),
sizeof(
slot[s].z_28));
break;
2782 case 29: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_29),
sizeof(
slot[s].z_29));
break;
2783 case 30: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_30),
sizeof(
slot[s].z_30));
break;
2784 case 31: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_31),
sizeof(
slot[s].z_31));
break;
2785 case 32: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_32),
sizeof(
slot[s].z_32));
break;
2786 case 33: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_33),
sizeof(
slot[s].z_33));
break;
2787 case 34: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_34),
sizeof(
slot[s].z_34));
break;
2788 case 35: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_35),
sizeof(
slot[s].z_35));
break;
2789 case 36: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_36),
sizeof(
slot[s].z_36));
break;
2790 case 37: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_37),
sizeof(
slot[s].z_37));
break;
2791 case 38: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_38),
sizeof(
slot[s].z_38));
break;
2792 case 39: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_39),
sizeof(
slot[s].z_39));
break;
2793 case 40: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_40),
sizeof(
slot[s].z_40));
break;
2794 case 41: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_41),
sizeof(
slot[s].z_41));
break;
2795 case 42: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_42),
sizeof(
slot[s].z_42));
break;
2796 case 43: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_43),
sizeof(
slot[s].z_43));
break;
2797 case 44: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_44),
sizeof(
slot[s].z_44));
break;
2798 case 45: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_45),
sizeof(
slot[s].z_45));
break;
2799 case 46: temp.setRawData(reinterpret_cast<char *>(&
slot[s].z_46),
sizeof(
slot[s].z_46));
break;
2800 default: temp.setRawData(0x00,1);
break;
2807 if(s<0 || s>14){
return false;}
2811 case 0: result=
false;
break;
2813 if(data.size() !=
sizeof(
slot[s].z_1)) {result=
false;
break;}
2814 else{memcpy(&
slot[s].z_1,data,
sizeof(
slot[s].z_1)); result=
true;
break;}
2816 if(data.size() !=
sizeof(
slot[s].z_2)) {result=
false;
break;}
2817 else{memcpy(&
slot[s].z_2,data,
sizeof(
slot[s].z_2)); result=
true;
break;}
2819 if(data.size() !=
sizeof(
slot[s].z_3)) {result=
false;
break;}
2820 else{memcpy(&
slot[s].z_3,data,
sizeof(
slot[s].z_3)); result=
true;
break;}
2822 if(data.size() !=
sizeof(
slot[s].z_4)) {result=
false;
break;}
2823 else{memcpy(&
slot[s].z_4,data,
sizeof(
slot[s].z_4)); result=
true;
break;}
2825 if(data.size() !=
sizeof(
slot[s].z_5)) {result=
false;
break;}
2826 else{memcpy(&
slot[s].z_5,data,
sizeof(
slot[s].z_5)); result=
true;
break;}
2828 if(data.size() !=
sizeof(
slot[s].z_6)) {result=
false;
break;}
2829 else{memcpy(&
slot[s].z_6,data,
sizeof(
slot[s].z_6)); result=
true;
break;}
2831 if(data.size() !=
sizeof(
slot[s].z_7)) {result=
false;
break;}
2832 else{memcpy(&
slot[s].z_7,data,
sizeof(
slot[s].z_7)); result=
true;
break;}
2834 if(data.size() !=
sizeof(
slot[s].z_8)) {result=
false;
break;}
2835 else{memcpy(&
slot[s].z_8,data,
sizeof(
slot[s].z_8)); result=
true;
break;}
2837 if(data.size() !=
sizeof(
slot[s].z_9)) {result=
false;
break;}
2838 else{memcpy(&
slot[s].z_9,data,
sizeof(
slot[s].z_9)); result=
true;
break;}
2840 if(data.size() !=
sizeof(
slot[s].z_10)) {result=
false;
break;}
2841 else{memcpy(&
slot[s].z_10,data,
sizeof(
slot[s].z_10)); result=
true;
break;}
2843 if(data.size() !=
sizeof(
slot[s].z_11)) {result=
false;
break;}
2844 else{memcpy(&
slot[s].z_11,data,
sizeof(
slot[s].z_11)); result=
true;
break;}
2846 if(data.size() !=
sizeof(
slot[s].z_12)) {result=
false;
break;}
2847 else{memcpy(&
slot[s].z_12,data,
sizeof(
slot[s].z_12)); result=
true;
break;}
2849 if(data.size() !=
sizeof(
slot[s].z_13)) {result=
false;
break;}
2850 else{memcpy(&
slot[s].z_13,data,
sizeof(
slot[s].z_13)); result=
true;
break;}
2852 if(data.size() !=
sizeof(
slot[s].z_14)) {result=
false;
break;}
2853 else{memcpy(&
slot[s].z_14,data,
sizeof(
slot[s].z_14)); result=
true;
break;}
2855 if(data.size() !=
sizeof(
slot[s].z_15)) {result=
false;
break;}
2856 else{memcpy(&
slot[s].z_15,data,
sizeof(
slot[s].z_15)); result=
true;
break;}
2858 if(data.size() !=
sizeof(
slot[s].z_16)) {result=
false;
break;}
2859 else{memcpy(&
slot[s].z_16,data,
sizeof(
slot[s].z_16)); result=
true;
break;}
2861 if(data.size() !=
sizeof(
slot[s].z_17)) {result=
false;
break;}
2862 else{memcpy(&
slot[s].z_17,data,
sizeof(
slot[s].z_17)); result=
true;
break;}
2864 if(data.size() !=
sizeof(
slot[s].z_18)) {result=
false;
break;}
2865 else{memcpy(&
slot[s].z_18,data,
sizeof(
slot[s].z_18)); result=
true;
break;}
2867 if(data.size() !=
sizeof(
slot[s].z_19)) {result=
false;
break;}
2868 else{memcpy(&
slot[s].z_19,data,
sizeof(
slot[s].z_19)); result=
true;
break;}
2870 if(data.size() !=
sizeof(
slot[s].z_20)) {result=
false;
break;}
2871 else{memcpy(&
slot[s].z_20,data,
sizeof(
slot[s].z_20)); result=
true;
break;}
2873 if(data.size() !=
sizeof(
slot[s].z_21)) {result=
false;
break;}
2874 else{memcpy(&
slot[s].z_21,data,
sizeof(
slot[s].z_21)); result=
true;
break;}
2876 if(data.size() !=
sizeof(
slot[s].z_22)) {result=
false;
break;}
2877 else{memcpy(&
slot[s].z_22,data,
sizeof(
slot[s].z_22)); result=
true;
break;}
2879 if(data.size() !=
sizeof(
slot[s].z_23)) {result=
false;
break;}
2880 else{memcpy(&
slot[s].z_23,data,
sizeof(
slot[s].z_23)); result=
true;
break;}
2882 if(data.size() !=
sizeof(
slot[s].z_24)) {result=
false;
break;}
2883 else{memcpy(&
slot[s].z_24,data,
sizeof(
slot[s].z_24)); result=
true;
break;}
2885 if(data.size() !=
sizeof(
slot[s].z_25)) {result=
false;
break;}
2886 else{memcpy(&
slot[s].z_25,data,
sizeof(
slot[s].z_25)); result=
true;
break;}
2888 if(data.size() !=
sizeof(
slot[s].z_26)) {result=
false;
break;}
2889 else{memcpy(&
slot[s].z_26,data,
sizeof(
slot[s].z_26)); result=
true;
break;}
2891 if(data.size() !=
sizeof(
slot[s].z_27)) {result=
false;
break;}
2892 else{memcpy(&
slot[s].z_27,data,
sizeof(
slot[s].z_27)); result=
true;
break;}
2894 if(data.size() !=
sizeof(
slot[s].z_28)) {result=
false;
break;}
2895 else{memcpy(&
slot[s].z_28,data,
sizeof(
slot[s].z_28)); result=
true;
break;}
2897 if(data.size() !=
sizeof(
slot[s].z_29)) {result=
false;
break;}
2898 else{memcpy(&
slot[s].z_29,data,
sizeof(
slot[s].z_29)); result=
true;
break;}
2900 if(data.size() !=
sizeof(
slot[s].z_30)) {result=
false;
break;}
2901 else{memcpy(&
slot[s].z_30,data,
sizeof(
slot[s].z_30)); result=
true;
break;}
2903 if(data.size() !=
sizeof(
slot[s].z_31)) {result=
false;
break;}
2904 else{memcpy(&
slot[s].z_31,data,
sizeof(
slot[s].z_31)); result=
true;
break;}
2906 if(data.size() !=
sizeof(
slot[s].z_32)) {result=
false;
break;}
2907 else{memcpy(&
slot[s].z_32,data,
sizeof(
slot[s].z_32)); result=
true;
break;}
2909 if(data.size() !=
sizeof(
slot[s].z_33)) {result=
false;
break;}
2910 else{memcpy(&
slot[s].z_33,data,
sizeof(
slot[s].z_33)); result=
true;
break;}
2912 if(data.size() !=
sizeof(
slot[s].z_34)) {result=
false;
break;}
2913 else{memcpy(&
slot[s].z_34,data,
sizeof(
slot[s].z_34)); result=
true;
break;}
2915 if(data.size() !=
sizeof(
slot[s].z_35)) {result=
false;
break;}
2916 else{memcpy(&
slot[s].z_35,data,
sizeof(
slot[s].z_35)); result=
true;
break;}
2918 if(data.size() !=
sizeof(
slot[s].z_36)) {result=
false;
break;}
2919 else{memcpy(&
slot[s].z_36,data,
sizeof(
slot[s].z_36)); result=
true;
break;}
2921 if(data.size() !=
sizeof(
slot[s].z_37)) {result=
false;
break;}
2922 else{memcpy(&
slot[s].z_37,data,
sizeof(
slot[s].z_37)); result=
true;
break;}
2924 if(data.size() !=
sizeof(
slot[s].z_38)) {result=
false;
break;}
2925 else{memcpy(&
slot[s].z_38,data,
sizeof(
slot[s].z_38)); result=
true;
break;}
2927 if(data.size() !=
sizeof(
slot[s].z_39)) {result=
false;
break;}
2928 else{memcpy(&
slot[s].z_39,data,
sizeof(
slot[s].z_39)); result=
true;
break;}
2930 if(data.size() !=
sizeof(
slot[s].z_40)) {result=
false;
break;}
2931 else{memcpy(&
slot[s].z_40,data,
sizeof(
slot[s].z_40)); result=
true;
break;}
2933 if(data.size() !=
sizeof(
slot[s].z_41)) {result=
false;
break;}
2934 else{memcpy(&
slot[s].z_41,data,
sizeof(
slot[s].z_41)); result=
true;
break;}
2936 if(data.size() !=
sizeof(
slot[s].z_42)) {result=
false;
break;}
2937 else{memcpy(&
slot[s].z_42,data,
sizeof(
slot[s].z_42)); result=
true;
break;}
2939 if(data.size() !=
sizeof(
slot[s].z_43)) {result=
false;
break;}
2940 else{memcpy(&
slot[s].z_43,data,
sizeof(
slot[s].z_43)); result=
true;
break;}
2942 if(data.size() !=
sizeof(
slot[s].z_44)) {result=
false;
break;}
2943 else{memcpy(&
slot[s].z_44,data,
sizeof(
slot[s].z_44)); result=
true;
break;}
2945 if(data.size() !=
sizeof(
slot[s].z_45)) {result=
false;
break;}
2946 else{memcpy(&
slot[s].z_45,data,
sizeof(
slot[s].z_45)); result=
true;
break;}
2948 if(data.size() !=
sizeof(
slot[s].z_46)) {result=
false;
break;}
2949 else{memcpy(&
slot[s].z_46,data,
sizeof(
slot[s].z_46)); result=
true;
break;}
2950 default: result=
false;
break;
2965 default:
slot[s].options &= ~(1<<0) ;
break;
2974 if(mode){
slot[s].options |= (1<<0);}
2975 else{
slot[s].options &=~(1<<0);}
2989 default:
slot[s].options &= ~(1<<2) ;
break;
2999 if(mode){
slot[s].options |= (1<<2);}
3000 else{
slot[s].options &=~(1<<2);}
3014 default:
slot[s].options &= ~(1<<2) ;
break;
3023 if(mode){
slot[s].options |= (1<<4);}
3024 else{
slot[s].options &=~(1<<4);}
3043 case ATB_WAIT:
slot[s].options &= ~(1<<6);
slot[s].options |= (1<<7);
break;
3044 default:
slot[s].options &=~(1<<6);
slot[s].options&= ~(1<<7);
break;
3067 if(mode){
slot[s].options |= (1<<8);}
3068 else{
slot[s].options &=~(1<<8);}
3087 case MAGIC_RAI:
slot[s].options &=~(1<<10);
slot[s].options &=~(1<<11);
slot[s].options &= ~(1<<12);
break;
3088 case MAGIC_RIA:
slot[s].options |=(1<<10);
slot[s].options &=~(1<<11);
slot[s].options &= ~(1<<12);
break;
3089 case MAGIC_AIR:
slot[s].options &=~(1<<10);
slot[s].options |=(1<<11);
slot[s].options &= ~(1<<12);
break;
3090 case MAGIC_ARI:
slot[s].options |=(1<<10);
slot[s].options |=(1<<11);
slot[s].options &= ~(1<<12);
break;
3091 case MAGIC_IRA:
slot[s].options &=~(1<<10);
slot[s].options &=~(1<<11);
slot[s].options |= (1<<12);
break;
3092 case MAGIC_IAR:
slot[s].options |=(1<<10);
slot[s].options &=~(1<<11);
slot[s].options |= (1<<12);
break;
3093 default:
slot[s].options &=~(1<<10);
slot[s].options &=~(1<<11);
slot[s].options &= ~(1<<12);
break;
3104 if(shown){
slot[s].options |=(1<<14);}
3105 else{
slot[s].options &= ~(1<<14);}
3113 if(speed !=
slot[s].battlespeed)
3115 if(speed<0 || speed>255){speed=0;}
3116 else{
slot[s].battlespeed=speed;}
3124 if(speed !=
slot[s].fieldmspeed)
3126 if(speed<0 || speed>255){speed=0;}
3127 else{
slot[s].fieldmspeed=speed;}
3135 if(speed !=
slot[s].battlemspeed)
3137 if(speed<0 || speed>255){speed=0;}
3138 else{
slot[s].battlemspeed=speed;}
3147 if(shown){
slot[s].field_help |= (1<<0);}
3148 else{
slot[s].field_help &= ~(1<<0);}
3157 if(shown){
slot[s].tut_sub |= (1<<6);}
3158 else{
slot[s].tut_sub &= ~(1<<6);}
3168 slot[s].options= opt;
3175 for(
int i=0;i<16;i++){temp.append(
slot[s].controller_map[i]);}
3182 if(map.length()>16){map.chop(16);}
3185 memcpy(&
slot[s].controller_map,map,16);
3191 if(button<0 || button >15){
return;}
3194 if(
slot[s].controller_map[action] != button)
3196 slot[s].controller_map[action]= button;
3203 if(s<0 || s>14){
return false;}
3204 if(who<0 || who>8){
return false;}
3205 else{
return ((
slot[s].phsvisible) & (1<<who));}
3209 if(s<0 || s>14){
return;}
3210 else if(who<0 || who >8){
return;}
3213 if(checked){
slot[s].phsvisible |= (1<<who);}
3214 else {
slot[s].phsvisible &= ~(1<<who);}
3220 if(s<0 || s>14){
return;}
3221 if(phs_visible!=
slot[s].phsvisible)
3223 slot[s].phsvisible=phs_visible;
3229 if(s<0 || s>14){
return 0;}
3230 else{
return slot[s].phsvisible;}
3235 if(s<0 || s>14){
return false;}
3236 if(who<0 || who>8){
return false;}
3237 else{
return ((
slot[s].phsallowed) & (1<<who));}
3241 if(s<0 || s>14){
return 0;}
3242 else{
return slot[s].phsallowed;}
3247 if(s<0 || s>14){
return;}
3248 else if(who<0 || who >8){
return;}
3251 if(checked){
slot[s].phsallowed |= (1<<who);}
3252 else {
slot[s].phsallowed &= ~(1<<who);}
3258 if(s<0 || s>14){
return;}
3259 if(phs_visible!=
slot[s].phsallowed)
3261 slot[s].phsallowed=phs_visible;
3267 if(s<0 || s>14){
return false;}
3268 if(index<0 || index>9){
return false;}
3269 else{
return ((
slot[s].menu_visible) & (1<<index));}
3273 if(s<0 || s>14){
return;}
3274 else if(index<0 || index >9){
return;}
3277 if(checked){
slot[s].menu_visible |= (1<<index);}
3278 else {
slot[s].menu_visible &= ~(1<<index);}
3284 if(s<0 || s>14){
return;}
3285 if(menu_visible!=
slot[s].menu_visible)
3287 slot[s].menu_visible=menu_visible;
3293 if(s<0 || s>14){
return 0;}
3294 else{
return slot[s].menu_visible;}
3299 if(s<0 || s>14){
return false;}
3300 if(index<0 || index>9){
return false;}
3301 else{
return ((
slot[s].menu_locked) & (1<<index));}
3305 if(s<0 || s>14){
return;}
3306 else if(index<0 || index >9){
return;}
3309 if(checked){
slot[s].menu_locked |= (1<<index);}
3310 else {
slot[s].menu_locked &= ~(1<<index);}
3316 if(s<0 || s>14){
return;}
3317 if(menu_locked!=
slot[s].menu_locked)
3319 slot[s].menu_locked=menu_locked;
3325 if(s<0 || s>14){
return 0;}
3326 else{
return slot[s].menu_locked;}
3330 if(s<0 || s>14){
return 0;}
3331 else{
return slot[s].locationid;}
3336 if(s<0 || s>14){
return;}
3337 else if (locationID ==
locationId(s)){
return;}
3340 slot[s].locationid = locationID;
3346 if(s<0 || s>14){
return 0;}
3347 else{
return slot[s].mapid;}
3352 if(s<0 || s>14){
return;}
3353 else if (mapID ==
mapId(s)){
return;}
3356 slot[s].mapid = mapID;
3362 if(s<0 || s>14){
return 0;}
3363 else{
return slot[s].coord.x;}
3368 if(s<0 || s>14){
return;}
3372 slot[s].coord.x = x;
3378 if(s<0 || s>14){
return 0;}
3379 else{
return slot[s].coord.y;}
3384 if(s<0 || s>14){
return;}
3388 slot[s].coord.y = y;
3394 if(s<0 || s>14){
return 0;}
3395 else{
return slot[s].coord.t;}
3400 if(s<0 || s>14){
return;}
3404 slot[s].coord.t = t;
3410 if(s<0 || s>14){
return 0;}
3411 else{
return slot[s].coord.d;}
3416 if(s<0 || s>14){
return;}
3420 slot[s].coord.d = d;
3427 if(s<0 || s>14){
return 0;}
3430 return slot[s].condorfunds;
3438 slot[s].condorfunds=value;
3444 if(s<0 || s>14){
return 0;}
3445 else{
return slot[s].condorwins;}
3454 if(s<0 || s>14){
return 0;}
3455 else{
return slot[s].condorlosses;}
3465 QList<FF7CHOCOBO> chocos;
3466 for(
int i=0;i<6;i++){chocos.append(
chocobo(s,i));}
3472 QList<quint16> stamina;
3473 for(
int i=0;i<6;i++){stamina.append(this->
chocoStamina(s,i));}
3479 QList<QString> names;
3480 for(
int i=0;i<6;i++){names.append(
chocoName(s,i));}
3491 if(s<0 ||s>14){
return 0;}
3492 else{
return slot[s].stables;}
3496 if(s<0 ||s>14){
return;}
3497 else if(value<0 || value>6){
return;}
3503 if(s<0 ||s>14){
return 0;}
3504 else{
return slot[s].stablesoccupied;}
3508 if(s<0 ||s>14){
return;}
3509 else if(value<0 || value>6){
return;}
3515 if(s<0 ||s>14){
return 0;}
3516 else{
return slot[s].chocobomask;}
3521 if(s<0 ||s>14){
return;}
3528 for(
int i=0;i<4;i++){pens.append(
slot[s].pennedchocos[i]);}
3533 if(s<0 || s>14 || pen<0 || pen>3){
return 0;}
3534 else{
return slot[s].pennedchocos[pen];}
3538 if(s<0 || s>14 || pen<0 || pen>3 || value<0 || value>8){
return;}
3544 if(s<0 || s>14){
return 0;}
3546 qint32 seconds =
slot[s].timer[0] |(
slot[s].timer[1] << 8) | (
slot[s].timer[2]<<16);
3552 if(s<0 ||s>14){
return;}
3555 slot[s].timer[0]=(time & 0xff);
3556 slot[s].timer[1]=((time & 0xff00) >> 8);
3557 slot[s].timer[2]=((time & 0xff0000) >> 16);
3563 if(s<0 ||s>14){
return false;}
3564 else{
return (
slot[s].seenpandora&(1<<0));}
3568 if(seen){
slot[s].seenpandora |= (1<<0);}
3569 else{
slot[s].seenpandora &= ~(1<<0);}
3574 if(s<0 || s>14){
return 0;}
3575 else{
return slot[s].steps;}
3579 if(s<0 || s>14){
return;}
3582 if(steps<0){steps=0;}
3583 else if(steps>0xFFFF){steps=0xFFFF;}
3584 if(steps !=
slot[s].mprogress)
3593 if(s<0 || s>14){
return 0;}
3594 else{
return slot[s].aeris_church;}
3598 if(s<0 || s>14){
return;}
3601 if(progress<0){progress=0;}
3602 if(progress>0xFF){progress=0xFF;}
3603 if(progress !=
slot[s].aeris_church)
3605 slot[s].aeris_church = progress;
3613 if(s<0 || s>14){
return 0;}
3614 else{
return slot[s].donprogress;}
3618 if(s<0 || s>14){
return;}
3621 if(progress<0){progress=0;}
3622 if(progress>0xFF){progress=0xFF;}
3623 if(progress !=
slot[s].donprogress)
3625 slot[s].donprogress = progress;
3632 if(s<0 || s>14){
return false;}
3635 if(
slot[s].intbombing == 0x14){
return true;}
3641 if(s<0 || s>14){
return;}
3645 if(isTrue &&
slot[s].intbombing !=0x14)
3647 slot[s].intbombing = 0x14;
3652 if(
slot[s].intbombing!=0x56)
3654 slot[s].intbombing = 0x56;
3662 if(s<0 || s>14){
return 0;}
3663 else{
return (
slot[s].u_weapon_hp[0] |(
slot[s].u_weapon_hp[1] << 8) | (
slot[s].u_weapon_hp[2] << 16));}
3667 if(s<0 || s>14){
return;}
3672 int a = (hp & 0xff);
3673 int b = (hp & 0xff00) >> 8;
3674 int c = (hp & 0xff0000) >> 16;
3675 slot[s].u_weapon_hp[0] = a;
3676 slot[s].u_weapon_hp[1] = b;
3677 slot[s].u_weapon_hp[2] = c;
3684 if(s<0 || s>14){
return false;}
3687 if((
slot[s].ruby_emerald)&(1<<4)){
return true;}
3693 if(s<0 ||s>14){
return;}
3698 if(isTrue){
slot[s].ruby_emerald |= (1<<4);}
3699 else{
slot[s].ruby_emerald &= ~(1<<4);}
3707 if(s<0 || s>14){
return false;}
3710 if((
slot[s].ruby_emerald)&(1<<3)){
return true;}
3717 if(s<0 ||s>14){
return;}
3722 if(isTrue){
slot[s].ruby_emerald |= (1<<3);}
3723 else{
slot[s].ruby_emerald &= ~(1<<3);}
3730 if(s<0 || s>14){
return 0;}
3731 else{
return slot[s].tut_save;}
3735 if(s<0 || s>14){
return;}
3736 if(value<0){value =0;}
3737 if(value>0xFF){value =0xFF;}
3738 if(value !=
slot[s].tut_save)
3740 slot[s].tut_save=value;
3746 if(s<0 || s>14){
return false;}
3747 else{
return (
slot[s].yuffieforest) & (1<<0);}
3751 if(s<0 ||s>14){
return;}
3756 if(isTrue){
slot[s].yuffieforest |= (1<<0);}
3757 else{
slot[s].yuffieforest &= ~(1<<0);}
3764 if(s<0 || s>14){
return 0;}
3765 else{
return slot[s].tut_sub;}
3769 if(bit <0 || bit> 7){
return false;}
3770 else{
return ((
slot[s].tut_sub)& (1<<bit) );}
3774 if(s<0 || s>14){
return;}
3775 else if(bit<0 || bit >7){
return;}
3779 if(isTrue){
slot[s].tut_sub |= (1<<bit);}
3780 else{
slot[s].tut_sub &= ~(1<<bit);}
3786 if(s<0||s>14){
return;}
3789 if(value<0){value=0;}
3790 else if(value>0xFF){value=0xFF;}
3791 if(value !=
slot[s].tut_sub)
3793 slot[s].tut_sub = value;
3800 if(s<0 || s>14){
return false;}
3801 else{
return (
slot[s].reg_yuffie & (1<<0));}
3805 if(s<0 || s>14){
return;}
3808 if(isUnlocked){
slot[s].reg_yuffie |= (1<<0);}
3809 else{
slot[s].reg_yuffie &= ~(1<<0);}
3816 if(s<0 || s>14){
return false;}
3817 else{
return (
slot[s].reg_vinny&(1<<2));}
3822 if(s<0 || s>14){
return;}
3825 if(isUnlocked){
slot[s].reg_vinny |= (1<<2);}
3826 else{
slot[s].reg_vinny &= ~(1<<2);}
3833 if(bit <0 || bit> 7){
return false;}
3834 else{
return ((
slot[s].world_map_chocobos)& (1<<bit) );}
3839 if(s<0 || s>14){
return;}
3840 else if(bit<0 || bit >7){
return;}
3843 if(isTrue){
slot[s].world_map_chocobos |= (1<<bit);}
3844 else{
slot[s].world_map_chocobos &= ~(1<<bit);}
3851 if(bit <0 || bit> 7){
return false;}
3852 else{
return ((
slot[s].world_map_vehicles)& (1<<bit) );}
3857 if(s<0 || s>14){
return;}
3858 else if(bit<0 || bit >7){
return;}
3861 if(isTrue){
slot[s].world_map_vehicles |= (1<<bit);}
3862 else{
slot[s].world_map_vehicles &= ~(1<<bit);}
3868 if(s<0 || s>14){
return 0;}
3871 if(firstChunk){
return slot[s].l_world;}
3872 else{
return slot[s].l_world2;}
3877 if(s<0 || s>14){
return 0;}
3878 else{
return (
slot[s].l_world &0x7FFFF);}
3882 if(s<0 || s>14){
return 0;}
3883 else{
return ((
slot[s].l_world >> 19)&0x1F);}
3887 if(s<0 || s>14){
return 0;}
3888 else{
return ((
slot[s].l_world) >> 24);}
3892 if(s<0 || s>14){
return 0;}
3893 else{
return ((
slot[s].l_world2) & 0x3FFFF);}
3897 if(s<0 || s>14){
return 0;}
3898 else{
return ((
slot[s].l_world2) >> 18);}
3902 if(s<0 || s>14){
return;}
3903 if(value<0){value =0;}
3904 if(value>0xFFFF){value =0xFFFF;}
3907 slot[s].l_world=value;
3914 slot[s].l_world2=value;
3921 if(s<0 || s>14){
return;}
3922 if(value<0){value=0;}
3923 if(value>295000){value=295000;}
3932 if(s<0 || s>14){
return;}
3933 if(value<0){value=0;}
3934 if(value>255){value=255;}
3943 if(s<0 || s>14){
return;}
3944 if(value<0){value=0;}
3945 if(value>360){value=360;}
3954 if(s<0 || s>14){
return;}
3955 if(value<0){value=0;}
3956 if(value>230000){value=230000;}
3966 if(s<0 || s>14){
return;}
3967 if(value<0){value=0;}
3968 if(value>255){value=255;}
3977 if(s<0 || s>14){
return 0;}
3980 if(firstChunk){
return slot[s].tc_world;}
3981 else{
return slot[s].tc_world2;}
3986 if(s<0 || s>14){
return 0;}
3987 else{
return (
slot[s].tc_world &0x7FFFF);}
3991 if(s<0 || s>14){
return 0;}
3992 else{
return ((
slot[s].tc_world >> 19)&0x1F);}
3996 if(s<0 || s>14){
return 0;}
3997 else{
return ((
slot[s].tc_world) >> 24);}
4001 if(s<0 || s>14){
return 0;}
4002 else{
return ((
slot[s].tc_world2) & 0x3FFFF);}
4006 if(s<0 || s>14){
return 0;}
4007 else{
return ((
slot[s].tc_world2) >> 18);}
4011 if(s<0 || s>14){
return;}
4012 if(value<0){value =0;}
4013 if(value>0xFFFF){value =0xFFFF;}
4016 slot[s].tc_world=value;
4023 slot[s].tc_world2=value;
4030 if(s<0 || s>14){
return;}
4031 if(value<0){value=0;}
4032 if(value>295000){value=295000;}
4041 if(s<0 || s>14){
return;}
4042 if(value<0){value=0;}
4043 if(value>255){value=255;}
4052 if(s<0 || s>14){
return;}
4053 if(value<0){value=0;}
4054 if(value>360){value=360;}
4063 if(s<0 || s>14){
return;}
4064 if(value<0){value=0;}
4065 if(value>230000){value=230000;}
4075 if(s<0 || s>14){
return;}
4076 if(value<0){value=0;}
4077 if(value>255){value=255;}
4086 if(s<0 || s>14){
return 0;}
4089 if(firstChunk){
return slot[s].bh_world;}
4090 else{
return slot[s].bh_world2;}
4095 if(s<0 || s>14){
return 0;}
4096 else{
return (
slot[s].bh_world &0x7FFFF);}
4100 if(s<0 || s>14){
return 0;}
4101 else{
return ((
slot[s].bh_world >> 19)&0x1F);}
4105 if(s<0 || s>14){
return 0;}
4106 else{
return ((
slot[s].bh_world) >> 24);}
4110 if(s<0 || s>14){
return 0;}
4111 else{
return ((
slot[s].bh_world2) & 0x3FFFF);}
4115 if(s<0 || s>14){
return 0;}
4116 else{
return ((
slot[s].bh_world2) >> 18);}
4120 if(s<0 || s>14){
return;}
4121 if(value<0){value =0;}
4122 if(value>0xFFFF){value =0xFFFF;}
4125 slot[s].bh_world=value;
4132 slot[s].bh_world2=value;
4139 if(s<0 || s>14){
return;}
4140 if(value<0){value=0;}
4141 if(value>295000){value=295000;}
4150 if(s<0 || s>14){
return;}
4151 if(value<0){value=0;}
4152 if(value>255){value=255;}
4161 if(s<0 || s>14){
return;}
4162 if(value<0){value=0;}
4163 if(value>360){value=360;}
4172 if(s<0 || s>14){
return;}
4173 if(value<0){value=0;}
4174 if(value>230000){value=230000;}
4184 if(s<0 || s>14){
return;}
4185 if(value<0){value=0;}
4186 if(value>255){value=255;}
4196 if(s<0 || s>14){
return 0;}
4199 if(firstChunk){
return slot[s].sub_world;}
4200 else{
return slot[s].sub_world2;}
4205 if(s<0 || s>14){
return 0;}
4206 else{
return (
slot[s].sub_world &0x7FFFF);}
4210 if(s<0 || s>14){
return 0;}
4211 else{
return ((
slot[s].sub_world >> 19)&0x1F);}
4215 if(s<0 || s>14){
return 0;}
4216 else{
return ((
slot[s].sub_world) >> 24);}
4220 if(s<0 || s>14){
return 0;}
4221 else{
return ((
slot[s].sub_world2) & 0x3FFFF);}
4225 if(s<0 || s>14){
return 0;}
4226 else{
return ((
slot[s].sub_world2) >> 18);}
4230 if(s<0 || s>14){
return;}
4231 if(value<0){value =0;}
4232 if(value>0xFFFF){value =0xFFFF;}
4235 slot[s].sub_world=value;
4242 slot[s].sub_world2=value;
4249 if(s<0 || s>14){
return;}
4250 if(value<0){value=0;}
4251 if(value>295000){value=295000;}
4260 if(s<0 || s>14){
return;}
4261 if(value<0){value=0;}
4262 if(value>255){value=255;}
4271 if(s<0 || s>14){
return;}
4272 if(value<0){value=0;}
4273 if(value>360){value=360;}
4282 if(s<0 || s>14){
return;}
4283 if(value<0){value=0;}
4284 if(value>230000){value=230000;}
4294 if(s<0 || s>14){
return;}
4295 if(value<0){value=0;}
4296 if(value>255){value=255;}
4306 if(s<0 || s>14){
return 0;}
4309 if(firstChunk){
return slot[s].wc_world;}
4310 else{
return slot[s].wc_world2;}
4315 if(s<0 || s>14){
return 0;}
4316 else{
return (
slot[s].wc_world &0x7FFFF);}
4320 if(s<0 || s>14){
return 0;}
4321 else{
return ((
slot[s].wc_world >> 19)&0x1F);}
4325 if(s<0 || s>14){
return 0;}
4326 else{
return ((
slot[s].wc_world) >> 24);}
4330 if(s<0 || s>14){
return 0;}
4331 else{
return ((
slot[s].wc_world2) & 0x3FFFF);}
4335 if(s<0 || s>14){
return 0;}
4336 else{
return ((
slot[s].wc_world2) >> 18);}
4340 if(s<0 || s>14){
return;}
4341 if(value<0){value =0;}
4342 if(value>0xFFFF){value =0xFFFF;}
4345 slot[s].wc_world=value;
4352 slot[s].wc_world2=value;
4359 if(s<0 || s>14){
return;}
4360 if(value<0){value=0;}
4361 if(value>295000){value=295000;}
4370 if(s<0 || s>14){
return;}
4371 if(value<0){value=0;}
4372 if(value>255){value=255;}
4381 if(s<0 || s>14){
return;}
4382 if(value<0){value=0;}
4383 if(value>360){value=360;}
4392 if(s<0 || s>14){
return;}
4393 if(value<0){value=0;}
4394 if(value>230000){value=230000;}
4404 if(s<0 || s>14){
return;}
4405 if(value<0){value=0;}
4406 if(value>255){value=255;}
4417 if(s<0 || s>14){
return 0;}
4420 if(firstChunk){
return slot[s].durw_world;}
4421 else{
return slot[s].durw_world2;}
4426 if(s<0 || s>14){
return 0;}
4427 else{
return (
slot[s].durw_world &0x7FFFF);}
4431 if(s<0 || s>14){
return 0;}
4432 else{
return ((
slot[s].durw_world >> 19)&0x1F);}
4436 if(s<0 || s>14){
return 0;}
4437 else{
return ((
slot[s].durw_world) >> 24);}
4441 if(s<0 || s>14){
return 0;}
4442 else{
return ((
slot[s].durw_world2) & 0x3FFFF);}
4446 if(s<0 || s>14){
return 0;}
4447 else{
return ((
slot[s].durw_world2) >> 18);}
4451 if(s<0 || s>14){
return;}
4452 if(value<0){value =0;}
4453 if(value>0xFFFF){value =0xFFFF;}
4456 slot[s].durw_world=value;
4463 slot[s].durw_world2=value;
4470 if(s<0 || s>14){
return;}
4471 if(value<0){value=0;}
4472 if(value>295000){value=295000;}
4481 if(s<0 || s>14){
return;}
4482 if(value<0){value=0;}
4483 if(value>255){value=255;}
4492 if(s<0 || s>14){
return;}
4493 if(value<0){value=0;}
4494 if(value>360){value=360;}
4503 if(s<0 || s>14){
return;}
4504 if(value<0){value=0;}
4505 if(value>230000){value=230000;}
4515 if(s<0 || s>14){
return;}
4516 if(value<0){value=0;}
4517 if(value>255){value=255;}
4526 if(s<0 || s>14){
return 0;}
4529 return slot[s].cratersaveMapId;
4534 if(s<0 || s>14){
return;}
4535 else if(value<0 || value>999){
return;}
4538 slot[s].cratersaveMapId=value;
4544 if(s<0 || s>14){
return 0;}
4547 return slot[s].cratersaveX;
4552 if(s<0 || s>14){
return;}
4553 else if(value<-32767 || value > 32767){
return;}
4556 slot[s].cratersaveX=value;
4563 if(s<0 || s>14){
return 0;}
4566 return slot[s].cratersaveY;
4571 if(s<0 || s>14){
return;}
4572 else if(value<-32767 || value > 32767){
return;}
4575 slot[s].cratersaveY=value;
4581 if(s<0 || s>14){
return 0;}
4584 return slot[s].cratersaveZ;
4589 if(s<0 || s>14){
return;}
4590 else if(value<-32767 || value > 32767){
return;}
4593 slot[s].cratersaveZ=value;
4601 QStringList us = QStringList()<<QString(
"FF7-S01")<<QString(
"FF7-S02")<<QString(
"FF7-S03")<<QString(
"FF7-S04")<<QString(
"FF7-S05")<<QString(
"FF7-S06")<<QString(
"FF7-S07")<<QString(
"FF7-S08")<<QString(
"FF7-S09")<<QString(
"FF7-S10")<<QString(
"FF7-S11")<<QString(
"FF7-S12")<<QString(
"FF7-S13")<<QString(
"FF7-S14")<<QString(
"FF7-S15");
4602 QStringList uk = us;
4603 QStringList fr = us;
4604 QStringList ge = us;
4605 QStringList es = us;
4606 QStringList jp = us;
4607 QStringList in = us;
4608 for (
int i=0;i<s;i++)
4610 if(
region(i).contains(
"BASCUS-94163"))
4612 us.replace(
region(i).mid(17,2).toInt()-1,QString(
""));
4614 else if(
region(i).contains(
"BESCES-00867"))
4616 uk.replace(
region(i).mid(17,2).toInt()-1,QString(
""));
4618 else if(
region(i).contains(
"BESCES-00868"))
4620 fr.removeAt(
region(i).mid(17,2).toInt()-1);
4622 else if(
region(i).contains(
"BESCES-00869"))
4624 ge.removeAt(
region(i).mid(17,2).toInt()-1);
4626 else if(
region(i).contains(
"BESCES-00900"))
4628 es.removeAt(
region(i).mid(17,2).toInt()-1);
4630 else if(
region(i).contains(
"BISLPS-00700"))
4632 jp.removeAt(
region(i).mid(17,2).toInt()-1);
4634 else if(
region(i).contains(
"BISLPS-01057"))
4636 in.removeAt(
region(i).mid(17,2).toInt()-1);
4639 QString newRegionString =
region(s).mid(0,12);
4640 if(
region(s).contains(
"BASCUS-94163"))
4642 for(
int i=0;i<15;i++)
4644 if(us.at(i) == QString(
"")){
continue;}
4645 else{newRegionString.append(us.at(i));
break;}
4648 else if(
region(s).contains(
"BESCES-00867"))
4650 for(
int i=0;i<15;i++)
4652 if(uk.at(i).isEmpty()){
continue;}
4653 else{newRegionString.append(uk.at(i));
break;}
4656 else if(
region(s).contains(
"BESCES-00868"))
4658 for(
int i=0;i<15;i++)
4660 if(fr.at(i).isEmpty()){
continue;}
4661 else{newRegionString.append(fr.at(i));
break;}
4664 else if(
region(s).contains(
"BESCES-00869"))
4666 for(
int i=0;i<15;i++)
4668 if(ge.at(i).isEmpty()){
continue;}
4669 else{newRegionString.append(ge.at(i));
break;}
4672 else if(
region(s).contains(
"BESCES-00900"))
4674 for(
int i=0;i<15;i++)
4676 if(es.at(i).isEmpty()){
continue;}
4677 else{newRegionString.append(es.at(i));
break;}
4680 else if(
region(s).contains(
"BISLPS-00700"))
4682 for(
int i=0;i<15;i++)
4684 if(jp.at(i).isEmpty()){
continue;}
4685 else{newRegionString.append(jp.at(i));
break;}
4688 else if(
region(s).contains(
"BISLPS-01057"))
4690 for(
int i=0;i<15;i++)
4692 if(in.at(i).isEmpty()){
continue;}
4693 else{newRegionString.append(in.at(i));
break;}
4700 if(s<0 || s>14){
return false;}
4702 if(
slot[s].wonsubgame == 1){
return true;}
4707 if(s<0 || s>14){
return;}
4708 int temp =
slot[s].wonsubgame;
4709 if(won){
slot[s].wonsubgame = 1; }
4710 else{
slot[s].wonsubgame = 0;}
4715 if(s<0 || s>14){
return 0;}
4718 return slot[s].stablechocorating[stable];
4723 if(s<0 || s>14 || stable <0 || stable >5 || rating <0 || rating >8){
return;}
4724 else if(rating ==
slot[s].stablechocorating[stable]){
return;}
4727 slot[s].stablechocorating[stable] = rating;
4733 QList<quint8>ratings;
4734 if(s<0 || s>14){
for(
int i=0;i<6;i++){ratings.append(0);};}
4737 for(
int i=0;i<6;i++){ratings.append(
slot[s].stablechocorating[i]);}
static const QByteArray MC_SAVE_GAME_FILE_ID
quint8 locationD(int s)
direction player is facing on field map
void setCharBaseMp(int s, int char_num, quint16 baseMp)
int worldCoordsLeaderY(int s)
static const int FF7_MC_SAVE_GAME_FOOTER
qint32 charMateriaAp(int s, int who, int mat_num)
quint16 itemDecode(quint16 itemraw)
quint8 chocoPCount(int s, int chocoSlot)
void setWorldCoordsBhX(int s, int value)
static const int FF7_VGS_SAVE_GAME_SIZE
qint8 stablesOccupied(int s)
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S06[0x100]
QByteArray rawCharacterData(int s, int char_num)
void setMessageSpeed(int s, int speed)
quint8 charFlag(int s, int char_num, int flag_num)
QList< QByteArray > slotIcon(int s)
return slots save icon. each new frame will be appended to the list.
quint16 charBaseMp(int s, int char_num)
void setSpeedScore(int s, int rank, quint16 score)
QList< qint8 > chocoboPens(int s)
return the chocobos in the pen outside of the chocobo farm
void setCharMaxHp(int s, int char_num, quint16 maxHp)
void setWorldCoordsBhY(int s, int value)
quint8 charWeapon(int s, int char_num)
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S10[0x100]
QByteArray slotFooter(int s)
Footer for a slot as QByteArray.
void setWorldCoordsTcID(int s, int value)
quint8 itemQty(int s, int item_num)
static const int FF7_DEX_SAVE_GAME_DATA_SIZE
quint8 chocoIntelligence(int s, int chocoSlot)
void setVincentUnlocked(int s, bool isUnlocked)
set if vincent has been unlocked
bool exportVGS(const QString &fileName)
attempt to save fileName as a Virtual Game Station format memory card file
void setPsx_block_next(int s, int next)
void setCharSpi(int s, int char_num, quint8 spi)
void setCraterSavePointMapID(int s, int value)
set the map that the placeable save point is on
void setCharCurrentHp(int s, int char_num, quint16 curHp)
void setCraterSavePointZ(int s, int value)
set z coordinate of the placeable save point
int worldCoordsDurwX(int s)
quint8 stolenMateriaId(int s, int mat_num)
static const int FF7_MC_SAVE_GAME_DATA_SIZE
void setLocationId(int s, quint16 locationID)
set location id save is located on
quint16 charMaxMp(int s, int char_num)
bool setSlotPsxRawData(int s, QByteArray data)
set the slots raw psx data
static const QByteArray PSX_SAVE_GAME_FILE_ID
void setCharDexBonus(int s, int char_num, quint8 dexbonus)
void setPhsAllowed(int s, int who, bool checked)
void setCharLck(int s, int char_num, quint8 lck)
void importSlot(int s=0, QString fileName="", int fileSlot=0)
import from a file into a slot
static const QByteArray PSV_SAVE_GAME_FILE_ID
quint32 countdownTimer(int s)
void setDialogColorUL(int s, QColor color)
void setWorldCoordsDurwAngle(int s, int value)
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S07[0x100]
QByteArray slotPsxRawData(int s)
QByteArray of a psx save (multiblock saves are ok)
void setWorldCoordsWchocoY(int s, int value)
bool setKeyItems(int s, QByteArray data)
int worldCoordsSubID(int s)
bool isFileModified(void)
void setCharLimitBar(int s, int char_num, quint8 limitbar)
void setKilledRubyWeapon(int s, bool isTrue)
void setWorldCoordsDurwZ(int s, int value)
void setDialogColorLL(int s, QColor color)
void setChocoStamina(int s, int chocoSlot, quint16 stamina)
QList< quint8 > chocoboRatings(int s)
int worldCoordsDurwZ(int s)
void setMateriaCave(int s, MATERIACAVE cave, bool isEmpty)
void setWorldVehicle(int s, int bit, bool isTrue)
void setWorldCoordsSubY(int s, int value)
void setBmProgress1(int s, int bit, bool isTrue)
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S12[0x100]
quint8 psx_block_next(int s)
quint8 charUnknown(int s, int char_num, int unknown_num)
quint16 ff7Checksum(int s)
FF7CHAR character(int s, int char_num)
void setChocoCantMate(int s, int chocoSlot, bool cantMate)
static const int FF7_DEX_SAVE_GAME_SLOT_NUMBER
void newGamePlus(int s, QString CharFileName, QString fileName="")
creates a new game + in a slot
quint8 charDexBonus(int s, int char_num)
FF7Save()
create a new FF7Save object
void setCharLimitLevel(int s, int char_num, qint8 limitlevel)
quint8 charLevel(int s, int char_num)
quint16 bikeHighScore(int s)
static const int FF7_MC_SAVE_GAME_SLOT_FOOTER
qint8 chocoboPen(int s, int pos)
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S02[0x100]
quint8 condorWins(int s)
wins in fort condor mini game
void setCharDex(int s, int char_num, quint8 dex)
void fileChanged(bool)
emits when internal data changes
int worldCoordsLeaderX(int s)
bool worldChocobo(int s, int bit)
static const QByteArray PSP_SAVE_GAME_FILE_ID
void setBattleSpeed(int s, int speed)
void setCharTimeLimitUsed(int s, int char_num, int level, quint16 timesused)
void setChocoIntelligence(int s, int chocoSlot, quint8 value)
quint32 charCurrentExp(int s, int char_num)
void setFileModified(bool, int s)
bool phsAllowed(int s, int who)
quint32 worldCoordsBh(int s, bool firstChunk)
QColor dialogColorUL(int s)
void setGp(int s, int gp)
void setWorldCoordsBhID(int s, int value)
void setSnowboardScore(int s, int course, quint8 score)
quint16 chocoMaxSpeed(int s, int chocoSlot)
static const int FF7_PSX_SAVE_GAME_HEADER
void setWorldCoordsBhZ(int s, int value)
void setStablesOccupied(int s, qint8 value)
quint16 locationId(int s)
Id of the location save is located on.
int worldCoordsBhY(int s)
int worldCoordsWchocoX(int s)
bool menuVisible(int s, int index)
bool bmProgress3(int s, int bit)
qint8 stablesOwned(int s)
QColor dialogColorLL(int s)
quint8 charStr(int s, int char_num)
bool keyItem(int s, int keyItem)
int worldCoordsTcAngle(int s)
static const int FF7_PC_SAVE_GAME_SLOT_HEADER
QByteArray toFF7(QString string)
convert pc string to ff7text
static const int FF7_PSX_SAVE_GAME_SLOT_FOOTER
void setChocoSex(int s, int chocoSlot, quint8 value)
quint8 snowboardScore(int s, int course)
void setTurtleParadiseFlyersSeen(int s, quint8 flyersSeen)
void setSubMiniGameVictory(int s, bool won)
quint16 charTimesLimitUsed(int s, int char_num, int level)
QString psxDesc(int s)
Get Description Text for PSX Slot.
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S15[0x100]
void setDescCurHP(int s, quint16 new_curHP)
void setLocationY(int s, qint16 y)
set y coordinate on field map
QByteArray slotFF7Data(int s)
Return Raw data from the slot.
PSXBLOCKTYPE
Used to set the type of block on a PSX memory card (image) when creating the index.
void fix_vmc_header(void)
void setBmProgress3(int s, int bit, bool isTrue)
static const int FF7_PSX_SAVE_GAME_SIZE
quint32 worldCoordsDurw(int s, bool firstChunk)
static const int FF7_PSX_SAVE_GAME_SLOT_SIZE
QList< quint16 > chocobosStaminas(int s)
quint16 condorFunds(int s)
void setDescName(int s, QString new_name)
void setCharVit(int s, int char_num, quint8 vit)
void setMidgarTrainFlags(int s, int bit, bool isTrue)
static const int FF7_MC_SAVE_GAME_SLOT_NUMBER
bool exportPC(const QString &fileName)
attempt to save fileName as a PC ff7save
static const int FF7_VGS_SAVE_GAME_SLOT_NUMBER
void setCharStrBonus(int s, int char_num, quint8 strbonus)
quint8 charMag(int s, int char_num)
static const int FF7_MC_SAVE_GAME_SIZE
void setCharWeapon(int s, int char_num, quint8 weapon)
void setWorldCoordsWchoco(int s, bool firstChunk, int value)
static const int FF7_DEX_SAVE_GAME_SLOT_FOOTER
void init(bool)
if TRUE toPC will return Japanese test
void setParty(int s, int pos, int new_id)
Main FF7 Save Data Structure.
void setLocationD(int s, quint8 d)
set direction player is facing on field map
void setChocoRaceswon(int s, int chocoSlot, quint8 value)
quint8 chocoboRating(int s, int stable)
Get Choco Billy's Rating of a chocobo.
void setFieldHelp(int s, bool shown)
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S08[0x100]
bool setSlotFooter(int s, QByteArray data)
set the slot footer
static const int FF7_PSV_SAVE_GAME_SLOT_SIZE
static const int FF7_DEX_SAVE_GAME_SLOT_HEADER
QVector< SubContainer > createMetadata(QString fileName, QString UserID)
static const int FF7_PC_SAVE_GAME_DATA_SIZE
void setCharMaxMp(int s, int char_num, quint16 maxMp)
void setMenuVisible(int s, int index, bool checked)
static const int FF7_PSV_SAVE_GAME_SIZE
void setDescMaxHP(int s, quint16 new_maxHP)
quint8 file_header_dex[0x2F40]
int worldCoordsSubY(int s)
QList< FF7CHOCOBO > chocobos(int s)
QList< QString > chocobosNames(int s)
static const int FF7_PC_SAVE_GAME_SIZE
quint8 charDex(int s, int char_num)
QString fileblock(QString fileName)
void setPsx_block_size(int s, int blockSize)
bool menuLocked(int s, int index)
static const int FF7_DEX_SAVE_GAME_SIZE
static const int FF7_PC_SAVE_GAME_HEADER
void setWorldCoordsSubAngle(int s, int value)
quint16 item(int s, int item_num)
QList< bool > chocoboCantMates(int s)
quint8 love(int s, bool battle, LOVER who)
void setPsx_block_type(int s, FF7Save::PSXBLOCKTYPE block_type)
Character Info in the save game.
bool chocoCantMate(int s, int chocoSlot)
void setTurtleParadiseFlyerSeen(int s, int flyer, bool seen)
qint32 stolenMateriaAp(int s, int mat_num)
void setLove(int s, bool battle, LOVER who, quint8 love)
bool setUnknown(int s, int z, QByteArray data)
void setCondorLosses(int s, quint8 losses)
set how many time you have lost the fort condor mini game
quint16 mainProgress(int s)
void setGil(int s, int gil)
static const int FF7_VGS_SAVE_GAME_SLOT_HEADER
static const QByteArray DEX_SAVE_GAME_FILE_ID
bool setSlotFF7Data(int s, QByteArray data)
void vmcRegionEval(int s)
void setAtbMode(int s, int mode)
void setMapId(int s, quint16 mapID)
set map id save is located on
int worldCoordsSubZ(int s)
void setWorldCoordsTcY(int s, int value)
void setWorldCoordsSubX(int s, int value)
quint16 charCurrentMp(int s, int char_num)
void setChocoSpeed(int s, int chocoSlot, quint16 speed)
void setDialogColorUR(int s, QColor color)
void setCharLevel(int s, int char_num, qint8 new_level)
quint8 chocoAccel(int s, int chocoSlot)
void setWorldCoordsWchocoAngle(int s, int value)
void setDescTime(int s, quint32 new_time)
void setDonProgress(int s, int progress)
void setWorldCoordsLeaderY(int s, int value)
int worldCoordsWchocoY(int s)
quint8 chocoPersonality(int s, int chocoSlot)
static const int FF7_PSV_SAVE_GAME_SLOT_HEADER
int worldCoordsDurwID(int s)
void setCharBaseHp(int s, int char_num, quint16 baseHp)
qint16 locationY(int s)
y coordinate on field map
QString charName(int s, int char_num)
void setSteps(int s, int steps)
void setWorldCoordsDurwX(int s, int value)
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S04[0x100]
qint32 partyMateriaAp(int s, int mat_num)
static const quint8 default_save[0x10F4]
QString toPC(QByteArray text)
convert ff7text to pc string
void setWorldCoordsBhAngle(int s, int value)
int worldCoordsSubAngle(int s)
int worldCoordsTcZ(int s)
void setDisc(int s, int disc)
void setWorldChocobo(int s, int bit, bool isTrue)
QList< quint16 > items(int s)
bool exportFile(const QString &fileName, QString newType="", int s=0)
attempt to export a file as ff7save. A convenance function to call the proper export function ...
bool worldVehicle(int s, int bit)
void setWorldCoordsWchocoZ(int s, int value)
static const int FF7_PSX_SAVE_GAME_FOOTER
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S14[0x100]
quint16 itemEncode(quint16 id, quint8 qty)
bool bmProgress2(int s, int bit)
void setCharAccessory(int s, int char_num, quint8 accessory)
quint8 charStrBonus(int s, int char_num)
void setCraterSavePointX(int s, int value)
set x coordinate of the placeable save point
int worldCoordsWchocoID(int s)
void setMenuLocked(int s, int index, bool checked)
bool loadFile(const QString &fileName)
attempt to load fileName as ff7save
quint16 charLimits(int s, int char_num)
QString descLocation(int s)
void setBattlePoints(int s, quint16)
quint16 itemId(int s, int item_num)
void setCountdownTimer(int s, quint32 time)
void setStableMask(int s, qint8 value)
static const int FF7_PSP_SAVE_GAME_SLOT_SIZE
void setYuffieUnlocked(int s, bool isUnlocked)
set if yuffie has been unlocked
void setDescParty(int s, int char_num, quint8 new_id)
quint8 charVitBonus(int s, int char_num)
void setWorldCoordsDurw(int s, bool firstChunk, int value)
bool materiaCave(int s, MATERIACAVE cave)
void setSoundMode(int s, int mode)
setSound mode for a slot
void setCharMagBonus(int s, int char_num, quint8 magbonus)
void setDescGil(int s, quint32 new_gil)
bool isSlotModified(int s)
static const int FF7_PSP_SAVE_GAME_DATA_SIZE
quint32 worldCoordsLeader(int s, bool firstChunk)
int worldCoordsTcX(int s)
static const int FF7_PSV_SAVE_GAME_DATA_SIZE
void setSnowboardTime(int s, int course, QString time)
quint8 chocoRaceswon(int s, int chocoSlot)
void setDescCurMP(int s, quint16 new_curMP)
static const int FF7_VGS_SAVE_GAME_DATA_SIZE
void setCharLimits(int s, int char_num, quint16 new_limits)
static const int FF7_PSV_SAVE_GAME_SLOT_FOOTER
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S03[0x100]
void newGame(int s, QString fileName="")
creates a new game in a slot
void setStablesOwned(int s, qint8 value)
bool exportDEX(const QString &fileName)
attempt to save fileName as a DEX Drive format memory card file
void setWorldCoordsLeaderAngle(int s, int value)
void setChurchProgress(int s, int progress)
void setCharCurrentMp(int s, int char_num, quint16 curMp)
int worldCoordsBhZ(int s)
qint16 locationX(int s)
x coordinate on field map
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S13[0x100]
void setWorldCoordsWchocoX(int s, int value)
quint16 charCurrentHp(int s, int char_num)
void setLocationX(int s, qint16 x)
set x coordinate on field map
int worldCoordsWchocoZ(int s)
void setChocoName(int s, int choco_num, QString new_name)
void copySlot(int s)
copy a slot Sin to the buffer
quint16 chocoSpeed(int s, int chocoSlot)
quint16 chocoSprintSpeed(int s, int chocoSlot)
void setChocoAccel(int s, int chocoSlot, quint8 value)
void setRuns(int s, int runs)
void setChocoSprintSpeed(int s, int chocoSlot, quint16 sprintSpeed)
bool midgarTrainFlags(int s, int bit)
bool itemMask1(int s, int bit)
int worldCoordsLeaderID(int s)
static const int FF7_VGS_SAVE_GAME_SLOT_FOOTER
void pasteSlot(int s)
paste from the buffer into a slot
void setWorldCoordsDurwY(int s, int value)
static const int FF7_PSP_SAVE_GAME_SLOT_HEADER
void setCameraMode(int s, int mode)
void setCharMateria(int s, int who, int mat_num, quint8 id, qint32 ap)
QString chocoName(int s, int choco_num)
void setRegion(int s, QString region)
void setOptions(int s, int opt)
Set in game options for a slot.
quint8 file_header_vgs[0x2040]
bool phsVisible(int s, int who)
bool exportVMC(const QString &fileName)
attempt to save fileName as a Virtual Memory Card (slots without a region string will not be exported...
void setLocationT(int s, quint16 t)
set t coordinate on field map
qint16 craterSavePointX(int s)
x coordinate of the placeable save point
void setCraterSavePointY(int s, int value)
set y coordinate of the placeable save point
void setChocoboRating(int s, int stable, int rating)
Set Choco Billy's Rating of a chocobo.
void setChocoCoop(int s, int chocoSlot, quint8 value)
void setBmProgress2(int s, int bit, bool isTrue)
void setItemMask1(int s, int bit, bool pickedUp)
int worldCoordsTcY(int s)
void setStolenMateria(int s, int mat_num, quint8 id, qint32 ap)
QByteArray fileHeader(void)
file Header as QByteArray
bool fixMetaData(QString fileName="", QString OutPath="", QString UserID="")
parse the metadata for 2012 / 2013 release
void setTutSave(int s, int value)
bool soundMode(int s)
soundMode mono or stero
void setCharFlag(int s, int char_num, int flag_num, quint8 flag_value)
void setKilledEmeraldWeapon(int s, bool isTrue)
void setTutSub(int s, int bit, bool isTrue)
static const int FF7_PSX_SAVE_GAME_SLOT_HEADER
quint8 charID(int s, int char_num)
static const int FF7_DEX_SAVE_GAME_FOOTER
quint16 mapId(int s)
map id save is on
void setCanFightNinjaInForest(int s, bool isTrue)
void setWorldCoordsTc(int s, bool firstChunk, int value)
quint8 churchProgress(int s)
quint8 file_header_psv[0x0084]
materia format saved in materia list or on a character
void setCharID(int s, int char_num, qint8 new_id)
static const int FF7_PSP_SAVE_GAME_FOOTER
quint8 turtleParadiseFlyersSeen(int s)
quint8 charLckBonus(int s, int char_num)
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S05[0x100]
void setWorldCoordsSub(int s, bool firstChunk, int value)
static const int FF7_PSP_SAVE_GAME_HEADER
quint16 craterSavePointMapID(int s)
map the placeable save point is on
quint8 chocoCoop(int s, int chocoSlot)
static const int FF7_VGS_SAVE_GAME_HEADER
quint8 charSpiBonus(int s, int char_num)
quint8 charAccessory(int s, int char_num)
static const int FF7_PSV_SAVE_GAME_HEADER
quint16 charMaxHp(int s, int char_num)
quint8 charMateriaId(int s, int who, int mat_num)
void setCharUnknown(int s, int char_num, int unknown_num, quint8 value)
quint16 chocoStamina(int s, int chocoSlot)
void setDescLocation(int s, QString new_desc_location)
quint8 charSpi(int s, int char_num)
void setChocoMaxSpeed(int s, int chocoSlot, quint16 maxspeed)
void setChocoboPen(int s, int pen, qint8 value)
return the chocobos in the pen outside of the chocobo farm
void setCharVitBonus(int s, int char_num, quint8 vitbonus)
void setCursorMode(int s, int mode)
void setWorldCoordsSubID(int s, int value)
static const int FF7_DEX_SAVE_GAME_SLOT_SIZE
bool yuffieUnlocked(int s)
has yuffie been unlocked
void setDescLevel(int s, int new_level)
int worldCoordsLeaderZ(int s)
quint16 chocoMaxSprintSpeed(int s, int chocoSlot)
void fix_psv_header(int s)
static const int FF7_DEX_SAVE_GAME_HEADER
quint8 condorLosses(int s)
losses in fort condor mini game
quint8 party(int s, int pos)
quint8 psx_block_size(int s)
void setCondorFunds(int s, quint16 value)
set how gil you have donated to fort condor
void setUWeaponHp(int s, int hp)
void setTime(int s, quint32 new_time)
int worldCoordsBhAngle(int s)
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S09[0x100]
static const int FF7_PSP_SAVE_GAME_SIZE
quint32 charNextExp(int s, int char_num)
QByteArray keyItems(int s)
void setChocoPCount(int s, int chocoSlot, quint8 value)
QByteArray slotHeader(int s)
Header for a slot as QByteArray.
static const quint8 PC_SAVE_GAME_FILE_HEADER[0x09]
bool vincentUnlocked(int s)
has vincent been unlocked
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S11[0x100]
static const int FF7_MC_SAVE_GAME_HEADER
QVector< QString > SubContainer
void setWorldCoordsTcX(int s, int value)
static const QByteArray PC_SAVE_GAME_FILE_ID
int worldCoordsBhID(int s)
void setCharMag(int s, int char_num, quint8 mag)
bool killedEmeraldWeapon(int s)
void setWorldCoordsBh(int s, bool firstChunk, int value)
bool seenPandorasBox(int s)
void importCharacter(int s, int char_num, QByteArray new_char)
export a character
void setControllerMapping(int s, QByteArray map)
set the controller mapping for a slot
quint8 file_header_psp[0x2080]
quint16 locationT(int s)
triangle play is standing on. field map
void setMagicOrder(int s, int order)
static const int FF7_PSP_SAVE_GAME_SLOT_NUMBER
void setBattleMessageSpeed(int s, int speed)
QVector< SubContainer > parseXML(QString fileName, QString metadataPath, QString UserID)
quint16 speedScore(int s, int rank)
quint8 file_header_pc[0x0009]
void setSaveNumber(int s, int saveNum)
int worldCoordsBhX(int s)
void setCondorWins(int s, quint8 wins)
set how many time you have won the fort condor mini game
bool subMiniGameVictory(int s)
void setCharLckBonus(int s, int char_num, quint8 lckbonus)
bool setSlotHeader(int s, QByteArray data)
set the slot header
QString filetimestamp(QString fileName)
void setDialogColorLR(int s, QColor color)
void setCharSpiBonus(int s, int char_num, quint8 spibonus)
static const int FF7_MC_SAVE_GAME_SLOT_SIZE
void setWorldCoordsTcAngle(int s, int value)
QString SG_Region_String[15]
quint32 worldCoordsTc(int s, bool firstChunk)
static const int FF7_PC_SAVE_GAME_SLOT_SIZE
void setMainProgress(int s, int mProgress)
qint16 craterSavePointZ(int s)
z coordinate of the placeable save point
bool setFileHeader(QByteArray data)
set the file header
void setKeyItem(int s, int keyItem, bool pickedUp)
quint8 charLimitBar(int s, int char_num)
quint8 descParty(int s, int char_num)
bool exportPSX(int s, const QString &fileName)
attempt to save fileName as a PSX ff7save
void setWorldCoordsDurwID(int s, int value)
bool battleTargets(int s)
bool setFileFooter(QByteArray data)
set the file footer
int worldCoordsLeaderAngle(int s)
void setWorldCoordsLeaderID(int s, int value)
void setWorldCoordsWchocoID(int s, int value)
bool startBombingMission(int s)
QColor dialogColorUR(int s)
QByteArray fileFooter(void)
file Footer as QByteArray
int worldCoordsSubX(int s)
void setCharStr(int s, int char_num, quint8 str)
void setLocation(int s, QString new_location)
static const int FF7_PSP_SAVE_GAME_SLOT_FOOTER
void setPhsVisible(int s, int who, bool checked)
void setChocoPersonality(int s, int chocoSlot, quint8 value)
void setSeenPandorasBox(int s, bool seen)
void setDescMaxMP(int s, quint16 new_maxMP)
void setCharArmor(int s, int char_num, quint8 armor)
quint32 worldCoordsSub(int s, bool firstChunk)
void setCharKills(int s, int char_num, quint16 kills)
void setWorldCoordsLeaderZ(int s, int value)
static const quint8 PSX_SAVE_GAME_FILE_HEADER_S01[0x100]
void setWorldCoordsLeaderX(int s, int value)
void setWorldCoordsSubZ(int s, int value)
quint16 charKills(int s, int char_num)
void setChocoMaxSprintSpeed(int s, int chocoSlot, quint16 maxsprintSpeed)
static const int FF7_PSX_SAVE_GAME_SLOT_NUMBER
bool exportCharacter(int s, int char_num, QString fileName)
export a character
void setPartyMateria(int s, int mat_num, quint8 id, qint32 ap)
bool turtleParadiseFlyerSeen(int s, int flyer)
quint16 charBaseHp(int s, int char_num)
quint16 battlePoints(int s)
static const QByteArray VGS_SAVE_GAME_FILE_ID
static const int FF7_PC_SAVE_GAME_FOOTER
quint8 charMagBonus(int s, int char_num)
int worldCoordsDurwY(int s)
QString md5sum(QString fileName, QString UserID)
quint8 charLck(int s, int char_num)
void setItem(int s, int item_num, quint16 rawitem)
quint16 options(int s)
In game options for a slot.
bool saveFile(const QString &fileName)
attempt to save fileName as ff7save
quint8 charArmor(int s, int char_num)
static const int FF7_VGS_SAVE_GAME_SLOT_SIZE
FF7CHOCOBO chocobo(int s, int chocoSlot)
void setWorldCoordsTcZ(int s, int value)
int battleMessageSpeed(int s)
void setCharNextExp(int s, int char_num, quint32 next)
QColor dialogColorLR(int s)
static const int FF7_PC_SAVE_GAME_SLOT_FOOTER
quint8 charVit(int s, int char_num)
int worldCoordsDurwAngle(int s)
void setControlMode(int s, int mode)
qint8 charLimitLevel(int s, int char_num)
bool canFightNinjaInForest(int s)
void setBattleTargets(int s, bool shown)
void setCharCurrentExp(int s, int char_num, quint32 exp)
void setItems(int s, QList< quint16 > items)
quint8 chocoType(int s, int chocoSlot)
QByteArray controllerMapping(int s)
get controller mapping for a slot
static const int FF7_PC_SAVE_GAME_SLOT_NUMBER
QString snowboardTime(int s, int course)
void setBikeHighScore(int s, quint16 score)
void setChocoType(int s, int chocoSlot, quint8 value)
quint8 partyMateriaId(int s, int mat_num)
quint8 file_header_mc[0x2000]
quint8 chocoSex(int s, int chocoSlot)
static const int FF7_PSV_SAVE_GAME_SLOT_NUMBER
bool bmProgress1(int s, int bit)
quint8 donProgress(int s)
static const int FF7_PSX_SAVE_GAME_DATA_SIZE
void setWorldCoordsLeader(int s, bool firstChunk, int value)
void setBattles(int s, int battles)
void setPsxDesc(QString newDesc, int s)
Set The Description Text for PSX Slot (text shows in memory card manager of playstation) ...
void clearSlot(int s)
clear a slot
void setCharName(int s, int char_num, QString new_name)
void fix_psx_header(int s)
bool killedRubyWeapon(int s)
static const int FF7_PSV_SAVE_GAME_FOOTER
qint16 craterSavePointY(int s)
y coordinate of the placeable save point
static const int FF7_VGS_SAVE_GAME_FOOTER
static const int FF7_MC_SAVE_GAME_SLOT_HEADER
void setCharacter(int s, int char_num, FF7CHAR new_char)
int worldCoordsTcID(int s)
void setBattleHelp(int s, bool shown)
void fix_pc_bytemask(int s)
quint8 psx_block_type(int s)
QByteArray unknown(int s, int z)
void setStartBombingMission(int s, bool isTrue)
quint32 worldCoordsWchoco(int s, bool firstChunk)
int worldCoordsWchocoAngle(int s)