Jump to content

Quake Wars, Quake 4 and Prey PDB(Debug Symbols)


icecoldduke

Recommended Posts

Using a custom pipeline process, I created PDB files(debug symbols) for Quake 4 and Prey. It looks like the process captured 45% of the Quake 4 functions and 70% of the Prey functions. I created these PDB's by creating function signatures in Doom 3 vanilla using the GPL code, and the ETQW demo pdb files that Splash Damage released with the demo.

 

If anyone is interested, I posted a bit more about it here along with the links to the generated PDB files:

http://www.doom3world.com/index.php?threads/quake-4-and-prey-pdb.96/

Edited by icecoldduke

Share this post


Link to post

I don't really understand what you can do with these files, but thanks for keeping us updated!

Edited by Tetzlaff

Share this post


Link to post
8 hours ago, Tetzlaff said:

I don't really understand what you can do with this files, but thanks for keeping us updated!

If someone is developing a quake 4 or prey mod, and they want to do code injections to add graphical features or debug a engine side crash, instead of navigating a sea of addresses, they have function names that match the addresses. 
 

so this resolves 0x440022 which doesn’t mean much to anyone to a function name like R_RenderSomethingCool

Share this post


Link to post
  • 1 month later...

The Quake 4 Mac OS version actually contains debug symbols(they weren't stripped out). Using that I was able to figure out most of the interface bits to Quake 4 toolsx86.dll.

 

http://www.doom3world.com/index.php?threads/quake-4-toolsx86-dll-interface.105/

 

class rvToolsInterface {
public:
    rvToolsInterface::~rvToolsInterface() = 0;
    virtual void GetInstance(void) = 0;
    virtual HWND GetParentWindow(void) = 0;
    virtual HDC GetDC(void) = 0;
    virtual bool IsParentWindowVisible(void) = 0;
    virtual void InitTool(int,idDict const*) = 0;
    virtual void ShutdownTool(int) = 0;
    virtual bool IsToolActive(int) = 0;
    virtual void Frame(void) = 0;
    virtual void Shutdown(void) = 0;
    virtual void HandleToolPrint(char const*) = 0;
    virtual void HandleMapChange(void) = 0;
    virtual void StartLevelLoad(void) = 0;
    virtual void EndLevelLoad(void) = 0;
    virtual int GetSourceControl(void) = 0;
    virtual void MakeGameCurrent(void) = 0;
    virtual void SetDefaultState(void) = 0;
    virtual void Set2D(int,int) = 0;
    virtual void DoRBFDialog(char const*) = 0;
    virtual void PlaybackEditorRefresh(void) = 0;
    virtual void ModViewShutdown(char const*) = 0;
    virtual void ModViewRun(void) = 0;
    virtual void ModViewGetJointStatus(int) = 0;
    virtual bool ModViewIsSurfaceSelected(char const*) = 0;
    virtual bool ModViewIsSurfaceHidden(char const*) = 0;
    virtual int ModViewGetBgrndColor(void) = 0;
    virtual bool FXEditorIsActive(void) = 0;
    virtual void FXEditorRefreshEffects(void) = 0;
    virtual void FXEditorPlayEffect(bool) = 0;
    virtual void FXEditorStopEffect(void) = 0;
    virtual void FXEditorRefreshMaterials(void) = 0;

    // Unknown return class!
    virtual void *GEAllocateWindowWrapper(idWindow *) = 0;

    virtual void GEDeallocateWindowWrapper(idWindow *) = 0;

    virtual void GEFinish(idWindow *) = 0;
    virtual void GEAddScript(idWindow *,char const*,char const*) = 0;
    virtual void GEVariableDictSet(idWindow *,char const*,char const*) = 0;
    virtual int GESetStateKey(idWindow *,char const*,char const*,bool) = 0;
    virtual void GEMessage(char const*,...) = 0;
    virtual void DebuggerPrint(char const*) = 0;
    virtual void DebuggerCheckBreakpoint(idInterpreter *,idProgram *,int) = 0;
    virtual void DmapCleanupOptimizedShadowTris(int,srfTriangles_s *) = 0;
    virtual void DmapSuperOptimizeOccluders(SOOData_s *,idVec4 *,int *,int,idPlane,idVec3) = 0;
    virtual void DmapOutputString(char const*) = 0;
    virtual void SetListenerArea(int) = 0;
    virtual int GetListenerArea(void) = 0;
    virtual void PhonemeGen(idCmdArgs const&) = 0;
    virtual void ShakesGen(idCmdArgs const&) = 0;
    virtual void RoQFileEncode(idCmdArgs const&) = 0;
    virtual void Renderbump(idCmdArgs const&) = 0;
    virtual void RenderbumpFlat(idCmdArgs const&) = 0;
    virtual void Dmap(idCmdArgs const&) = 0;
    virtual void RunAAS(idCmdArgs const&) = 0;
    virtual void RunAASDir(idCmdArgs const&) = 0;
    virtual void RunReach(idCmdArgs const&) = 0;
    virtual void RunCluster(idCmdArgs const&) = 0;
    virtual void RunAASTactical(idCmdArgs const&) = 0;
    virtual void LocaliseGuis(idCmdArgs const&) = 0;
    virtual void LocaliseLipsyncs(idCmdArgs const&) = 0;
    virtual void LocaliseMaps(idCmdArgs const&) = 0;
    virtual void LocaliseValidateLipsyncs(idCmdArgs const&) = 0;
    virtual void LocaliseValidateStrings(idCmdArgs const&) = 0;
};

struct rvToolsImport_t {
    int version;
    int unknown;
    HWND hwnd;
    HDC hdc;
    HGLRC hglrc;
    PIXELFORMATDESCRIPTOR *pfd;
    idSys *sys;
    idCommon *common;
    idCmdSystem *cmdSystem;
    idFileSystem *fileSystem;
    idRenderSystem *renderSystem;
    idSoundSystem *soundSystem;
    idRenderModelManager *renderModelManager;
    idUserInterfaceManager *userInterfaceManager;
    idDeclManager *declManager;
    void *off_103FCAA0;
    idCollisionModelManager *collisionModelManager;
    idGameEdit *gameEdit;
    void *off_103174C8;
    void *off_1031B6B8;
    void *off_1030FFB0;
    void *off_10310698;
    void *off_103FC49C;
    void *off_10310040;
    void *off_103FC344[0];
    void *off_103FC428;
    idSession *session;
    idImageManager *globalImages;
    idGameLocal *game;
};

rvToolsInterface *GetToolsAPI(rvToolsImport_t *api, operator new, operator delete, int *(GetHeapSize)(void *unknown));

 

Share this post


Link to post

I have been perfecting my function map hashing process. Using the Quake Wars 1.0 demo PDB file(yes the PDB debug file was accidently included in the 1.0 demo), I was able to match 10,000 out of 11,500 functions in the Quake Wars 1.5 retail SDK executable. The PDB file I created can be loaded in visual studio. 

 

https://github.com/jmarshall23/Quake4BSE/tree/master/quakewars/sdk15

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...