Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
icecoldduke

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

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

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×