Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
trs:savegame:tr1 [2017/04/24 02:02] zdimensiontrs:savegame:tr1 [2021/07/15 05:00] (current) – update savegame format with new discoveries stohrendorf
Line 9: Line 9:
     uint32_t saveNumber; // game clips it to 16 bits     uint32_t saveNumber; // game clips it to 16 bits
     uint8_t unknown2[15];     uint8_t unknown2[15];
-    // 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
     struct     struct
     {     {
-        uint16_t header; // Always 0x3E8 (1000)+        uint16_t ammoPistols; // Always 1000
         uint16_t ammoMagnums; // 65,535 means unlimited         uint16_t ammoMagnums; // 65,535 means unlimited
         uint16_t ammoUzis;         uint16_t ammoUzis;
Line 22: Line 22:
         /* 0 None         /* 0 None
          * 1 Climbing          * 1 Climbing
-         * 2 ? +         * 2 Draw weapon 
-         * 3 Single shot.? +         * 3 Holster weapon 
-         * 4 Combat?+         * 4 Combat (i.e. holding a weapon)
          */          */
         uint8_t handStatus;         uint8_t handStatus;
Line 33: Line 33:
          * 4 Shotgun          * 4 Shotgun
          */          */
-        uint8_t weapon; // current held weapon +        uint8_t weapon; // current held weapon
         /* 00000001 Level unlocked         /* 00000001 Level unlocked
          * 00000010 Pistols          * 00000010 Pistols
Line 41: Line 41:
          * 00100000 Midas Hand          * 00100000 Midas Hand
          */          */
-        uint8_t weapons+        uint8_t flags
-        uint8_t unknown2+        uint8_t _padding
-    } levelInitData[21]; // for the 21 levels (315 bytes) +    } levelInitData[21]; // for the 21 levels (315 bytes)
     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 kills;     uint32_t kills;
-    uint16_t secretsFound;+    uint16_t secretsFound; // bitmask of the discovered secrets of the current level
     uint16_t levelNumber; // First level = 1     uint16_t levelNumber; // First level = 1
     uint8_t numPickups;     uint8_t numPickups;
Line 52: Line 52:
     uint8_t hasItem141; // From decompiled game source.     uint8_t hasItem141; // From decompiled game source.
     uint8_t hasItem142; // Strangely, those (unknown) items aren't present in any official TR1 level     uint8_t hasItem142; // Strangely, those (unknown) items aren't present in any official TR1 level
-    uint8_t puzzle[4];+    uint8_t puzzles[4];
     uint8_t keys[4];     uint8_t keys[4];
-    uint8_t pickup// the pickup item+    uint8_t leadBar;
     uint8_t levelInitDataCRC; // not implemented, always 0     uint8_t levelInitDataCRC; // not implemented, always 0
     // 10240 bytes starting from now     // 10240 bytes starting from now
     uint8_t roomsAreSwapped;     uint8_t roomsAreSwapped;
-    uint8_t flipFlags[10]; // = (FlipFlag & 0xFF00) >> 8 +    uint8_t flipFlags[10]; // = (FlipFlag & 0xFF00)>>
-    uint16_t cameraFlagsZoneIndexes[cameraCount];+    uint16_t cameraFlagsZoneIndices[cameraCount];
     // items block here todo     // items block here todo
-#pragma pack(push, 8)  +#pragma pack(push, 8)
     struct     struct
     {     {
Line 67: Line 67:
         int16_t handStatus;         int16_t handStatus;
         WeaponID currentWeapon;         WeaponID currentWeapon;
-        int16_t nextWeapon;+        WeaponID requestedWeapon;
         int16_t climbFallSpeedOverride;         int16_t climbFallSpeedOverride;
         int16_t underwaterState;         int16_t underwaterState;
Line 73: Line 73:
         int16_t collisionFrame;         int16_t collisionFrame;
         int16_t collisionAxis;         int16_t collisionAxis;
-        int16_t air; +        int16_t air; // game ticks of air left 
-        int16_t swimToDiveKeypressDuration; +        int16_t swimToDiveKeypressDuration; // game ticks 
-        int16_t deadTime;+        int16_t deadTime; // game ticks
         int16_t underwaterCurrentStrength;         int16_t underwaterCurrentStrength;
-        int16_t unknown2+        int16_t spasmEffectCounter// e.g. when Lara is hit by lightning 
-        Vertex4 *wallPosition;+        Vertex4 *spasmSource// from which direction Lara is hit
 #pragma pack(push, 1) #pragma pack(push, 1)
         struct MeshTree         struct MeshTree
Line 87: Line 87:
 #pragma pack(pop) #pragma pack(pop)
         ITEM *enemy;         ITEM *enemy;
-        Vertex2YX enemyLookRot;+        Vertex2YX weaponTargetVector;
         int16_t yRotationSpeed;         int16_t yRotationSpeed;
         int16_t movementAngle;         int16_t movementAngle;
Line 115: Line 115:
     } lara; // 236 bytes     } lara; // 236 bytes
 #pragma pack(pop) #pragma pack(pop)
-    int32_t postFxFunc; // this is usually 0xFFFFFFFF (and the last occurence of that in the file) so you can align it to that (replace the items blocks above by a filler block) so that Lara is aligned to postFxFunc+    int32_t postFxFunc; // this is usually -1 (and the last occurence of that in the file) so you can align it to that (replace the items blocks above by a filler block) so that Lara is aligned to postFxFunc
     int32_t animFxTime;     int32_t animFxTime;
 }; };
