ff7tk  1.2.0.14
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 
141  bool importSlot(int s = 0, QString fileName = "", int fileSlot = 0);
142 
146  void clearSlot(int s);
147 
151  void copySlot(int s);
152 
156  void pasteSlot(int s);
157 
163  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)
164 
172  void newGamePlus(int s, QString CharFileName, QString fileName = ""); //new game + in slot s (over load default w/ fileName must be RAW PSX
173 
180  bool exportCharacter(int s, int char_num, QString fileName); // Write slot[s].char[char_num] to fileName
181 
187  void importCharacter(int s, int char_num, QByteArray new_char); //import new_char to slot[s].char[char_num]
188 
192  typedef QVector< QString > SubContainer;
193 
199  bool fixMetaData(QString fileName = "", QString UserID = "");
200 
207  QByteArray generatePsSaveSignature(QByteArray data, QByteArray keySeed);
208 
209  QByteArray fileHeader(void);
215  bool setFileHeader(QByteArray data);
216 
217  QByteArray slotHeader(int s);
224  bool setSlotHeader(int s, QByteArray data);
225 
226  QByteArray slotFooter(int s);
233  bool setSlotFooter(int s, QByteArray data);
234 
235  QByteArray slotPsxRawData(int s);
244  bool setSlotPsxRawData(int s, QByteArray data);
245 
246  QByteArray slotFF7Data(int s);
253  bool setSlotFF7Data(int s, QByteArray data);
254  bool setSlotFF7Data(int s, const FF7SLOT &data);
255 
256  QList<QByteArray> slotIcon(int s);
262  QList<qint8> chocoboPens(int s);
263 
269  void setChocoboPen(int s, int pen, qint8 value);
270 
275  quint8 condorWins(int s);
276 
281  void setCondorWins(int s, quint8 wins);
282 
287  quint8 condorLosses(int s);
288 
293  void setCondorLosses(int s, quint8 losses);
294 
298  quint16 condorFunds(int s);
299 
304  void setCondorFunds(int s, quint16 value);
305  //Field Location
306 
311  quint16 locationId(int s);
312 
317  void setLocationId(int s, quint16 locationID);
318 
323  quint16 mapId(int s);
324 
329  void setMapId(int s, quint16 mapID);
330 
335  qint16 locationX(int s);
336 
341  void setLocationX(int s, qint16 x);
342 
347  qint16 locationY(int s);
348 
353  void setLocationY(int s, qint16 y);
354 
359  quint16 locationT(int s);
360 
365  void setLocationT(int s, quint16 t);
366 
371  quint8 locationD(int s);
372 
377  void setLocationD(int s, quint8 d);
378 
383  quint16 craterSavePointMapID(int s);
384 
389  qint16 craterSavePointX(int s);
390 
395  qint16 craterSavePointY(int s);
396 
401  qint16 craterSavePointZ(int s);
402 
407  void setCraterSavePointMapID(int s, int value);
408 
413  void setCraterSavePointX(int s, int value);
414 
419  void setCraterSavePointY(int s, int value);
420 
425  void setCraterSavePointZ(int s, int value);
426 
427  //options
434  QByteArray controllerMapping(int s);
435 
442  void setControllerMapping(int s, QByteArray map);
443 
451  quint8 controllerMapping(int s, int action);
452 
460  void setControllerMapping(int s, int action, int button);
461 
466  quint16 options(int s);
467 
472  void setOptions(int s, int opt);
473 
478  bool soundMode(int s);
479 
484  void setSoundMode(int s, int mode);
485 
486  void setSoundMode(int s, bool mode);
487  bool controlMode(int s);
488  void setControlMode(int s, int mode);
489  void setControlMode(int s, bool mode);
490  bool cursorMode(int s);
491  void setCursorMode(int s, int mode);
492  void setCursorMode(int s, bool mode);
493  int atbMode(int s);
494  void setAtbMode(int s, int mode);
495  bool cameraMode(int s);
496  void setCameraMode(int s, int mode);
497  void setCameraMode(int s, bool mode);
498  int magicOrder(int s);
499  void setMagicOrder(int s, int order);
500  bool battleHelp(int s);
501  void setBattleHelp(int s, bool shown);
502  int battleSpeed(int s);
503  void setBattleSpeed(int s, int speed);
504  int battleMessageSpeed(int s);
505  void setBattleMessageSpeed(int s, int speed);
506  int messageSpeed(int s);
507  void setMessageSpeed(int s, int speed);
508  bool fieldHelp(int s);
509  void setFieldHelp(int s, bool shown);
510  bool battleTargets(int s);
511  void setBattleTargets(int s, bool shown);
512 
513  quint8 specialBattleWins(int s);
514  void setSpecialBattleWins(int s, int wins);
515 
516  //Phs/Menu
517  bool phsVisible(int s, int who);
518  void setPhsVisible(int s, int who, bool checked);
519  quint16 phsVisible(int s);
520  void setPhsVisible(int s, quint16 phs_visible);
521  bool phsAllowed(int s, int who);
522  quint16 phsAllowed(int s);
523  void setPhsAllowed(int s, int who, bool checked);
524  void setPhsAllowed(int s, quint16 phs_visible);
525  bool menuVisible(int s, int index);
526  void setMenuVisible(int s, int index, bool checked);
527  quint16 menuVisible(int s);
528  void setMenuVisible(int s, quint16 menu_visible);
529  bool menuLocked(int s, int index);
530  void setMenuLocked(int s, int index, bool checked);
531  quint16 menuLocked(int s);
532  void setMenuLocked(int s, quint16 menu_visible);
533  //item info
534  quint16 item(int s, int item_num); //return raw ff7item
535  QList<quint16> items(int s);// return all items
536  void setItems(int s, QList<quint16> items);
537  void setItem(int s, int item_num, quint16 rawitem);
538  void setItem(int s, int item_num, quint16 new_id, quint8 new_qty);
539  //materia get/set
540  bool materiaCave(int s, MATERIACAVE cave);
541  void setMateriaCave(int s, MATERIACAVE cave, bool isEmpty);
542  quint8 partyMateriaId(int s, int mat_num);
543  qint32 partyMateriaAp(int s, int mat_num);
544  quint8 stolenMateriaId(int s, int mat_num);
545  qint32 stolenMateriaAp(int s, int mat_num);
546  void setPartyMateria(int s, int mat_num, quint8 id, qint32 ap);
547  void setStolenMateria(int s, int mat_num, quint8 id, qint32 ap);
548  //Description Stuff.
549  quint32 descTime(int s);
550  void setDescTime(int s, quint32 new_time);
551  QString descName(int s);//return the name in the description
552  void setDescName(int s, QString new_name); // desc name = new_name
553  QString descLocation(int s);//return the location string used in the description
554  void setDescLocation(int s, QString new_desc_location);//write new desc location string called from setLocation
555  quint8 descLevel(int s);
556  void setDescLevel(int s, int new_level);
557  quint8 descParty(int s, int char_num);
558  void setDescParty(int s, int char_num, quint8 new_id);
559  quint16 descCurHP(int s);
560  void setDescCurHP(int s, quint16 new_curHP);
561  quint16 descMaxHP(int s);
562  void setDescMaxHP(int s, quint16 new_maxHP);
563  quint16 descCurMP(int s);
564  void setDescCurMP(int s, quint16 new_curMP);
565  quint16 descMaxMP(int s);
566  void setDescMaxMP(int s, quint16 new_maxMP);
567  quint32 descGil(int s);
568  void setDescGil(int s, quint32 new_gil);
569  //Dialog Colors
570  QColor dialogColorUL(int s);
571  QColor dialogColorUR(int s);
572  QColor dialogColorLL(int s);
573  QColor dialogColorLR(int s);
574  void setDialogColorUL(int s, QColor color);
575  void setDialogColorUR(int s, QColor color);
576  void setDialogColorLL(int s, QColor color);
577  void setDialogColorLR(int s, QColor color);
578  // String Functions.
579  QString chocoName(int s, int choco_num); //return choco_num's name.
580  void setChocoName(int s, int choco_num, QString new_name); //write choco_num 's new_name to slot s
581  QString location(int s);// return save location string
582  void setLocation(int s, QString new_location);//set save location string to new_location
583  quint32 gil(int s);
584  void setGil(int s, quint32 gil);
585  quint16 gp(int s);
586  void setGp(int s, int gp);
587  quint16 battles(int s);
588  void setBattles(int s, int battles);
589  quint16 runs(int s);
590  void setRuns(int s, int runs);
591  quint8 party(int s, int pos);
598  void setParty(int s, int pos, int new_id);
599  qint8 chocoboPen(int s, int pos);
600  void setChocoboPen(int s, int pos, int type);
601  bool seenPandorasBox(int s);
602  void setSeenPandorasBox(int s, bool seen);
603  //Mini Game Stuff
604  quint8 love(int s, bool battle, LOVER who);
605  void setLove(int s, bool battle, LOVER who, quint8 love);
606  quint16 speedScore(int s, int rank);
607  void setSpeedScore(int s, int rank, quint16 score);
608  quint16 bikeHighScore(int s);
609  void setBikeHighScore(int s, quint16 score);
610  QString snowboardTime(int s, int course);
611  void setSnowboardTime(int s, int course, QString time);
612  quint8 snowboardScore(int s, int course);
613  void setSnowboardScore(int s, int course, quint8 score);
614  quint32 countdownTimer(int s);
615  void setCountdownTimer(int s, quint32 time);
616  //Char Releated Functions
617  FF7CHAR character(int s, int char_num); //Return Full Char
618  quint8 charID(int s, int char_num); //Return Char ID
619  quint8 charLevel(int s, int char_num); //Return Char Level
620  quint8 charStr(int s, int char_num);
621  quint8 charVit(int s, int char_num);
622  quint8 charMag(int s, int char_num);
623  quint8 charSpi(int s, int char_num);
624  quint8 charDex(int s, int char_num);
625  quint8 charLck(int s, int char_num);
626  quint8 charStrBonus(int s, int char_num);
627  quint8 charVitBonus(int s, int char_num);
628  quint8 charMagBonus(int s, int char_num);
629  quint8 charSpiBonus(int s, int char_num);
630  quint8 charDexBonus(int s, int char_num);
631  quint8 charLckBonus(int s, int char_num);
632  qint8 charLimitLevel(int s, int char_num);
633  quint8 charLimitBar(int s, int char_num);
634  QString charName(int s, int char_num); //Return Char name
635  quint8 charWeapon(int s, int char_num);
636  quint8 charArmor(int s, int char_num);
637  quint8 charAccessory(int s, int char_num);
638  quint8 charFlag(int s, int char_num, int flag_num);
639  quint16 charLimits(int s, int char_num); //Return Char ID
640  quint16 charKills(int s, int char_num); //Return Char Level
641  quint16 charTimesLimitUsed(int s, int char_num, int level);
642  quint16 charCurrentHp(int s, int char_num);
643  quint16 charBaseHp(int s, int char_num);
644  quint16 charCurrentMp(int s, int char_num);
645  quint16 charBaseMp(int s, int char_num);
646  quint8 charUnknown(int s, int char_num, int unknown_num);
647  quint16 charMaxHp(int s, int char_num);
648  quint16 charMaxMp(int s, int char_num);
649  quint32 charCurrentExp(int s, int char_num);
650  quint32 charNextExp(int s, int char_num);
651  quint8 charMateriaId(int s, int who, int mat_num);
652  qint32 charMateriaAp(int s, int who, int mat_num);
653  void setCharacter(int s, int char_num, const FF7CHAR &new_char);
654  void setCharID(int s, int char_num, qint8 new_id);
655  void setCharLevel(int s, int char_num, qint8 new_level);
656  void setCharStr(int s, int char_num, quint8 str);
657  void setCharVit(int s, int char_num, quint8 vit);
658  void setCharMag(int s, int char_num, quint8 mag);
659  void setCharSpi(int s, int char_num, quint8 spi);
660  void setCharDex(int s, int char_num, quint8 dex);
661  void setCharLck(int s, int char_num, quint8 lck);
662  void setCharStrBonus(int s, int char_num, quint8 strbonus);
663  void setCharVitBonus(int s, int char_num, quint8 vitbonus);
664  void setCharMagBonus(int s, int char_num, quint8 magbonus);
665  void setCharSpiBonus(int s, int char_num, quint8 spibonus);
666  void setCharDexBonus(int s, int char_num, quint8 dexbonus);
667  void setCharLckBonus(int s, int char_num, quint8 lckbonus);
668  void setCharLimitLevel(int s, int char_num, qint8 limitlevel);
669  void setCharLimitBar(int s, int char_num, quint8 limitbar);
670  void setCharName(int s, int char_num, QString new_name); //write char_num 's new_name to slot s
671  void setCharWeapon(int s, int char_num, quint8 weapon);
672  void setCharArmor(int s, int char_num, quint8 armor);
673  void setCharAccessory(int s, int char_num, quint8 accessory);
674  void setCharFlag(int s, int char_num, int flag_num, quint8 flag_value);
675  void setCharLimits(int s, int char_num, quint16 new_limits);
676  void setCharKills(int s, int char_num, quint16 kills);
677  void setCharTimeLimitUsed(int s, int char_num, int level, quint16 timesused);
678  void setCharCurrentHp(int s, int char_num, quint16 curHp);
679  void setCharBaseHp(int s, int char_num, quint16 baseHp);
680  void setCharCurrentMp(int s, int char_num, quint16 curMp);
681  void setCharBaseMp(int s, int char_num, quint16 baseMp);
682  void setCharUnknown(int s, int char_num, int unknown_num, quint8 value);
683  void setCharMaxHp(int s, int char_num, quint16 maxHp);
684  void setCharMaxMp(int s, int char_num, quint16 maxMp);
685  void setCharCurrentExp(int s, int char_num, quint32 exp);
686  void setCharNextExp(int s, int char_num, quint32 next);
687  void setCharMateria(int s, int who, int mat_num, quint8 id, qint32 ap);
688  void setCharMateria(int s, int who, int mat_num, materia mat);
689  //chocobo Stuff.
690  QList<FF7CHOCOBO> chocobos(int s);
691  QList<quint16> chocobosStaminas(int s);
692  QList<QString> chocobosNames(int s);
693  QList<bool> chocoboCantMates(int s);
694  qint8 stablesOwned(int s);
695  qint8 stablesOccupied(int s);
696  qint8 stableMask(int s);
697  void setStablesOwned(int s, qint8 value);
698  void setStablesOccupied(int s, qint8 value);
699  void setStableMask(int s, qint8 value);
700  FF7CHOCOBO chocobo(int s, int chocoSlot);
701  quint16 chocoStamina(int s, int chocoSlot);
702  quint16 chocoSpeed(int s, int chocoSlot);
703  quint16 chocoMaxSpeed(int s, int chocoSlot);
704  quint16 chocoSprintSpeed(int s, int chocoSlot);
705  quint16 chocoMaxSprintSpeed(int s, int chocoSlot);
706  quint8 chocoSex(int s, int chocoSlot);
707  quint8 chocoType(int s, int chocoSlot);
708  quint8 chocoCoop(int s, int chocoSlot);
709  quint8 chocoAccel(int s, int chocoSlot);
710  quint8 chocoIntelligence(int s, int chocoSlot);
711  quint8 chocoRaceswon(int s, int chocoSlot);
712  quint8 chocoPCount(int s, int chocoSlot);
713  quint8 chocoPersonality(int s, int chocoSlot);
714  bool chocoCantMate(int s, int chocoSlot);
715  void setChocoStamina(int s, int chocoSlot, quint16 stamina);
716  void setChocoSpeed(int s, int chocoSlot, quint16 speed);
717  void setChocoMaxSpeed(int s, int chocoSlot, quint16 maxspeed);
718  void setChocoSprintSpeed(int s, int chocoSlot, quint16 sprintSpeed);
719  void setChocoMaxSprintSpeed(int s, int chocoSlot, quint16 maxsprintSpeed);
720  void setChocoSex(int s, int chocoSlot, quint8 value);
721  void setChocoType(int s, int chocoSlot, quint8 value);
722  void setChocoCoop(int s, int chocoSlot, quint8 value);
723  void setChocoAccel(int s, int chocoSlot, quint8 value);
724  void setChocoIntelligence(int s, int chocoSlot, quint8 value);
725  void setChocoRaceswon(int s, int chocoSlot, quint8 value);
726  void setChocoPCount(int s, int chocoSlot, quint8 value);
727  void setChocoPersonality(int s, int chocoSlot, quint8 value);
728  void setChocoCantMate(int s, int chocoSlot, bool cantMate);
729  // Return File Info
730  int lenFile(void);//Return File length.
731  int lenFileHeader(void);//Return File Header length
732  int lenCoreSave(void);//Return Slot length (data portion)
733  int lenSlotHeader(void);//Return slot header length
734  int lenSlotFooter(void);//Return slot footer length
735  int lenSlot(void);//Return Slot length
736  int numberOfSlots(void);//Return number of slots in the file_footer_dex
737  QString fileName(void);//return loaded filename
738  void setFileModified(bool, int s); //file changed toggle, with slot called
739  void setRegion(int s, const QString &region);
740  bool isFileModified(void);//has the file changed since load
741  bool isSlotModified(int s);//has slot[s] changed since load.
742  bool isSlotEmpty(int s);//is Slot s empty
743  bool isFF7(int s);//valid ff7 slot?
744  bool isPAL(int s);//PAL SLOT?
745  bool isNTSC(int s);//NTSC SLOT??
746  bool isJPN(int s);//is a Japanese File
747  QString region(int s);// region string of slot s
748  //Set Needed Info Stuffs
749 
750  char psx_block_type(int s);//mask of psx slot (used by index)
751  void setPsx_block_type(int s, char block_type);
752  quint8 psx_block_next(int s);// if using more then one block return location of next block
753  void setPsx_block_next(int s, int next);
754  quint8 psx_block_size(int s);//how many blocks save uses.
755  void setPsx_block_size(int s, int blockSize);
756  void fix_pc_bytemask(int s);// update so last slot is shown selected on load (must be public to set to currently viewed slot).
757  //more data members
758  QByteArray unknown(int s, int z);
759  bool setUnknown(int s, int z, QByteArray data);
760  quint16 steps(int s);
761  void setSteps(int s, int steps);
762  quint8 churchProgress(int s);
763  void setChurchProgress(int s, int progress);
764  quint8 donProgress(int s);
765  void setDonProgress(int s, int progress);
766  quint16 battlePoints(int s);
767  void setBattlePoints(int s, quint16);
768  quint32 time(int s);
769  void setTime(int s, quint32 new_time);
770  void setDisc(int s, int disc);
771  quint8 disc(int s);
772  quint16 mainProgress(int s);
773  void setMainProgress(int s, int mProgress);
774  QByteArray keyItems(int s);
775  bool setKeyItems(int s, QByteArray data);
776  bool keyItem(int s, int keyItem);
777  void setKeyItem(int s, int keyItem, bool pickedUp);
778  bool itemMask1(int s, int bit);
779  void setItemMask1(int s, int bit, bool pickedUp);
780  bool bmProgress1(int s, int bit);
781  void setBmProgress1(int s, int bit, bool isTrue);
782  void setBmProgress1(int s, int value);
783  bool bmProgress2(int s, int bit);
784  void setBmProgress2(int s, int bit, bool isTrue);
785  void setBmProgress2(int s, int value);
786  bool bmProgress3(int s, int bit);
787  void setBmProgress3(int s, int bit, bool isTrue);
788  void setBmProgress3(int s, int value);
789  bool midgarTrainFlags(int s, int bit);
790  void setMidgarTrainFlags(int s, int bit, bool isTrue);
791  void setMidgarTrainFlags(int s, int value);
792  bool turtleParadiseFlyerSeen(int s, int flyer);
793  quint8 turtleParadiseFlyersSeen(int s);
794  void setTurtleParadiseFlyerSeen(int s, int flyer, bool seen);
795  void setTurtleParadiseFlyersSeen(int s, quint8 flyersSeen);
796  bool startBombingMission(int s);
797  void setStartBombingMission(int s, bool isTrue);
798  quint32 uWeaponHp(int s);
799  void setUWeaponHp(int s, int hp);
800  bool killedEmeraldWeapon(int s);
801  void setKilledEmeraldWeapon(int s, bool isTrue);
802  bool killedRubyWeapon(int s);
803  void setKilledRubyWeapon(int s, bool isTrue);
804  quint8 tutSave(int s);
805  void setTutSave(int s, int value);
806  bool canFightNinjaInForest(int s);
807  void setCanFightNinjaInForest(int s, bool isTrue);
808  quint8 tutSub(int s);
809  bool tutSub(int s, int bit);
810  void setTutSub(int s, int bit, bool isTrue);
811  void setTutSub(int s, int value);
812 
817  bool yuffieUnlocked(int s);
818 
823  void setYuffieUnlocked(int s, bool isUnlocked);
824 
829  bool vincentUnlocked(int s);
830 
835  void setVincentUnlocked(int s, bool isUnlocked);
836 
837  bool worldChocobo(int s, int bit);
838  void setWorldChocobo(int s, int bit, bool isTrue);
839  bool worldVehicle(int s, int bit);
840  void setWorldVehicle(int s, int bit, bool isTrue);
841  //World Coords
842  quint32 worldCoordsLeader(int s, bool firstChunk);
843  int worldCoordsLeaderX(int s);
844  int worldCoordsLeaderID(int s);
845  int worldCoordsLeaderAngle(int s);
846  int worldCoordsLeaderY(int s);
847  int worldCoordsLeaderZ(int s);
848  void setWorldCoordsLeader(int s, bool firstChunk, int value);
849  void setWorldCoordsLeaderX(int s, int value);
850  void setWorldCoordsLeaderID(int s, int value);
851  void setWorldCoordsLeaderAngle(int s, int value);
852  void setWorldCoordsLeaderY(int s, int value);
853  void setWorldCoordsLeaderZ(int s, int value);
854  quint32 worldCoordsTc(int s, bool firstChunk);
855  int worldCoordsTcX(int s);
856  int worldCoordsTcID(int s);
857  int worldCoordsTcAngle(int s);
858  int worldCoordsTcY(int s);
859  int worldCoordsTcZ(int s);
860  void setWorldCoordsTc(int s, bool firstChunk, int value);
861  void setWorldCoordsTcX(int s, int value);
862  void setWorldCoordsTcID(int s, int value);
863  void setWorldCoordsTcAngle(int s, int value);
864  void setWorldCoordsTcY(int s, int value);
865  void setWorldCoordsTcZ(int s, int value);
866  quint32 worldCoordsBh(int s, bool firstChunk);
867  int worldCoordsBhX(int s);
868  int worldCoordsBhID(int s);
869  int worldCoordsBhAngle(int s);
870  int worldCoordsBhY(int s);
871  int worldCoordsBhZ(int s);
872  void setWorldCoordsBh(int s, bool firstChunk, int value);
873  void setWorldCoordsBhX(int s, int value);
874  void setWorldCoordsBhID(int s, int value);
875  void setWorldCoordsBhAngle(int s, int value);
876  void setWorldCoordsBhY(int s, int value);
877  void setWorldCoordsBhZ(int s, int value);
878  quint32 worldCoordsSub(int s, bool firstChunk);
879  int worldCoordsSubX(int s);
880  int worldCoordsSubID(int s);
881  int worldCoordsSubAngle(int s);
882  int worldCoordsSubY(int s);
883  int worldCoordsSubZ(int s);
884  void setWorldCoordsSub(int s, bool firstChunk, int value);
885  void setWorldCoordsSubX(int s, int value);
886  void setWorldCoordsSubID(int s, int value);
887  void setWorldCoordsSubAngle(int s, int value);
888  void setWorldCoordsSubY(int s, int value);
889  void setWorldCoordsSubZ(int s, int value);
890  quint32 worldCoordsWchoco(int s, bool firstChunk);
891  int worldCoordsWchocoX(int s);
892  int worldCoordsWchocoID(int s);
893  int worldCoordsWchocoAngle(int s);
894  int worldCoordsWchocoY(int s);
895  int worldCoordsWchocoZ(int s);
896  void setWorldCoordsWchoco(int s, bool firstChunk, int value);
897  void setWorldCoordsWchocoX(int s, int value);
898  void setWorldCoordsWchocoID(int s, int value);
899  void setWorldCoordsWchocoAngle(int s, int value);
900  void setWorldCoordsWchocoY(int s, int value);
901  void setWorldCoordsWchocoZ(int s, int value);
902  quint32 worldCoordsDurw(int s, bool firstChunk);
903  int worldCoordsDurwX(int s);
904  int worldCoordsDurwID(int s);
905  int worldCoordsDurwAngle(int s);
906  int worldCoordsDurwY(int s);
907  int worldCoordsDurwZ(int s);
908  void setWorldCoordsDurw(int s, bool firstChunk, int value);
909  void setWorldCoordsDurwX(int s, int value);
910  void setWorldCoordsDurwID(int s, int value);
911  void setWorldCoordsDurwAngle(int s, int value);
912  void setWorldCoordsDurwY(int s, int value);
913  void setWorldCoordsDurwZ(int s, int value);
914  void setSaveNumber(int s, int saveNum);
915 
916  bool subMiniGameVictory(int s);
917  void setSubMiniGameVictory(int s, bool won);
918 
924  bool playedPianoOnFlashback(int s);
925 
931  void setPlayedPianoOnFlashback(int s, bool played);
932 
939  quint8 chocoboRating(int s, int stable);
940 
948  void setChocoboRating(int s, int stable, int rating);
949  QList<quint8> chocoboRatings(int s);
950 
956  QString psxDesc(int s);
957 
965  void setPsxDesc(QString newDesc, int s);
966 
971  inline int unknown_zmax()
972  {
973  return 48; //Number of "z" vars.
974  }
975 
980  void setFormat(FF7SaveInfo::FORMAT newFormat);
981 
986  FF7SaveInfo::FORMAT format();
987 
988  bool isBufferSlotPopulated();
989 signals:
990  void fileChanged(bool);
992 private:
998  bool exportPCFormat(const QString &fileName, FF7SaveInfo::FORMAT exportFormat);
999 
1005  bool exportVMCFormat(const QString &fileName, FF7SaveInfo::FORMAT exportFormat);
1006 
1013  bool exportSlot(const QString &fileName, FF7SaveInfo::FORMAT exportFormat, int s);
1014 
1021  QString md5sum(QString fileName, QString UserID);
1022 
1023  QString fileblock(const QString &fileName);
1024  QString filetimestamp(QString fileName);
1025  void checksumSlots();
1026  [[ deprecated ("FF7Save::ff7Checksum Removed, Use FF7SLOT.updateChecksum() and / or FF7SLOT.isEmpty()") ]]quint16 ff7Checksum(int s);
1027  void fix_psv_header(int s, int blocks = 1);
1028  void fix_pge_header(int s);
1029  void fix_pda_header(int s);
1030  void fix_psx_header(int s);
1031  void fix_vmp_header(void);
1032  void fix_vmc_header(void);
1033  void vmcRegionEval(int s);
1034  //data members
1035  FF7SLOT buffer_slot;// hold a buffer slot
1036  FF7SLOT slot[15]; //core slot data.
1037  FF7HEADFOOT hf[15]; //slot header and footer.
1039  QByteArray _bufferFileHeader;
1040  QByteArray _fileHeader;
1041  bool slotChanged[15];
1042  bool fileHasChanged;
1043  QString buffer_region; // hold the buffers region data.
1044  QList<QString> SG_Region_String;
1045  QString filename;//opened file
1046  QVector< SubContainer > parseXML(const QString &fileName, const QString &metadataPath, const QString &UserID);
1047  QVector< SubContainer > createMetadata(const QString &fileName, const QString &UserID);
1048 
1049  inline static const auto allDigetRegEx = QRegularExpression(QStringLiteral("^\\d+$"));
1050  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");
1051 };
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:192
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:971
FF7Save::LOVER
LOVER
Definition: FF7Save.h:59
FF7CHOCOBO
a chocobo in save game