ff7tk  1.0.0.16
Work with Final Fantasy 7 game data
FF7Save.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: 2012 - 2023 Chris Rizzitello <sithlord48@gmail.com>
2 // SPDX-License-Identifier: LGPL-3.0-or-later
3 
4 #pragma once
5 
6 #include <QObject>
7 #include <cstdlib>
8 #include <ff7tkdata_export.h>
9 #include <FF7SaveInfo>
10 #include <FF7Save_Types>
11 
12 class QColor;
13 class QDateTime;
14 class QFile;
15 class QFileInfo;
16 class QDomDocument;
17 class QTextCodec;
18 
52 class FF7TKDATA_EXPORT FF7Save: public QObject
53 {
54  Q_OBJECT
55 public:
56  //Enums
57  enum WORLDVEHICLE {WVEHCILE_BUGGY = 0, WVEHCILE_TBRONCO = 2, WVEHCILE_HIGHWIND = 4};
58  enum WORLDCHOCOBO {WCHOCO_WILD = 0, WCHOCO_YELLOW = 2, WCHOCO_GREEN = 3, WCHOCO_BLUE = 4, WCHOCO_BLACK = 5, WCHOCO_GOLD = 6};
59  enum LOVER {LOVE_BARRET, LOVE_TIFA, LOVE_AERIS, LOVE_YUFFIE};
60  enum MATERIACAVE {CAVE_MIME, CAVE_HPMP, CAVE_QUADMAGIC, CAVE_KOTR};
61  enum SOUNDMODE {SOUND_MONO, SOUND_STEREO};
62  enum CONTROLMODE {CONTROL_NORMAL, CONTROL_CUSTOM};
63  enum CURSORMODE {CURSOR_INITIAL, CURSOR_MEMORY};
64  enum ATBMODE {ATB_ACTIVE, ATB_RECOMMENED, ATB_WAIT};
65  enum CAMERAMODE {CAMERA_AUTO, CAMERA_FIXED};
66  enum MAGICORDER {MAGIC_RAI, MAGIC_RIA, MAGIC_AIR, MAGIC_ARI, MAGIC_IRA, MAGIC_IAR};
70  enum MENUITEMS {MENUITEM, MENUMAGIC, MENUMATERIA, MENUEQUIPMENT, MENUSTATUS, MENUFORM, MENULIMIT, MENUCONFIG, MENUPHS, MENUSAVE};
75  ACTION_CAMERA, ACTION_TARGET, ACTION_PAGEUP, ACTION_PAGEDOWN,
76  ACTION_MENU, ACTION_OK, ACTION_CANCEL, ACTION_SWITCH,
77  ACTION_HELP, ACTION_UNKNOWN1, ACTION_UNKNOWN2,
78  ACTION_PAUSE, ACTION_UP, ACTION_RIGHT, ACTION_DOWN, ACTION_LEFT
79  };
80 
84  enum PSXBUTTON {
85  BTN_L2, BTN_R2, BTN_L1, BTN_R1,
86  BTN_TRIANGLE, BTN_CIRCLE, BTN_X, BTN_SQUARE,
87  BTN_SELECT, BTN_UNKNOWN1, BTN_UNKNOWN2, BTN_START,
88  BTN_UP, BTN_RIGHT, BTN_DOWN, BTN_LEFT
89  };
93  enum KEYITEMS {
94  COTTONDRESS, SATINDRESS, SILKDRESS, WIG, DYEDWIG, BLONDEWIG, GLASSTIARA, RUBYTIATA, DIAMONDTIARA, COLOGNE, FLOWERCOLOGNE, SEXYCOLOGNE, MEMBERSCARD,
95  LINGERIE, MYSTERYPANTIES, BIKINIBRIEFS, PHARMACYCOUPON, DISINFECTANT, DEODORANT, DIGESTIVE, HUGEMATERIA_CONDOR, HUGEMATERIA_COREL, HUGEMATERIA_UNDERWATER,
96  HUGEMATERIA_ROCKET, KEYTOANCIENTS, LETTERTOADAUGHTER, LETTERTOAWIFE, LUNARHARP, BASEMENTKEY, KEYTOSECTOR5, KEYCARD60, KEYCARD62, KEYCARD65, KEYCARD66,
97  KEYCARD68, MIDGARPARTS1, MIDGARPARTS2, MIDGARPARTS3, MIDGARPARTS4, MIDGARPARTS5, PHS, GOLDTICKET, KEYSTONE, LEIATHANSCALES, GLACIERMAP, COUPON_A, COUPON_B,
98  COUPON_C, BLACKMATERIA, MYTHRIL, SNOWBOARD
99  };
100  //Functions
101  explicit FF7Save();
102  //File Members
103 
109  FF7SaveInfo::FORMAT fileDataFormat(QFile &file);
110 
115  bool loadFile(const QString &fileName);
116 
122  bool saveFile(const QString &fileName, int s = 0);
123 
131  bool exportFile(const QString &fileName, FF7SaveInfo::FORMAT exportFormat, int s = 0);
132 
140  void importSlot(int s = 0, QString fileName = "", int fileSlot = 0);
141 
145  void clearSlot(int s);
146 
150  void copySlot(int s);
151 
155  void pasteSlot(int s);
156 
162  void newGame(int s, const QString &region = QStringLiteral("NTSC-U"), const QString &fileName = QString()); //new game in slot s (over load default w/ fileName must be RAW PSX)
163 
171  void newGamePlus(int s, QString CharFileName, QString fileName = ""); //new game + in slot s (over load default w/ fileName must be RAW PSX
172 
179  bool exportCharacter(int s, int char_num, QString fileName); // Write slot[s].char[char_num] to fileName
180 
186  void importCharacter(int s, int char_num, QByteArray new_char); //import new_char to slot[s].char[char_num]
187 
191  typedef QVector< QString > SubContainer;
192 
198  bool fixMetaData(QString fileName = "", QString UserID = "");
199 
206  QByteArray generatePsSaveSignature(QByteArray data, QByteArray keySeed);
207 
208  QByteArray fileHeader(void);
214  bool setFileHeader(QByteArray data);
215 
216  QByteArray slotHeader(int s);
223  bool setSlotHeader(int s, QByteArray data);
224 
225  QByteArray slotFooter(int s);
232  bool setSlotFooter(int s, QByteArray data);
233 
234  QByteArray slotPsxRawData(int s);
243  bool setSlotPsxRawData(int s, QByteArray data);
244 
245  QByteArray slotFF7Data(int s);
252  bool setSlotFF7Data(int s, QByteArray data);
253  bool setSlotFF7Data(int s, const FF7SLOT &data);
254 
255  QList<QByteArray> slotIcon(int s);
261  QList<qint8> chocoboPens(int s);
262 
268  void setChocoboPen(int s, int pen, qint8 value);
269 
274  quint8 condorWins(int s);
275 
280  void setCondorWins(int s, quint8 wins);
281 
286  quint8 condorLosses(int s);
287 
292  void setCondorLosses(int s, quint8 losses);
293 
297  quint16 condorFunds(int s);
298 
303  void setCondorFunds(int s, quint16 value);
304  //Field Location
305 
310  quint16 locationId(int s);
311 
316  void setLocationId(int s, quint16 locationID);
317 
322  quint16 mapId(int s);
323 
328  void setMapId(int s, quint16 mapID);
329 
334  qint16 locationX(int s);
335 
340  void setLocationX(int s, qint16 x);
341 
346  qint16 locationY(int s);
347 
352  void setLocationY(int s, qint16 y);
353 
358  quint16 locationT(int s);
359 
364  void setLocationT(int s, quint16 t);
365 
370  quint8 locationD(int s);
371 
376  void setLocationD(int s, quint8 d);
377 
382  quint16 craterSavePointMapID(int s);
383 
388  qint16 craterSavePointX(int s);
389 
394  qint16 craterSavePointY(int s);
395 
400  qint16 craterSavePointZ(int s);
401 
406  void setCraterSavePointMapID(int s, int value);
407 
412  void setCraterSavePointX(int s, int value);
413 
418  void setCraterSavePointY(int s, int value);
419 
424  void setCraterSavePointZ(int s, int value);
425 
426  //options
433  QByteArray controllerMapping(int s);
434 
441  void setControllerMapping(int s, QByteArray map);
442 
450  quint8 controllerMapping(int s, int action);
451 
459  void setControllerMapping(int s, int action, int button);
460 
465  quint16 options(int s);
466 
471  void setOptions(int s, int opt);
472 
477  bool soundMode(int s);
478 
483  void setSoundMode(int s, int mode);
484 
485  void setSoundMode(int s, bool mode);
486  bool controlMode(int s);
487  void setControlMode(int s, int mode);
488  void setControlMode(int s, bool mode);
489  bool cursorMode(int s);
490  void setCursorMode(int s, int mode);
491  void setCursorMode(int s, bool mode);
492  int atbMode(int s);
493  void setAtbMode(int s, int mode);
494  bool cameraMode(int s);
495  void setCameraMode(int s, int mode);
496  void setCameraMode(int s, bool mode);
497  int magicOrder(int s);
498  void setMagicOrder(int s, int order);
499  bool battleHelp(int s);
500  void setBattleHelp(int s, bool shown);
501  int battleSpeed(int s);
502  void setBattleSpeed(int s, int speed);
503  int battleMessageSpeed(int s);
504  void setBattleMessageSpeed(int s, int speed);
505  int messageSpeed(int s);
506  void setMessageSpeed(int s, int speed);
507  bool fieldHelp(int s);
508  void setFieldHelp(int s, bool shown);
509  bool battleTargets(int s);
510  void setBattleTargets(int s, bool shown);
511 
512  quint8 specialBattleWins(int s);
513  void setSpecialBattleWins(int s, int wins);
514 
515  //Phs/Menu
516  bool phsVisible(int s, int who);
517  void setPhsVisible(int s, int who, bool checked);
518  quint16 phsVisible(int s);
519  void setPhsVisible(int s, quint16 phs_visible);
520  bool phsAllowed(int s, int who);
521  quint16 phsAllowed(int s);
522  void setPhsAllowed(int s, int who, bool checked);
523  void setPhsAllowed(int s, quint16 phs_visible);
524  bool menuVisible(int s, int index);
525  void setMenuVisible(int s, int index, bool checked);
526  quint16 menuVisible(int s);
527  void setMenuVisible(int s, quint16 menu_visible);
528  bool menuLocked(int s, int index);
529  void setMenuLocked(int s, int index, bool checked);
530  quint16 menuLocked(int s);
531  void setMenuLocked(int s, quint16 menu_visible);
532  //item info
533  quint16 item(int s, int item_num); //return raw ff7item
534  QList<quint16> items(int s);// return all items
535  void setItems(int s, QList<quint16> items);
536  void setItem(int s, int item_num, quint16 rawitem);
537  void setItem(int s, int item_num, quint16 new_id, quint8 new_qty);
538  //materia get/set
539  bool materiaCave(int s, MATERIACAVE cave);
540  void setMateriaCave(int s, MATERIACAVE cave, bool isEmpty);
541  quint8 partyMateriaId(int s, int mat_num);
542  qint32 partyMateriaAp(int s, int mat_num);
543  quint8 stolenMateriaId(int s, int mat_num);
544  qint32 stolenMateriaAp(int s, int mat_num);
545  void setPartyMateria(int s, int mat_num, quint8 id, qint32 ap);
546  void setStolenMateria(int s, int mat_num, quint8 id, qint32 ap);
547  //Description Stuff.
548  quint32 descTime(int s);
549  void setDescTime(int s, quint32 new_time);
550  QString descName(int s);//return the name in the description
551  void setDescName(int s, QString new_name); // desc name = new_name
552  QString descLocation(int s);//return the location string used in the description
553  void setDescLocation(int s, QString new_desc_location);//write new desc location string called from setLocation
554  quint8 descLevel(int s);
555  void setDescLevel(int s, int new_level);
556  quint8 descParty(int s, int char_num);
557  void setDescParty(int s, int char_num, quint8 new_id);
558  quint16 descCurHP(int s);
559  void setDescCurHP(int s, quint16 new_curHP);
560  quint16 descMaxHP(int s);
561  void setDescMaxHP(int s, quint16 new_maxHP);
562  quint16 descCurMP(int s);
563  void setDescCurMP(int s, quint16 new_curMP);
564  quint16 descMaxMP(int s);
565  void setDescMaxMP(int s, quint16 new_maxMP);
566  quint32 descGil(int s);
567  void setDescGil(int s, quint32 new_gil);
568  //Dialog Colors
569  QColor dialogColorUL(int s);
570  QColor dialogColorUR(int s);
571  QColor dialogColorLL(int s);
572  QColor dialogColorLR(int s);
573  void setDialogColorUL(int s, QColor color);
574  void setDialogColorUR(int s, QColor color);
575  void setDialogColorLL(int s, QColor color);
576  void setDialogColorLR(int s, QColor color);
577  // String Functions.
578  QString chocoName(int s, int choco_num); //return choco_num's name.
579  void setChocoName(int s, int choco_num, QString new_name); //write choco_num 's new_name to slot s
580  QString location(int s);// return save location string
581  void setLocation(int s, QString new_location);//set save location string to new_location
582  quint32 gil(int s);
583  void setGil(int s, quint32 gil);
584  quint16 gp(int s);
585  void setGp(int s, int gp);
586  quint16 battles(int s);
587  void setBattles(int s, int battles);
588  quint16 runs(int s);
589  void setRuns(int s, int runs);
590  quint8 party(int s, int pos);
597  void setParty(int s, int pos, int new_id);
598  qint8 chocoboPen(int s, int pos);
599  void setChocoboPen(int s, int pos, int type);
600  bool seenPandorasBox(int s);
601  void setSeenPandorasBox(int s, bool seen);
602  //Mini Game Stuff
603  quint8 love(int s, bool battle, LOVER who);
604  void setLove(int s, bool battle, LOVER who, quint8 love);
605  quint16 speedScore(int s, int rank);
606  void setSpeedScore(int s, int rank, quint16 score);
607  quint16 bikeHighScore(int s);
608  void setBikeHighScore(int s, quint16 score);
609  QString snowboardTime(int s, int course);
610  void setSnowboardTime(int s, int course, QString time);
611  quint8 snowboardScore(int s, int course);
612  void setSnowboardScore(int s, int course, quint8 score);
613  quint32 countdownTimer(int s);
614  void setCountdownTimer(int s, quint32 time);
615  //Char Releated Functions
616  FF7CHAR character(int s, int char_num); //Return Full Char
617  quint8 charID(int s, int char_num); //Return Char ID
618  quint8 charLevel(int s, int char_num); //Return Char Level
619  quint8 charStr(int s, int char_num);
620  quint8 charVit(int s, int char_num);
621  quint8 charMag(int s, int char_num);
622  quint8 charSpi(int s, int char_num);
623  quint8 charDex(int s, int char_num);
624  quint8 charLck(int s, int char_num);
625  quint8 charStrBonus(int s, int char_num);
626  quint8 charVitBonus(int s, int char_num);
627  quint8 charMagBonus(int s, int char_num);
628  quint8 charSpiBonus(int s, int char_num);
629  quint8 charDexBonus(int s, int char_num);
630  quint8 charLckBonus(int s, int char_num);
631  qint8 charLimitLevel(int s, int char_num);
632  quint8 charLimitBar(int s, int char_num);
633  QString charName(int s, int char_num); //Return Char name
634  quint8 charWeapon(int s, int char_num);
635  quint8 charArmor(int s, int char_num);
636  quint8 charAccessory(int s, int char_num);
637  quint8 charFlag(int s, int char_num, int flag_num);
638  quint16 charLimits(int s, int char_num); //Return Char ID
639  quint16 charKills(int s, int char_num); //Return Char Level
640  quint16 charTimesLimitUsed(int s, int char_num, int level);
641  quint16 charCurrentHp(int s, int char_num);
642  quint16 charBaseHp(int s, int char_num);
643  quint16 charCurrentMp(int s, int char_num);
644  quint16 charBaseMp(int s, int char_num);
645  quint8 charUnknown(int s, int char_num, int unknown_num);
646  quint16 charMaxHp(int s, int char_num);
647  quint16 charMaxMp(int s, int char_num);
648  quint32 charCurrentExp(int s, int char_num);
649  quint32 charNextExp(int s, int char_num);
650  quint8 charMateriaId(int s, int who, int mat_num);
651  qint32 charMateriaAp(int s, int who, int mat_num);
652  void setCharacter(int s, int char_num, const FF7CHAR &new_char);
653  void setCharID(int s, int char_num, qint8 new_id);
654  void setCharLevel(int s, int char_num, qint8 new_level);
655  void setCharStr(int s, int char_num, quint8 str);
656  void setCharVit(int s, int char_num, quint8 vit);
657  void setCharMag(int s, int char_num, quint8 mag);
658  void setCharSpi(int s, int char_num, quint8 spi);
659  void setCharDex(int s, int char_num, quint8 dex);
660  void setCharLck(int s, int char_num, quint8 lck);
661  void setCharStrBonus(int s, int char_num, quint8 strbonus);
662  void setCharVitBonus(int s, int char_num, quint8 vitbonus);
663  void setCharMagBonus(int s, int char_num, quint8 magbonus);
664  void setCharSpiBonus(int s, int char_num, quint8 spibonus);
665  void setCharDexBonus(int s, int char_num, quint8 dexbonus);
666  void setCharLckBonus(int s, int char_num, quint8 lckbonus);
667  void setCharLimitLevel(int s, int char_num, qint8 limitlevel);
668  void setCharLimitBar(int s, int char_num, quint8 limitbar);
669  void setCharName(int s, int char_num, QString new_name); //write char_num 's new_name to slot s
670  void setCharWeapon(int s, int char_num, quint8 weapon);
671  void setCharArmor(int s, int char_num, quint8 armor);
672  void setCharAccessory(int s, int char_num, quint8 accessory);
673  void setCharFlag(int s, int char_num, int flag_num, quint8 flag_value);
674  void setCharLimits(int s, int char_num, quint16 new_limits);
675  void setCharKills(int s, int char_num, quint16 kills);
676  void setCharTimeLimitUsed(int s, int char_num, int level, quint16 timesused);
677  void setCharCurrentHp(int s, int char_num, quint16 curHp);
678  void setCharBaseHp(int s, int char_num, quint16 baseHp);
679  void setCharCurrentMp(int s, int char_num, quint16 curMp);
680  void setCharBaseMp(int s, int char_num, quint16 baseMp);
681  void setCharUnknown(int s, int char_num, int unknown_num, quint8 value);
682  void setCharMaxHp(int s, int char_num, quint16 maxHp);
683  void setCharMaxMp(int s, int char_num, quint16 maxMp);
684  void setCharCurrentExp(int s, int char_num, quint32 exp);
685  void setCharNextExp(int s, int char_num, quint32 next);
686  void setCharMateria(int s, int who, int mat_num, quint8 id, qint32 ap);
687  void setCharMateria(int s, int who, int mat_num, materia mat);
688  //chocobo Stuff.
689  QList<FF7CHOCOBO> chocobos(int s);
690  QList<quint16> chocobosStaminas(int s);
691  QList<QString> chocobosNames(int s);
692  QList<bool> chocoboCantMates(int s);
693  qint8 stablesOwned(int s);
694  qint8 stablesOccupied(int s);
695  qint8 stableMask(int s);
696  void setStablesOwned(int s, qint8 value);
697  void setStablesOccupied(int s, qint8 value);
698  void setStableMask(int s, qint8 value);
699  FF7CHOCOBO chocobo(int s, int chocoSlot);
700  quint16 chocoStamina(int s, int chocoSlot);
701  quint16 chocoSpeed(int s, int chocoSlot);
702  quint16 chocoMaxSpeed(int s, int chocoSlot);
703  quint16 chocoSprintSpeed(int s, int chocoSlot);
704  quint16 chocoMaxSprintSpeed(int s, int chocoSlot);
705  quint8 chocoSex(int s, int chocoSlot);
706  quint8 chocoType(int s, int chocoSlot);
707  quint8 chocoCoop(int s, int chocoSlot);
708  quint8 chocoAccel(int s, int chocoSlot);
709  quint8 chocoIntelligence(int s, int chocoSlot);
710  quint8 chocoRaceswon(int s, int chocoSlot);
711  quint8 chocoPCount(int s, int chocoSlot);
712  quint8 chocoPersonality(int s, int chocoSlot);
713  bool chocoCantMate(int s, int chocoSlot);
714  void setChocoStamina(int s, int chocoSlot, quint16 stamina);
715  void setChocoSpeed(int s, int chocoSlot, quint16 speed);
716  void setChocoMaxSpeed(int s, int chocoSlot, quint16 maxspeed);
717  void setChocoSprintSpeed(int s, int chocoSlot, quint16 sprintSpeed);
718  void setChocoMaxSprintSpeed(int s, int chocoSlot, quint16 maxsprintSpeed);
719  void setChocoSex(int s, int chocoSlot, quint8 value);
720  void setChocoType(int s, int chocoSlot, quint8 value);
721  void setChocoCoop(int s, int chocoSlot, quint8 value);
722  void setChocoAccel(int s, int chocoSlot, quint8 value);
723  void setChocoIntelligence(int s, int chocoSlot, quint8 value);
724  void setChocoRaceswon(int s, int chocoSlot, quint8 value);
725  void setChocoPCount(int s, int chocoSlot, quint8 value);
726  void setChocoPersonality(int s, int chocoSlot, quint8 value);
727  void setChocoCantMate(int s, int chocoSlot, bool cantMate);
728  // Return File Info
729  int lenFile(void);//Return File length.
730  int lenFileHeader(void);//Return File Header length
731  int lenCoreSave(void);//Return Slot length (data portion)
732  int lenSlotHeader(void);//Return slot header length
733  int lenSlotFooter(void);//Return slot footer length
734  int lenSlot(void);//Return Slot length
735  int numberOfSlots(void);//Return number of slots in the file_footer_dex
736  QString fileName(void);//return loaded filename
737  void setFileModified(bool, int s); //file changed toggle, with slot called
738  void setRegion(int s, const QString &region);
739  bool isFileModified(void);//has the file changed since load
740  bool isSlotModified(int s);//has slot[s] changed since load.
741  bool isSlotEmpty(int s);//is Slot s empty
742  bool isFF7(int s);//valid ff7 slot?
743  bool isPAL(int s);//PAL SLOT?
744  bool isNTSC(int s);//NTSC SLOT??
745  bool isJPN(int s);//is a Japanese File
746  QString region(int s);// region string of slot s
747  //Set Needed Info Stuffs
748 
749  char psx_block_type(int s);//mask of psx slot (used by index)
750  void setPsx_block_type(int s, char block_type);
751  quint8 psx_block_next(int s);// if using more then one block return location of next block
752  void setPsx_block_next(int s, int next);
753  quint8 psx_block_size(int s);//how many blocks save uses.
754  void setPsx_block_size(int s, int blockSize);
755  void fix_pc_bytemask(int s);// update so last slot is shown selected on load (must be public to set to currently viewed slot).
756  //more data members
757  QByteArray unknown(int s, int z);
758  bool setUnknown(int s, int z, QByteArray data);
759  quint16 steps(int s);
760  void setSteps(int s, int steps);
761  quint8 churchProgress(int s);
762  void setChurchProgress(int s, int progress);
763  quint8 donProgress(int s);
764  void setDonProgress(int s, int progress);
765  quint16 battlePoints(int s);
766  void setBattlePoints(int s, quint16);
767  quint32 time(int s);
768  void setTime(int s, quint32 new_time);
769  void setDisc(int s, int disc);
770  quint8 disc(int s);
771  quint16 mainProgress(int s);
772  void setMainProgress(int s, int mProgress);
773  QByteArray keyItems(int s);
774  bool setKeyItems(int s, QByteArray data);
775  bool keyItem(int s, int keyItem);
776  void setKeyItem(int s, int keyItem, bool pickedUp);
777  bool itemMask1(int s, int bit);
778  void setItemMask1(int s, int bit, bool pickedUp);
779  bool bmProgress1(int s, int bit);
780  void setBmProgress1(int s, int bit, bool isTrue);
781  void setBmProgress1(int s, int value);
782  bool bmProgress2(int s, int bit);
783  void setBmProgress2(int s, int bit, bool isTrue);
784  void setBmProgress2(int s, int value);
785  bool bmProgress3(int s, int bit);
786  void setBmProgress3(int s, int bit, bool isTrue);
787  void setBmProgress3(int s, int value);
788  bool midgarTrainFlags(int s, int bit);
789  void setMidgarTrainFlags(int s, int bit, bool isTrue);
790  void setMidgarTrainFlags(int s, int value);
791  bool turtleParadiseFlyerSeen(int s, int flyer);
792  quint8 turtleParadiseFlyersSeen(int s);
793  void setTurtleParadiseFlyerSeen(int s, int flyer, bool seen);
794  void setTurtleParadiseFlyersSeen(int s, quint8 flyersSeen);
795  bool startBombingMission(int s);
796  void setStartBombingMission(int s, bool isTrue);
797  quint32 uWeaponHp(int s);
798  void setUWeaponHp(int s, int hp);
799  bool killedEmeraldWeapon(int s);
800  void setKilledEmeraldWeapon(int s, bool isTrue);
801  bool killedRubyWeapon(int s);
802  void setKilledRubyWeapon(int s, bool isTrue);
803  quint8 tutSave(int s);
804  void setTutSave(int s, int value);
805  bool canFightNinjaInForest(int s);
806  void setCanFightNinjaInForest(int s, bool isTrue);
807  quint8 tutSub(int s);
808  bool tutSub(int s, int bit);
809  void setTutSub(int s, int bit, bool isTrue);
810  void setTutSub(int s, int value);
811 
816  bool yuffieUnlocked(int s);
817 
822  void setYuffieUnlocked(int s, bool isUnlocked);
823 
828  bool vincentUnlocked(int s);
829 
834  void setVincentUnlocked(int s, bool isUnlocked);
835 
836  bool worldChocobo(int s, int bit);
837  void setWorldChocobo(int s, int bit, bool isTrue);
838  bool worldVehicle(int s, int bit);
839  void setWorldVehicle(int s, int bit, bool isTrue);
840  //World Coords
841  quint32 worldCoordsLeader(int s, bool firstChunk);
842  int worldCoordsLeaderX(int s);
843  int worldCoordsLeaderID(int s);
844  int worldCoordsLeaderAngle(int s);
845  int worldCoordsLeaderY(int s);
846  int worldCoordsLeaderZ(int s);
847  void setWorldCoordsLeader(int s, bool firstChunk, int value);
848  void setWorldCoordsLeaderX(int s, int value);
849  void setWorldCoordsLeaderID(int s, int value);
850  void setWorldCoordsLeaderAngle(int s, int value);
851  void setWorldCoordsLeaderY(int s, int value);
852  void setWorldCoordsLeaderZ(int s, int value);
853  quint32 worldCoordsTc(int s, bool firstChunk);
854  int worldCoordsTcX(int s);
855  int worldCoordsTcID(int s);
856  int worldCoordsTcAngle(int s);
857  int worldCoordsTcY(int s);
858  int worldCoordsTcZ(int s);
859  void setWorldCoordsTc(int s, bool firstChunk, int value);
860  void setWorldCoordsTcX(int s, int value);
861  void setWorldCoordsTcID(int s, int value);
862  void setWorldCoordsTcAngle(int s, int value);
863  void setWorldCoordsTcY(int s, int value);
864  void setWorldCoordsTcZ(int s, int value);
865  quint32 worldCoordsBh(int s, bool firstChunk);
866  int worldCoordsBhX(int s);
867  int worldCoordsBhID(int s);
868  int worldCoordsBhAngle(int s);
869  int worldCoordsBhY(int s);
870  int worldCoordsBhZ(int s);
871  void setWorldCoordsBh(int s, bool firstChunk, int value);
872  void setWorldCoordsBhX(int s, int value);
873  void setWorldCoordsBhID(int s, int value);
874  void setWorldCoordsBhAngle(int s, int value);
875  void setWorldCoordsBhY(int s, int value);
876  void setWorldCoordsBhZ(int s, int value);
877  quint32 worldCoordsSub(int s, bool firstChunk);
878  int worldCoordsSubX(int s);
879  int worldCoordsSubID(int s);
880  int worldCoordsSubAngle(int s);
881  int worldCoordsSubY(int s);
882  int worldCoordsSubZ(int s);
883  void setWorldCoordsSub(int s, bool firstChunk, int value);
884  void setWorldCoordsSubX(int s, int value);
885  void setWorldCoordsSubID(int s, int value);
886  void setWorldCoordsSubAngle(int s, int value);
887  void setWorldCoordsSubY(int s, int value);
888  void setWorldCoordsSubZ(int s, int value);
889  quint32 worldCoordsWchoco(int s, bool firstChunk);
890  int worldCoordsWchocoX(int s);
891  int worldCoordsWchocoID(int s);
892  int worldCoordsWchocoAngle(int s);
893  int worldCoordsWchocoY(int s);
894  int worldCoordsWchocoZ(int s);
895  void setWorldCoordsWchoco(int s, bool firstChunk, int value);
896  void setWorldCoordsWchocoX(int s, int value);
897  void setWorldCoordsWchocoID(int s, int value);
898  void setWorldCoordsWchocoAngle(int s, int value);
899  void setWorldCoordsWchocoY(int s, int value);
900  void setWorldCoordsWchocoZ(int s, int value);
901  quint32 worldCoordsDurw(int s, bool firstChunk);
902  int worldCoordsDurwX(int s);
903  int worldCoordsDurwID(int s);
904  int worldCoordsDurwAngle(int s);
905  int worldCoordsDurwY(int s);
906  int worldCoordsDurwZ(int s);
907  void setWorldCoordsDurw(int s, bool firstChunk, int value);
908  void setWorldCoordsDurwX(int s, int value);
909  void setWorldCoordsDurwID(int s, int value);
910  void setWorldCoordsDurwAngle(int s, int value);
911  void setWorldCoordsDurwY(int s, int value);
912  void setWorldCoordsDurwZ(int s, int value);
913  void setSaveNumber(int s, int saveNum);
914 
915  bool subMiniGameVictory(int s);
916  void setSubMiniGameVictory(int s, bool won);
917 
923  bool playedPianoOnFlashback(int s);
924 
930  void setPlayedPianoOnFlashback(int s, bool played);
931 
938  quint8 chocoboRating(int s, int stable);
939 
947  void setChocoboRating(int s, int stable, int rating);
948  QList<quint8> chocoboRatings(int s);
949 
955  QString psxDesc(int s);
956 
964  void setPsxDesc(QString newDesc, int s);
965 
970  inline int unknown_zmax()
971  {
972  return 48; //Number of "z" vars.
973  }
974 
979  void setFormat(FF7SaveInfo::FORMAT newFormat);
980 
985  FF7SaveInfo::FORMAT format();
986 
987  bool isBufferSlotPopulated();
988 signals:
989  void fileChanged(bool);
991 private:
997  bool exportPCFormat(const QString &fileName, FF7SaveInfo::FORMAT exportFormat);
998 
1004  bool exportVMCFormat(const QString &fileName, FF7SaveInfo::FORMAT exportFormat);
1005 
1012  bool exportSlot(const QString &fileName, FF7SaveInfo::FORMAT exportFormat, int s);
1013 
1020  QString md5sum(QString fileName, QString UserID);
1021 
1022  QString fileblock(const QString &fileName);
1023  QString filetimestamp(QString fileName);
1024  void checksumSlots();
1025  quint16 ff7Checksum(int s);
1026  void fix_psv_header(int s, int blocks = 1);
1027  void fix_pge_header(int s);
1028  void fix_pda_header(int s);
1029  void fix_psx_header(int s);
1030  void fix_vmp_header(void);
1031  void fix_vmc_header(void);
1032  void vmcRegionEval(int s);
1033  //data members
1034  FF7SLOT buffer_slot;// hold a buffer slot
1035  FF7SLOT slot[15]; //core slot data.
1036  FF7HEADFOOT hf[15]; //slot header and footer.
1038  QByteArray _bufferFileHeader;
1039  QByteArray _fileHeader;
1040  bool slotChanged[15];
1041  bool fileHasChanged;
1042  QString buffer_region; // hold the buffers region data.
1043  QList<QString> SG_Region_String;
1044  QString filename;//opened file
1045  QVector< SubContainer > parseXML(const QString &fileName, const QString &metadataPath, const QString &UserID);
1046  QVector< SubContainer > createMetadata(const QString &fileName, const QString &UserID);
1047 
1048  inline static const auto allDigetRegEx = QRegularExpression(QStringLiteral("^\\d+$"));
1049  inline static const QString invalidRegion = QStringLiteral("\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000");
1050 };
FF7Save::SOUNDMODE
SOUNDMODE
Definition: FF7Save.h:61
FF7SaveInfo::FORMAT::UNKNOWN
@ UNKNOWN
UNKNOWN FORMAT.
FF7Save::WORLDCHOCOBO
WORLDCHOCOBO
Definition: FF7Save.h:58
FF7SLOT
Main FF7 Save Data Structure.
FF7Save
edit saves from Final Fantasy 7
Definition: FF7Save.h:52
FF7Save::KEYITEMS
KEYITEMS
ID's for each keyitem.
Definition: FF7Save.h:93
FF7Save::CONTROLACTION
CONTROLACTION
Possible Actions the user can input.
Definition: FF7Save.h:74
FF7Save::CAMERAMODE
CAMERAMODE
Definition: FF7Save.h:65
FF7Save::PSXBUTTON
PSXBUTTON
Final Fantasy 7 Buttons for when on PSX.
Definition: FF7Save.h:84
FF7Save::MENUITEMS
MENUITEMS
Menu items for ff7.
Definition: FF7Save.h:70
FF7Save::MAGICORDER
MAGICORDER
Definition: FF7Save.h:66
FF7Save::WORLDVEHICLE
WORLDVEHICLE
Definition: FF7Save.h:57
materia
materia format saved in materia list or on a character
FF7Save::ATBMODE
ATBMODE
Definition: FF7Save.h:64
FF7Save::SubContainer
QVector< QString > SubContainer
used to hold more xml style string in metadata signing
Definition: FF7Save.h:191
FF7Save::MATERIACAVE
MATERIACAVE
Definition: FF7Save.h:60
FF7Save::CURSORMODE
CURSORMODE
Definition: FF7Save.h:63
FF7SaveInfo::FORMAT
FORMAT
Supported Data Types.
Definition: FF7SaveInfo.h:27
FF7Save::CONTROLMODE
CONTROLMODE
Definition: FF7Save.h:62
FF7CHAR
Character Info in the save game.
FF7Save::unknown_zmax
int unknown_zmax()
the number of unknown z vars.
Definition: FF7Save.h:970
FF7Save::LOVER
LOVER
Definition: FF7Save.h:59
FF7CHOCOBO
a chocobo in save game