FF8 Griever emanglments.

  • Thread starter Thread starter Cyberman
  • Start date Start date
Status
Not open for further replies.
C

Cyberman

Guest
I've a few additions to the Griever save file format (ala PSX) it should be relatively easy to migrate to the PC (minor changes).

Code: [Select]
Code:
#ifndef _FF8_#define _FF8_#include <vcl.h>/////////////////////////////////////////////////////////////////// Final Fantasy VIII codes// If you can find a way to make the enum 1 byte in size, uncomment/*enum FF8CHARID { Squall, Zell, Irvine, Quistis, Rinoa, Selphie, Seifer, Edea, Laguna, _zz1, _zz2, _blank, Griever, MiniMog, Chicobo, Angelo, None = 0xFF};*/#define CHAR_SQUALL        0#define CHAR_ZELL          1#define CHAR_IRVINE        2#define CHAR_QUISTIS       3#define CHAR_RINOA         4#define CHAR_SELPHIE       5#define CHAR_SEIFER        6#define CHAR_EDEA          7#define CHAR_LAGUNA        8#define CHAR_KIROS         9#define CHAR_WARD          10#define CHAR_GRIEVER       12#define CHAR_MINIMOG       13#define CHAR_CHICOBO       14#define CHAR_ANGELO        15#define CHAR_NONE          0xFFtypedef BYTE FF8CHARID;//#define FF8CHARID BYTE//#define BYTE unsigned charstruct _FF8ITEM { BYTE type; char *name;};struct _FF8ABILITY { BYTE type; BYTE ap; char *name;};struct _FF8MAGIC { char *name;};#define CARD(t,l,r,b) { 0x##t,0x##l,0x##r,0x##b }#define NONE  -1#define FIRE  0#define ICE   1#define THUNDER  2#define EARTH  3#define POISON  4#define WIND  5#define WATER  6#define HOLY  7#define SIMPLE  0#define BOSS  1#define GF   2#define PLAYER  3struct _FF8CARD { char *name; struct _FF8CARDVALUES {  char top;  char left;  char right;  char bottom; } values; char element; char border;};struct _FF8CARDLOCATION { char *name;};struct _FF8LOCATION { char *name;};typedef BYTE _FF8INNATEABILITY;/////////////////////////////////////////////////////////////////// Final Fantasy VIII item/magic/ability lists#define LOCCOUNT  200extern _FF8ITEM dbItems[200];extern _FF8ABILITY dbAbilities[120];extern _FF8MAGIC dbMagic[60];extern _FF8CARD dbCards[110];extern _FF8CARDLOCATION dbCardLocations[256];extern _FF8LOCATION dbLocations[LOCCOUNT];extern _FF8INNATEABILITY dbInnateAbilities[16][21];extern char *dbJuncNames[];extern char *dbWeapons[];extern int const GF_Level[16];/////////////////////////////////////////////////////////////////// Final Fantasy VIII save file structures// Unknown datastruct UNKNOWN { UNKNOWN () { data = 0xFF; } BYTE data;};// FF8 text identifiertypedef char FF8STR;// Save file description blockstruct FF8DESC { USHORT checktag;   // Tag - must be 0x0FF8 USHORT location;   // Current location UNKNOWN zz0[4]; USHORT saves;    // Number of saves UINT gil;     // Gil UINT seconds;    // Game time BYTE level;     // Lead character's level FF8CHARID party[3];   // [3] Current party};// Guardian Force blockstruct FF8GF { FF8STR name[12];   // [10] GF name //UNKNOWN zz1[2]; UINT exp;     // GF EXP UNKNOWN zz2; BYTE found;     // Has GF been found? USHORT hp;     // Current HP BYTE abilities[16];   // [16] Learned abilities (bLearned[i] = abilities[i/8] & (1 << (i%8))) BYTE ap[21];    // [21] Ability APs UNKNOWN zz3[3]; USHORT kills;    // Number of enemies killed USHORT ko;     // Number of KOs BYTE learning;    // Ability being learnt BYTE forgotten[3];   // Abilities forgotten};// Magic blockstruct FF8MAGIC { BYTE type; BYTE amount;};// Character blockstruct FF8CHAR { USHORT hp;     // Current HP USHORT basehp;    // Base HP UINT exp;     // EXP FF8CHARID id;    // Character id BYTE weapon;    // Current weapon BYTE str;     // Strength BYTE vit;     // Vitality BYTE mag;     // Magic BYTE spr;     // Spr BYTE spd;     // Speed BYTE luck;     // Luck FF8MAGIC magic[32];   // [32] Magic library (stock) BYTE ab_command[3];   // [3] Command abilities UNKNOWN zz; BYTE ab_char[4];   // [4] Character abilities USHORT gf;     // Junctioned GFs UNKNOWN zz2[2]; BYTE junction[19];   // [19] Junctions        // 00: HP Junction (Magic Type)        // 01: Str Junction (Magic Type)        // 02: Vit Junction (Magic Type)        // 03: Mag Junction (Magic Type)        // 04: Spr Junction (Magic Type)        // 05: Spd Junction (Magic Type)        // 06: Hit Junction (Magic Type)        // 07: Eva Junction (Magic Type)        // 08: Luck Junction (Magic Type)        // 09: Elem-Atk Junction (Magic Type)        // 10: ST-Atk Junction (Magic Type)        // 11: Elem-Def Junction 1 (Magic Type)        // 12: Elem-Def Junction 2 (Magic Type)        // 13: Elem-Def Junction 3 (Magic Type)        // 14: Elem-Def Junction 4 (Magic Type)        // 15: ST-Def Junction 1 (Magic Type)        // 16: ST-Def Junction 2 (Magic Type)        // 17: ST-Def Junction 3 (Magic Type)        // 18: ST-Def Junction 4 (Magic Type) UNKNOWN zz3; USHORT compat[16];   // [16] GF compatibility USHORT kills;    // Number of enemies killed USHORT ko;     // Number of KOs BYTE stats;     // Battle metere stats? UNKNOWN zz4; USHORT status;    // Status effects        //   1: ?Death?        //   2: Poison        //   4: Petrify        //   8: Darkness        //  16: Silence        //  32: Berserk        //  64: Zombie        // 128: ?Sleep?                        // 256: ?Slow?                        // 512: ?Stop?                        //1024: ?Curse?                        //2048: ?Confuse?                        //4096: ?Drain? //UNKNOWN zz5;};// Item blockstruct FF8ITEM { BYTE type; BYTE amount;};// Card identifiertypedef BYTE FF8CARD;   // 0x80: Collected    0x7F: Amount        // Rare cards: Locationstruct FF8CONFIG { BYTE spd_battle;   // Battle speed (0=fast,4=slow) BYTE spd_battlemsg;   // Battle message speed (0=fast,4=slow) BYTE spd_fieldmsg;   // Field message speed (0=fast,4=slow) BYTE soundvolume;   // Sound volume (0-100(%)) BYTE options;    // Misc. options        //   1: ATB -   1:Wait  0:Active        //   2: ??? 0:Stereo 1: Mono        //   4: Cursor -  1:Memory 0:Initial        //   8: ???        //  16: ???        //  32: Controller - 1:Customize 0:Normal        //  64: ???        // 128: ??? BYTE scan;     //   1: Scan -   1:Always 0:Once BYTE camera;    // Camera movement (0=100%,4=0%) UNKNOWN zz1; UNKNOWN buttons[12];  // [12] Button configuration (?)};// Chocobo World datastruct FF8CHOCOBO { UNKNOWN zz[64];};// limit structurestruct FF8LMT{   unsigned short Quistis;   unsigned short Zell;   BYTE           Irvine;   BYTE           Selphie;};// Save file blockstruct FF8BLOCK { UNKNOWN zz1[384]; USHORT checksum1;   // Checksum FF8DESC desc;    // Save block description FF8STR squall[12];   // [12] Squall's name FF8STR rinoa[12];   // [12] Rinoa's name FF8STR angelo[12];   // [8] Angelo's name FF8STR chicobo[12];   // [4] Chicobo's name BYTE disc;     // Current disc (zero based) UNKNOWN zz[3]; UINT saves;     // Number of times saved (*2?) FF8GF gf[16];    // [16] GF blocks FF8CHAR chars[8];   // [8] Character blocks                           // 0 - Squall                           // 1 - Zell                           // 2 - Irvine                           // 3 - Quistis                           // 4 - Rinoa                           // 5 - Selphie                           // 6 - Siefer                           // 7 - Edea UNKNOWN zz2[400]; FF8CONFIG config;   // Configuration FF8CHARID party[3];   // [3] Party UNKNOWN zz22[5]; FF8STR griever[12];   // [8] Griever's name UNKNOWN zz23[4]; UINT gil;     // Gil UNKNOWN zz24[4];   FF8LMT   limits;// BYTE limits[6];    // [6] Learned limit breaks        // [0]-[1] Quistis        // [2]-[3] Zell        // [4] Irvine        // [5] Selphie BYTE combine_compl;   // Rinoa's Combine: Angelo Abilities Completed BYTE combine_known;   // Rinoa's Combine: Angelo Abilities Known BYTE combine_left[8];  // [8] Rinoa's Combine: Points left to learn different abilities        // [0] 'Angelo Rush'  (max 10)        // [1] 'Angelo Recover'  (max 30)        // [2] 'Angelo Reverse'  (max 40)        // [3] 'Angelo Search'  (max 60)        // [4] 'Angelo Cannon'  (max 80)        // [5] 'Angelo Strike'  (max 120)        // [6] 'Invincible Moon' (max 140)        // [7] 'Wishing Star'  (max 160) BYTE b_items[32];   // [32] Order of battle items FF8ITEM items[198];   // [198] Items UINT seconds;    // Game time UNKNOWN zz28[8]; UINT battleswon;   // Number of battles won UNKNOWN zz29[2]; USHORT battlesescaped; // Number of battles escaped UNKNOWN zz30[60]; BYTE limit_options;  // Limit break options (1:Renzokuken Auto, 2:Duel Auto) BYTE limit_indicator; // Renzokuken indicator (128) BYTE information0;  // Bit 0 Party isolated / Dream world (1)                           // Bit 1 Have Odin                           // Bit 2 Have Phoenix                           // Bit 3 Have Gilgamesh                           // Bit 4 Rinoa can't summoon Angelo                           // Bit 5 Rinoa can use Angle wings                           // Bit 6 Unknown                           // Bit 7 Unknown BYTE information[9];  // [9] Information (bitmask)        // [0]1-8: Location information        // [2]1-8: Location information        // [3]1-4: Location information        // [3]5-8: Term information        // [4]1-8: Term information        // [5]1-6: Term information        // [5]7-8: People information        // [6]1-5: People information        // [6]6-8: Character reports        // [7]1-4: Character reports        // [8]3-3: Term information        // [8]4-6: Report information UNKNOWN zz31; BYTE gf_reports[3];   // [3] GF reports UNKNOWN zz3[3]; BYTE testlevel;    // Current written test level UNKNOWN zz39[4]; FF8CHARID party_field[3]; // [3] Current field party ([0] = leader) UNKNOWN zz395[7]; USHORT location;   // Current location USHORT location_last;  // Last location (?) UNKNOWN zz4[30]; UINT steps;     // Number of steps taken USHORT payslip;    // Payslip steps UNKNOWN zz5[6]; USHORT seedlevel;   // SeeD Level UNKNOWN zz55[66]; UNKNOWN zz550[2];// USHORT location_last;  // Last location ? UNKNOWN zz551[186];  BYTE tt_rules[8];   // [8] Region game rules BYTE tt_traderules[8];  // [8] Region trade rules BYTE tt_lastrules[2];  // [2] Last game rules remembered ([1] = second to last) BYTE tt_lastregion[2];  // [2] Last region remembered ([1] = second to last) UNKNOWN zz555; BYTE tt_currules;   // Current game rule BYTE tt_curtraderule;  // Current trade rules BYTE tt_cardqueen;   // Card Queen's location BYTE tt_traderating_region; // Region for trade rating BYTE tt_traderating;  // Trade rating UNKNOWN zz6[1110]; FF8CARD cards[77];   // [77] Cards (bit 8=collected, bit 1-7=amount) BYTE card_locations[33]; // [33] Card locations BYTE cards_rare[5];   // [5] Rare cards found (bFound[i] = cardsfound[i/8] & (1 << (i%8))) UNKNOWN zz7[9]; USHORT test1; USHORT test2; FF8CHOCOBO cw;    // Chocobo World data USHORT checksum2;   // Checksum (identical to checksum1) BYTE padding[2782];   // Padding, makes save block 8192 bytes};#endif

Have fun .. with this .. the changes are realtively small but make it easier to read.  the information bit fields still have a way to go.. namely I have to go through the game and watch every tutorial and do everything in the game etc. (sigh).

Cyb
 
PS the added bit fields to information0 was discovered in the forums here.. I just don't care who uses it .. heh :) it was cool to find.

Disclaimer, the information is thought to be acurate but no responsibility is taken for it's use.

 :o

Cyb
 
Status
Not open for further replies.
Back
Top