This version is outdated by a newer approved version.DiffThis version (2017/01/31 20:52) was approved by zdimension.

This is an old revision of the document!


TR3

struct tr3_savegame
{
    uint8_t SaveName[33]; // ASCII C string; null-terminated (rdata after \0 is ignored); for accents see String Array section of TOMBPC.DAT page
    uint8_t Unknown1[42];
    int32_t SaveNumber;
    uint8_t Unknown2[135];
    // 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
    struct
    {
        uint16_t Header; // Always 0x3E8
        uint16_t Ammo_DesertEagle; // 65,535 means unlimited
        uint16_t Ammo_Uzis;
        uint16_t Ammo_Shotgun;
        uint16_t Ammo_MP5;
        uint16_t Ammo_Rocket;
        uint16_t Ammo_Harpoon;
        uint16_t Ammo_Grenade;
        uint8_t SmallMedipacks; // 255 means unlimited
        uint8_t LargeMedipacks;
        uint8_t Unknown;
        uint8_t Flares;
        uint8_t Unknown2[3];
        /* 00000000 00000001 Always set
         * 00000000 00000010 Pistols
         * 00000000 00000100 Desert Eagle
         * 00000000 00001000 Uzis
         * 00000000 00010000 Shotgun
         * 00000000 00100000 MP5
         * 00000000 01000000 Rocket launcher
         * 00000000 10000000 Grenade launcher
         * 00000001 00000000 Harpoon gun // The presence of the new rocket launcher requires a 2-bytes field
         */
        uint16_t Weapons;
        uint8_t Unknown3a[2];
        uint8_t InfadaStone;
        uint8_t Element115;
        uint8_t IsisEye;
        uint8_t DaggerOfOra;
        uint8_t Unknown3[20];
    } Blocks[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 448.18 for value in meters
    uint32_t Kills;
    uint8_t Secrets; // TODO: study TR3's secrets system
    uint8_t HealthPacksUsed; // Divide by 2 for value. Large medipack = 1; Small = 0.5
    uint8_t LevelNumber; // First level = 1
    uint8_t Unknown5a[2];
    uint8_t UnlimitedAmmo; // Enabled = 1
    uint8_t Unknown5b[17];
    uint8_t LevelNumber;
    uint8_t Unknown5c[4];
    uint8_t Puzzle[4]; // Corresponds to TOMBPC.DAT Puzzle & Keys entries
    uint8_t Keys[4];
    // This part needs to be studied
    uint8_t Unknown6[744];
    uint16_t Health; // Divide by 10 for floating point value between 0 and 100; 32767 (0x7FFF) means unlimited
    uint8_t Unknown7[1952];
    uint16_t Air;
    uint8_t ReadToEOF[];
};

Identifications

The LevelNumber field is used for determining what level the game should load when opening the savegame. Although in TR3 you can choose in what order you go to Nevada, South Pacific and London, the order of levels here seems to be constant:

ID Level Puzzle Key
1 2 3 4 1 2 3 4
1 Jungle Indra Key
2 Temple Ruins Sword Sword Key of Ganesha Key of Ganesha Key of Ganesha Key of Ganesha
3 River Ganges Gate Key
4 Caves of Kaliya
5 Coastal Village Serpent Stone Smuggler's Key
6 Crash Site Commander Bishop's Key Lt. Tuckerman's Key
7 Madubu Gorge
8 Temple of Puna
9 Thames Wharf Flue Room Key Cathedral Key
10 Aldwych Old Penny Ticket Masonic Mallet Ornate Star Maintenace Key Salomon's Key Salomon's Key Salomon's Key
11 Lud's Gate Embalming Fluid Boiler Room Key
12 City
13 Nevada Desert Generator Access Detonator Switch
14 High Security Compound Blue Security Pass Yellow Security Pass Keycard Type A Keycard Type B
15 Area 51 Tower Access Key Code Clearance Disc A Code Clearance Disc B Hut Key Launch Code Pass
16 Antarctica Crowbar Gate Control Key Hut Key
17 RX-Tech Mines Crowbar Lead Battery Winch Starter
18 Lost City of Tinnos Oceanic Mask Uli Key
19 Meteorite Cavern
20 All Hallows Vault Key
trs/savegame/tr3.1485858199.txt.gz · Last modified: 2017/01/31 10:23 (external edit)
Back to top
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0