Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
trs:savegame:tr2 [2024/12/04 12:45] – [TR2] stohrendorftrs:savegame:tr2 [2024/12/05 12:18] (current) – [TR2] stohrendorf
Line 6: Line 6:
     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     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;     int32_t saveNumber;
-    uint8_t unknown2[44]; 
     // First level use block 0, second use block 1... so that at the end of the game,      // 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+    // it sums up everything and/or checks if you found all secrets, etc
 +    // For simplicity, this includes the tile menu as a level.
     struct     struct
     {     {
Line 32: Line 32:
          * 7 Harpoon gun          * 7 Harpoon gun
          */          */
-        uint8_t weapon; // current held weapon+        uint8_t weapon; // equipped weapon
         /* 00000001 Level unlocked         /* 00000001 Level unlocked
          * 00000010 Pistols          * 00000010 Pistols
Line 51: Line 51:
         uint8_t secretBits;         uint8_t secretBits;
         uint8_t healthPacksUsed; // Divide by 2 for value. Large medipack = 1; Small = 0.5         uint8_t healthPacksUsed; // Divide by 2 for value. Large medipack = 1; Small = 0.5
-    } levelInitData[23]; +    } levelInitData[24]; 
     uint32_t elapsedTime; // in game ticks (1/30th of a second), so divide by 30 for time in seconds     uint32_t elapsedTime; // in game ticks (1/30th of a second), so divide by 30 for time in seconds
     uint32_t ammoUsed;     uint32_t ammoUsed;
Line 63: Line 63:
     uint8_t secrets;     uint8_t secrets;
     uint8_t healthPacksUsed; // Divide by 2 for value. Large medipack = 1; Small = 0.5     uint8_t healthPacksUsed; // Divide by 2 for value. Large medipack = 1; Small = 0.5
-    uint8_t levelNumber; // First level = 1 +    uint16_t levelNumber; // First level = 1
-    uint8_t unknown5a;+
     uint8_t unlimitedAmmo; // Enabled = 1     uint8_t unlimitedAmmo; // Enabled = 1
-    uint8_t unknown5b[2];+    uint8_t numPickups[2];
     uint8_t puzzle[4]; // Corresponds to TOMBPC.DAT Puzzle & Keys entries     uint8_t puzzle[4]; // Corresponds to TOMBPC.DAT Puzzle & Keys entries
     uint8_t keys[4];     uint8_t keys[4];
-    // This part needs to be studied +    uint32_t roomsAreFlipped; 
-    uint8_t unknown6[744]; +    uint8_t flipStates[10]; 
-    uint16_t health; // Divide by 10 for floating point value between 0 and 10032767 (0x7FFF) means unlimited +    uint16_t trackFlags[64]; 
-    uint8_t unknown7[1952]; +    uint8_t cameraFlags[]; // size depends on number of cameras in level 
-    uint16_t air;+    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[];     uint8_t readToEOF[];
 }; };
trs/savegame/tr2.1733316345.txt.gz · Last modified: 2024/12/04 12:45 by stohrendorf
Back to top
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0