Line 172: Line 172:
 }; };
 #pragma pack(pop) #pragma pack(pop)
 +
 </code> </code>
-<note tip>The ''%%xxxxCount%%'' values are available in the table below.</note> 
- 
  
 +<note tip>The ''<nowiki>xxxxCount</nowiki>'' values are available in the table below.</note>
 ===== Identifications ===== ===== Identifications =====
  
 ==== Levels ==== ==== Levels ====
  
-^ ID ^ Level ^ Filename ^ Camera count ^ Items ^  Secrets ^ Puzzle ^^^^ Key ^^^^ +^ID^Level^Filename^Camera count^Items^  Secrets^Puzzle^^^^Key^^^| 
-::: ::: ::: ::: ::: ::: ^ 1 ^ 2 ^ 3 ^ 4 ^ 1 ^ 2 ^ 3 ^ 4 ^ +::: ::: ::: ::: ::: ::: ^1^2^3^4^1^2^3^4| 
-|  0 |  Lara's Home  |  ''%%GYM%%''  |  1 |  1 |  0 |         +|  0|  Lara's Home  |  ''<nowiki>GYM</nowiki>''    |  1|  1|  0|                 
-|  1 |  Caves  |  ''%%LEVEL1%%''  |  2 |  60 |  3 |         +|  1|  Caves  |  ''<nowiki>LEVEL1</nowiki>''    |  2|  60|  3|                 
-|  2 |  City of Vilcabamba  |  ''%%LEVEL2%%''  |  6 |  95 |  3 |  Gold Idol  |    |  Silver Key  |    +|  2|  City of Vilcabamba  |  ''<nowiki>LEVEL2</nowiki>''    |  6|  95|  3|  Gold Idol  |       |  Silver Key  |       
-|  3 |  Lost Valley  |  ''%%LEVEL3A%%''  |  6 |  64 |  5 |  Machine Cog  |        +|  3|  Lost Valley  |  ''<nowiki>LEVEL3A</nowiki>''    |  6|  64|  5|  Machine Cog  |               
-|  4 |  Tomb of Qualopec  |  ''%%LEVEL3B%%''  |  10 |  77 |  3 |         +|  4|  Tomb of Qualopec  |  ''<nowiki>LEVEL3B</nowiki>''    |  10|  77|  3|                 
-|  5 |  St. Francis' Folly  |  ''%%LEVEL4%%''  |  14 |  107 |  4 |     |  Neptune Key  |  Atlas Key  |  Damocles Key  |  Thor Key  | +|  5|  St. Francis' Folly  |  ''<nowiki>LEVEL4</nowiki>''    |  14|  107|  4|         |  Neptune Key  |  Atlas Key  |  Damocles Key  |  Thor Key  | 
-|  6 |  Colosseum  |  ''%%LEVEL5%%''  |  10 |  86 |  3 |     |  Rusty Key  |    +|  6|  Colosseum  |  ''<nowiki>LEVEL5</nowiki>''    |  10|  86|  3|         |  Rusty Key  |       
-|  7 |  Palace Midas  |  ''%%LEVEL6%%''  |  7 |  136 |  3 |  Gold Bar  |        +|  7|  Palace Midas  |  ''<nowiki>LEVEL6</nowiki>''    |  7|  136|  3|  Gold Bar  |               
-|  8 |  The Cistern  |  ''%%LEVEL7A%%''  |  7 |  112 |  3 |     |  Gold Key  |  Silver Key  |  Rusty Key  |  +|  8|  The Cistern  |  ''<nowiki>LEVEL7A</nowiki>''    |  7|  112|  3|         |  Gold Key  |  Silver Key  |  Rusty Key  |   
-|  9 |  Tomb of Tihocan  |  ''%%LEVEL7B%%''  |  15 |  88 |  2 |     |  Gold Key  |  Rusty Key  |  Rusty Key  |  +|  9|  Tomb of Tihocan  |  ''<nowiki>LEVEL7B</nowiki>''    |  15|  88|  2|         |  Gold Key  |  Rusty Key  |  Rusty Key  |   
-|  10 |  City of Khamoon  |  ''%%LEVEL8A%%''  |  3 |  93 |  3 |     |  Saphire Key  |    +|  10|  City of Khamoon  |  ''<nowiki>LEVEL8A</nowiki>''    |  3|  93|  3|         |  Saphire Key  |       
-|  11 |  Obelisk of Khamoon  |  ''%%LEVEL8B%%''  |  8 |  103 |  3 |  Eye of Horus  |  Scarab  |  Seal of Anubis  |  Ankh  |  Saphire Key  |    +|  11|  Obelisk of Khamoon  |  ''<nowiki>LEVEL8B</nowiki>''    |  8|  103|  3|  Eye of Horus  |  Scarab  |  Seal of Anubis  |  Ankh  |  Saphire Key  |       
-|  12 |  Sanctuary of the Scion  |  ''%%LEVEL8C%%''  |  12 |  74 |  1 |  Ankh  |  Scarab   |  Gold Key  |    +|  12|  Sanctuary of the Scion  |  ''<nowiki>LEVEL8C</nowiki>''    |  12|  74|  1|  Ankh  |  Scarab     |  Gold Key  |       
-|  13 |  Natla's Mines  |  ''%%LEVEL10A%%''  |  15 |  101 |  3 |  Fuse  |  Pyramid Key  |       +|  13|  Natla's Mines  |  ''<nowiki>LEVEL10A</nowiki>''    |  15|  101|  3|  Fuse  |  Pyramid Key  |             
-|  14 |  Atlantis  |  ''%%LEVEL10B%%''  |  6 |  192 |  3 |         +|  14|  Atlantis  |  ''<nowiki>LEVEL10B</nowiki>''    |  6|  192|  3|                 
-|  15 |  The Great Pyramid  |  ''%%LEVEL10C%%''  |  2 |  129 |  3 |         +|  15|  The Great Pyramid  |  ''<nowiki>LEVEL10C</nowiki>''    |  2|  129|  3|                 
-|  16 |  Cut Scene 1  |  ''%%CUT1%%''  |  1 |  3 |  N/A  ||||||||| +|  16|  Cut Scene 1  |  ''<nowiki>CUT1</nowiki>''    |  1|  3|  N/A  ||||||||| 
-|  17 |  Cut Scene 2  |  ''%%CUT2%%''  |  0 |  1 | ::: ||||||||| +|  17|  Cut Scene 2  |  ''<nowiki>CUT2</nowiki>''    |  0|  1| ::: ||||||||| 
-|  18 |  Cut Scene 3  |  ''%%CUT3%%''  |  0 |  4 | ::: ||||||||| +|  18|  Cut Scene 3  |  ''<nowiki>CUT3</nowiki>''    |  0|  4| ::: ||||||||| 
-|  19 |  Cut Scene 4  |  ''%%CUT4%%''  |  0 |  6 | ::: ||||||||| +|  19|  Cut Scene 4  |  ''<nowiki>CUT4</nowiki>''    |  0|  6| ::: ||||||||| 
-|  20 |  Title  |  ''%%TITLE%%''  |  0 |  1 | ::: ||||||||| +|  20|  Title  |  ''<nowiki>TITLE</nowiki>''    |  0|  1| ::: ||||||||| 
-|  21 |  Current Position  |  ''%%CURRENT%%''  |     | ::: |||||||||+|  21|  Current Position  |  ''<nowiki>CURRENT</nowiki>''    |     | ::: ||||||||| 
 + 
 +<note important>The level "Current Position" (ID 21) seems to have been used internally during the development of the game, and its purposes are unknown. Its file "''<nowiki>CURRENT.PHD</nowiki>''" isn't present in any of the official releases. TODO: Check in the betas.</note> 
  
-<note important>The level "Current Position" (ID 21) seems to have been used internally during the development of the game, and its purposes are unknown. Its file "''%%CURRENT.PHD%%''" isn't present in any of the official releases. TODO: Check in the betas.</note> 
trs/savegame/tr1.1492992159.txt.gz · Last modified: 2017/04/24 02:02 by zdimension
Back to top
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0