Quake源代?分析(草稿).1

时间:2008-03-21 15:15:54  来源:  作者:

        Quake是Id Software公司推出一款?迷全球的FPS??.至今?止已??展到了第三代,而且作?一??良的??引擎,它也被大量的?用到其他公司??的???中.例如我?所熟知的CS,它就是在Quake2引擎上改良而?的.?然?面的代????不完全相同,但是整?框架?是Quake2的,只要是稍微接??Quake引擎的人都很容易看得出?.(它是那?的?典,以至於一直沿用到今天,?人??它是???域大型??化??最好的一?典?.?在很多??已?改用面向?象的程序??方法???,但Quake的影??是深?的.包括前段???露CS2源?,它的架?仍然保留著些?Quake的?貌.)
        很多人告述我Id Software 很早之前就已?公?了 Quake 全部源?.??我要告述你?,其?Id公?的?不是所有的源代?,而??是???代?,你想想看哪?公司?笨到?自己的核心技??囊倒出,?些可是他?吃?的本?啊!???的代?只包括了UI,AI等??.像?像渲染,????部分??有?出.你看到的唯有函?的?明部分.因此要?底研究Quake就必??得?部分的源代?,可上哪去找呢?令人??的是,早前已?有牛人通?逆向工程的方法?Quake核心代?整理出?,做了一?仿Quake引擎.我下面的分析就是根?他的代???的,?然跟真?的Quake引擎比?也??有些出入,但我相信那?不影?我?去理解Quake.
         ?如大多?Win32?用程序,Quake的Win32部分也是?WinMain函??入的.???被分成了cggame,ui??主要的模?.(???模?被??成dll程序,然後由引擎?入它?,?了????的代?能???核心?的函?,引擎部分??一?叫SV_GameSystemCalls的函???cggame和ui?部使用.?:SV_GameSystemCalls管理著所有可能被????用到的核心函?)在Quake引擎中dll之?,以及dll?exe之?的交互都是通?vmMain和dllEntry??函?完成的.dll引出??函?函?的用意是用vmMain作?其他dll或exe程序????dll的接口,只要提供??函?的索引?以及函?的原形,那?你就可以?得那?函?的??.而dllEntry?是?用者?它所?用的dll一?接口,被?用的dll就能?使用??接口呼叫?用者的?部函?了.???的dll就是使用dllEntry?接收SV_GameSystemCalls的.以下是dllEntry函?的??:
        static int (CDECL *syscall)( int arg, ... ) = (int (CDECL *)( int, ...))-1;
        void dllEntry( int (CDECL *syscallptr)( int arg,... ) ) {
                 syscall = syscallptr;
        }
我?常?的trap打?的函???上是?用了引擎代?的,具?如下:
        void trap_Printf( const char *fmt ) {
                syscall( G_PRINT, fmt );
        }
了解了上述的?用??後,我?就可以比???地跟???Quake源?啦.

文章评论

共有 位网友发表了评论 查看完整内容