====== TR2 ====== struct TR2Savegame { uint8_t saveName[75]; // ASCII C string; null-terminated (there is always random data after \0, it is ignored); for accents see String Array section of TOMBPC.DAT page int32_t saveNumber; // First level use block 0, second use block 1... so that at the end of the game, // it sums up everything and/or checks if you found all secrets, etc. // For simplicity, this includes the tile menu as a level. struct { uint16_t ammoPistols; // Always 0x3E8 (1000) uint16_t ammoAutoPistols; // 65,535 means unlimited uint16_t ammoUzis; uint16_t ammoShotgun; uint16_t ammoM16; uint16_t ammoGrenade; uint16_t ammoHarpoon; uint8_t smallMedipacks; // 255 means unlimited uint8_t largeMedipacks; uint8_t unknown; uint8_t flares; uint8_t unknown2[1]; /* 0 None * 1 Pistols * 2 Automatic pistols * 3 Uzis * 4 Shotgun * 5 M16 * 6 Grenade launcher * 7 Harpoon gun */ uint8_t weapon; // equipped weapon /* 00000001 Level unlocked * 00000010 Pistols * 00000100 Automatic pistols * 00001000 Uzis * 00010000 Shotgun * 00100000 M16 * 01000000 Grenade launcher * 10000000 Harpoon gun */ uint16_t flags; uint8_t unknown3[2]; uint32_t levelTime; // in game ticks uint32_t weaponHits; uint32_t weaponShots; uint32_t travelledDistance; uint16_t kills; uint8_t secretBits; uint8_t healthPacksUsed; // Divide by 2 for value. Large medipack = 1; Small = 0.5 } levelInitData[24]; uint32_t elapsedTime; // in game ticks (1/30th of a second), so divide by 30 for time in seconds uint32_t ammoUsed; uint32_t hits; uint32_t distanceTraveled; // Divide by 445.023 for value in meters uint32_t kills; /* 00000001 Bronze * 00000010 Jade * 00000100 Gold */ uint8_t secrets; uint8_t healthPacksUsed; // Divide by 2 for value. Large medipack = 1; Small = 0.5 uint16_t levelNumber; // First level = 1 uint8_t unlimitedAmmo; // Enabled = 1 uint8_t numPickups[2]; uint8_t puzzle[4]; // Corresponds to TOMBPC.DAT Puzzle & Keys entries uint8_t keys[4]; uint32_t roomsAreFlipped; uint8_t flipStates[10]; uint16_t trackFlags[64]; uint8_t cameraFlags[]; // size depends on number of cameras in level uint8_t itemData[]; // item-specific savegame data, needs to be studied uint16_t laraObjectNumber; // item id of lara uint16_t laraHandStatus; uint16_t laraWeapon1; uint16_t laraWeapon2; uint16_t laraWeapon3; uint16_t laraFallspeedOverride; uint16_t laraWaterState; uint8_t unknown7[4]; uint16_t laraStumbleFrame; uint16_t laraStumbleDir; uint16_t laraAirTime; // in game ticks uint8_t unknown8[4]; uint16_t laraUnderwaterSpeed; uint16_t stumbleTimeout; uint16_t flareTimer; uint16_t currentVehicleId; uint16_t currentWeaponItemId; uint16_t weaponObjectNumberLeftHand; uint16_t weaponFrame; uint16_t weaponFlags; uint32_t distanceToWaterSurface; Vector3_32 travelDistancePrevPos; // position of previous frame to calculate distance uint8_t unknown10[8]; uint32_t laraMeshPtrs[15]; uint32_t firingAtEnemy; Vector2_16 aimAngles; uint16_t turnSpeed; uint16_t moveAngle; VectorYXZ_16 headRot; VectorYXZ_16 torsoRot struct WeaponAnimData { uint32_t animFrame; // pointer to anim frame data uint16_t frame; uint16_t animId; uint16_t canShoot; VectorXY_16 aimAngles; uint8_t unknown[2]; uint16_t shooting; }; WeaponAnimData weaponAnimRight; WeaponAnimData weaponAnimLeft; uint32_t pistolsAmmo; uint32_t magnumsAmmo; uint32_t uziAmmo; uint32_t shotgunAmmo; uint32_t harpoonAmmo; uint32_t grenadeLauncherAmmo; uint32_t m16Ammo; uint32_t unknown11; uint32_t laraItemPtr; uint32_t gameEffectsPtr; uint16_t firstFreeEffect; uint16_t firstFreeItem; uint16_t firstActiveItem; uint16_t lastEffect; uint16_t bodyListHead; // for "clear bodies" floordata if(weapon1 != -1) { // data about this weapon uint16_t weaponObjectId; uint16_t weaponAnimNumber; uint16_t weaponFrame; uint16_t weaponAnimState; uint16_t goalAnimState; } uint32_t currentFlipEffect; uint32_t flipEffectDuration; uint32_t unknown12; uint32_t activeFlares; struct FlareInfo { int32_t x, y, z; int16_t rotX, rotY, rotZ; uint16_t room; uint16_t speed; uint16_t fallspeed; uint32_t unknown; }; FlareInfo flareInfos[numFlares]; // remainder is unused uint8_t readToEOF[]; }; ===== Identifications ===== The ''levelNumber'' field is used for determining what level the game should load when opening the savegame. ^ ID ^ Level ^ Puzzle ^^^^ Key ^^^^ ^ ::: ^ ::: ^ 1 ^ 2 ^ 3 ^ 4 ^ 1 ^ 2 ^ 3 ^ 4 ^ | 1 | The Great Wall | | | | | Guardhouse Key | Rusty Key | | | | 2 | Venice | | | | | Boathouse Key | Steel Key | Iron Key | | | 3 | Bartoli's Hideout | | | | | Library Key | Detonator Key | | | | 4 | Opera House | Relay Box | Circuit Board | | | Ornate Key | | | | | 5 | Offshore Rig | | | | | Red Pass Card | Yellow Pass Card | Green Pass Card | | | 6 | Diving Area | Machine Chip | | | | Red Pass Card | | | Blue Pass Card | | 7 | 40 Fathoms | | | | | | | | | | 8 | Wreck of the Maria Doria | Circuit Breaker | | | | Rest Room Key | Rusty Key | Cabin Key | | | 9 | Living Quarters | | | | | Theatre Key | Rusty Key | | | | 10 | The Deck | | | | The Seraph | | Stern Key | Storage Key | Cabin Key | | 11 | Tibetan Foothills | | | | The Seraph | Drawbridge Key | Hut Key | | | | 12 | Barkhang Monastery | Prayer Wheels | Gemstones | | The Seraph | Strongroom Key | Trapdoor Key | Rooftops Key | Main Hall Key | | 13 | Catacombs of the Talion | Tibetan Mask | | | | | | | | | 14 | Ice Palace | Tibetan Mask | | | | | Gong Hammer | | | | 15 | Temple of Xian | The Dragon Seal | | | | | Gold Key | Silver Key | Main Chamber Key | | 16 | Floating Islands | Mystic Plaque | Mystic Plaque | | | | | | | | 17 | The Dragon's Lair | Mystic Plaque | Dagger of Xian | | | | | | | | 18 | Home Sweet Home | Dagger of Xian | | | | Gun Cupboard Key | | | | | 19 | Venice (//demo//) | | | | | Boathouse Key | Steel Key | Iron Key | | | 20 | Wreck of the Maria Doria (//demo//) | Circuit Breaker | | | | Rest Room Key | Rusty Key | Cabin Key | | | 21 | Tibetan Foothills (//demo//) | | | | The Seraph | Drawbridge Key | Hut Key | | | ^ Golden Mask levels |||||||||| | 1 | The Cold War | | | | | Guardroom Key | Shaft 'B' Key | | | | 2 | Fool's Gold | Circuit Board | | | | CardKey 1 | | | CardKey 2 | | 3 | Furnace of the Gods | Mask Of Tornarsuk | Gold Nugget | | | | | | | | 4 | Kingdom | Mask Of Tornarsuk | | | | | | | | | 5 | Nightmare In Vegas | Elevator Junction | Door Circuit | | | Hotel Key | | | |