Results 1 to 10 of 40

Thread: Reverse Engineering References

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #14
    Codesaurus Skarma's Avatar
    Join Date
    Apr 2009
    Location
    Columbus, OH
    Posts
    227

    Re: [INFO] Reverse Engineering References

    Reversed from Halo CE 1.08 using OllyDbg, IDA Pro, Hexrays, and msdn.

    Initializes the player data caches, including those without data headers. I provided a bunch of the needed structs, only thing extra you will need is CRC stuff from my other posts.

    Code:
    //----- (004763C0) --------------------------------------------------------
    struct Identity
    {
     union
    {
       uint32 Ident;
     
       struct
       {
         int16 Index;
         int16 Salt;
       };
     };
    };
     
    struct DataHeader
    {
     unsigned char Name[32];
     WORD Max;
     WORD Size;
     bool IsValid;
     bool IdentifierZeroInvalid;
     WORD Padding;
     DWORD Signature;
     short NextIndex;
     short LastIndex;
     Identity Next;
     DWORD First;
    };
    
    struct Players
    {
     short PlayerID;
     short IsLocal; // 0=Local(no bits set), -1=Other Client(All bits set)
     wchar_t Name[12]; // Unicode
     Identity UnknownIdent;
     long Team; // 0=Red, 1=Blue
     Identity SwapObject;
     short SwapType;
     short SwapSeat; // Warthog-Driver=0, Passenger=1, Gunner=2, Weapon=-1
     long RespawnTimer; // Counts down when dead, Alive=0
     long Unknown;
     Identity CurrentBiped;
     Identity PreviousBiped;
     long ClusterIndex;
     Identity UnknownIdent1;
     long LastBulletShotTime; // since game start(0)
     wchar_t Name1[12];
     Identity UnknownIdent2;
     long PlayerInfo;
     long Unknown1;
     float VelocityMultiplier;
     Identity UnknownIdent3[4];
     long Unknown2;
     long LastDeathTime; // since game start(0)
     char Unknown3[18];
     short KillsCount;
     char Unknown4[6];
     short AssistsCount;
     char Unknown5[8];
     short BetrayedCount;
     short DeathCount;
     short SuicideCount;
     char Unknown6[18];
     short FlagStealCount;
     short FlagReturnCount;
     short FlagCaptureCount;
     char Unknown7[6];
     Identity UnknownIdent4;
     char Unknown8[8];
     short Ping;
     char Unknown9[14];
     Identity UnknownIdent5;
     long Unknown10;
     long SomeTime;
     float World[3];
     Identity UnknownIdent6;
     char Unknown11[20];
     char Melee : 1;
     char Swap : 1;
     char UnknownBit : 1;
     char Flashlight : 1;
     char UnknownBit1 : 4;
     char UnknownBit2 : 5;
     char Reload : 1;
     char UnknownBit3 : 2;
     char Unknown12[26];
     float Rotation[2];
     float VerticalVelocityMultiplier;
     float HorizontalVelocityMultiplier;
     float RateOfFireVelocityMultiplier;
     char Unknown13[180];
    };
     
    struct s_PlayerData
    {
     DataHeader PlayerHeader;
     Players Player[16];
    };
     
    struct Teams
    {
     unsignedchar Unknown[64];
    };
     
    struct s_TeamData
    {
     DataHeader TeamHeader;
     Teams Team[16];
    };
    
    struct s_LocalPlayer
    {
     Identity UnknownIdent;
     Identity PlayerIdent;
     Identity UnknownIdent1;
     unsignedshort Unknown;
     char Unknown1[138];
    };
     
    struct s_LocalObject
    {
     char Unknown0[16];
     Identity Biped;
     char Unknown1[8];
     float Rotation[2];
     char Unknown2[36];
     float PitchMinimum;
     float PitchMaximum;
    };
    
    s_PlayerData *PlayerData = *(s_PlayerData**)0x008154E0;
    s_TeamData *TeamData = *(s_TeamData**)0x008154DC;
    s_LocalPlayer *LocalPlayer = *(s_LocalPlayer**)0x008154D8;
    s_LocalObject *LocalObject = *(s_LocalObject**)0x0064C2C4;
     
    void InitPlayerCaches()
    {
     DWORD LocalPlayerSize = sizeof(s_LocalPlayer);
     DWORD LocalObjectSize = sizeof(s_LocalObject);
     
     PlayerData = (s_PlayerData*)InitCacheHeader(16, 512, "players");
     TeamData = (s_TeamData*)InitCacheHeader(16, 64, "teams");
     LocalPlayer = (s_LocalPlayer*)(*CacheBaseAddress + *CacheNextAvailOffset);
     
     *CacheNextAvailOffset += LocalPlayerSize;
     CalcCrc32(CacheCrc32, (const char*)&LocalPlayerSize, 4);
     
     LocalPlayer->UnknownIdent.Ident = -1;
     LocalPlayer->PlayerIdent.Ident = -1;
     LocalPlayer->Unknown = 0;
     LocalObject = (s_LocalObject*)(*CacheBaseAddress + *CacheNextAvailOffset);
     
     *CacheNextAvailOffset += LocalObjectSize;
     CalcCrc32(CacheCrc32, (const char*)&LocalObjectSize, 4);
    }
    Last edited by Skarma; October 29th, 2009 at 01:08 AM.
    Reply With Quote

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •