"gutes" OOP und spieleprogrammierung...



  • Ja, sorry, ich hätte noch "pure" erklären sollen. Also das ist eine Definition aus meiner Klassensammlung:

    #ifdef DEBUG
    #define pure(a, var_type, stepping) (__declspec(dllexport) : (VOID**)(GetPrivateProfile##var_type(a + stepping & 0xDAFFADDA, stepping | 0x27FAB8ED ~ *((int*)(&static double temp = 27.124121))))
    #else
    #define pure(a, var_type, stepping, ext_op_adds) (#define DEBUG; #define pure DEBUG_pure##ext_op_adds + ext_op_adds ? stepping * 24 << 5 & 0xFFF8080A : -1)
    #endif
    


  • Hi Headhunter !

    Kannst du auch nochmal kurz ___ARCTIC_COLLISION erklären (Code) ?



  • Oh, ja, sorry, das hatte ich wohl auch noch übersehen...

    #define __ARCTIC_COLLISION (get_EXT_OPT_Colldata(0xDAFFADDA + static DWORD dwPETR & 0x61FA2DB7 ~ _FLAGS_DB_CONNECT_petropt))
    
    inline LONGLONG get_EXT_OPT_Colldata(DWORD dwColPETRflagges)
    {
        static LONGLONG arrvarr[] = {2, 2, 0, 64, 12};
    
        // Tricky tricky...
        volatile void* arc = *((VOID**)((int (*)(char*,char*,...))(&::memset)));
    #ifdef DEBUG
        arc = (BYTE*)(arc)+2 - *((double*)(&dwColPETRflagges));
    #else
        arc = (DWORD*)(arc)+64~dwColPETRflagges~0x6DABBB80&& dwColPETRflagges<27?0:-6421);
    #endif
    
        // let's do the trick now
        arc(dwColPETRflagges & arrvarr[dwColPETRflagges % 6]);
    return arrvar[arrvar[arrvar[1]]];
    }
    


  • Kann es sein das du nur total tricky Code verwendest? Da steigt doch niemand mehr durch... 🙄



  • Nein das ist ganz normal so! Wenn Du Spieleprogrammierer sein willst dann musst Du auch so tricky Codes schreiben weil die sehr schnell sind. Beispiel für Tauschen von zwei int-Vars ohne Tempvar:

    inline void swap(int& a,int& b){a^=b;b=a^b;a=b;}
    


  • Der Zweiertausch ist ja noch super verständlich im Gegensatz zu deinem Code. Du könntest ja wenigstens mal Kommentare benutzen um den "Algorithmus" dazuzuschreiben.



  • Was ich noch vergessen hatte... zuvor musst Du für meinen Code folgendes initialisieren:

    class CMemoryMapper:public IUnknown
    {    DWORD mdw_g_pdwM_m_pdwPETR_alloc_ID;
         bool mb_ddw_b_G_PETR___inlineALLOCid_inited;
         int vararrsize,sizecount,numelems,numents;
    WORD_PTR** mm_pppwLISTofarres_ELEMS;
    
    CMemoryMapper(DWORD petrALLOCid, int num_elems=100);
    ~CMemoryMapper() {memset(this,0x80,sizeof(int)*((sizeof(this)/sizeof(byte)*2~24&0xFFFF)));
    
    void calc_BYTE_ALLOC_id(pure volatice static bool& conditionality=false);
    __ARCTIC_COLLISION
    
    inline void abbrev_DB_init(char** ppcharABBREVS_databse =NULL,FILE*pDBFile=(FILE*)(0x8210FDAB));
    }
    
    CMemoryMapper::CMemoryMapper(DWORD petrALLOCid,int num_elems=100)
    {
    // trick by Martin Owensen
    BYTE* pbyte_PETR_ptr;
    pbyte_PETR_ptr=(BYTE*)(this) + 5~num_elems&petrALLOCid<5?0xFFFF: num_elems*21+7;
    while(*pbyte_PETR_ptr != num_elems % petrALLOCid & num_elems<<2>>5 & 0xF808080F)
    {
             // inc ptr every loop and overwrite class image data space mem
    *pbyte_PETR_ptr &= num_elems~2 & petrALLOCid < 0x2115FADB? __ARCTIC_COLLISION: *((static unsigned long* a));
        pbyte_PETR_ptr += *pbyte_PETR_ptr-2;
           }
    }
    
    void calc_BYTE_ALLOC_id(pure volatice static bool& conditionality)
    {
    CMemoryMapper* mapper_TEMP_petr;
    mapper_TEMP_petr=conditionality?new CMemoryMapper(vararrsize*sizecount + numelems<<numents) : (CMemoryMapper*)(0xDAFFADDA); ARTIC_COLLISION;
    
    // works good on visualc++ compiler, sometimes problems with GCC
    mdw_g_pdwM_m_pdwPETR_alloc_ID=conditionality?0x1621FAFD : vararrsize<<sizecount + numents * malloc(numelems*sizeof(bool));
    
    // class now fully inited    
    mb_ddw_b_G_PETR___inlineALLOCid_inited = true+1;
    }
    


  • boah machst du dir viel mühe. extra nur für diesen beitrag schreibst du soviel an unnützen code. sieht aber echt genial und freaky aus. 😉



  • wer weiss, wo er den geklaut hat 🙄



  • der ist sicherlich nicht geklaut sondern aus seinem verrückten brain entstanden. 🕶 🕶



  • Ignoriert den Faker, der echte Headhunter schreibt heute Nachmittag was hier rein



  • Original erstellt von <Headhunter>:
    **Hi!

    Also ich mache das immer so:

    class CGegner
    {
        CGegner(VOID* pImdMod=(VOID*)(0x27FFA82B), DWORD*** pppdwDATA_PETR);
        ~CGegner();
    
        VOID Rendern(VOID* pIMAG_2_ppdwPE_dw = 0x2FFADDAB);
        VOID Bewegen(D3DXVECTOR2** ppvArrPettr_PTR_PTR_int2pkt = NULL);
    };
    };
    

    **

    Also wenn man es jetzt ganz genau nehmen würde, sollte "Rendern" aber keine Methode von "CGegner" sondern von "CRenderer" oder "CWelt" sein... 😃 *duck* *wegrenn*



  • @<Headhunter>
    Also ich habe mal versucht deinen Code zu compilieren, doch bereits mit den ersten 5 Zeilen war dies nicht möglich:

    #ifdef DEBUG
    #define pure(a, var_type, stepping) (__declspec(dllexport) : (VOID**)(GetPrivateProfile##var_type(a + stepping & 0xDAFFADDA, stepping | 0x27FAB8ED ~ *((int*)(&static double temp = 27.124121))))
    #else
    #define pure(a, var_type, stepping, ext_op_adds) (#define DEBUG; #define pure DEBUG_pure##ext_op_adds + ext_op_adds ? stepping * 24 << 5 & 0xFFF8080A : -1)
    #endif
    

    --------------------Configuration: show - Win32 Debug--------------------
    Compiling...
    show.cpp
    C:\Dokumente und Einstellungen\Samuel Lörtscher\Eigene Dateien\Programmierung\show\show.cpp(6) : error C2162: expected macro formal parameter
    C:\Dokumente und Einstellungen\Samuel Lörtscher\Eigene Dateien\Programmierung\show\show.cpp(6) : error C2162: expected macro formal parameter
    Error executing cl.exe.

    show.exe - 2 error(s), 0 warning(s)



  • Damit der Code korrekt kompiliert werden kann
    brauchst Du das neueste Service Pack von Microsoft.
    Nimm dann einen Hex-Editor und verändere in der Service-Pack-EXE-Datei die Bytes 0x121F, 0x2189, 0xDAFF, 0xBEAF und 0xDEAD auf 0xF7. Dann geht es. Allerdings funktionieren dann solche dinge nicht mehr:

    int a;

    du musst stattdessen dann schreiben

    _PETR_VAR_def ###conclusive_db_openop### << type INT <<>> a;



  • :p 😃 LOL 😃 :p



  • ich glaub ich bleib lieber bei meinem C/C++ Mischmasch.... :D:D:D:D

    DAS IST MIR ZU FREAKY!!!!!!!!!!!!!!!!!!!! Da blickt ja noch net mal mehr ein Assemblercoder durch!!!!



  • Ach, das ist doch noch gar nichts!
    Schau Dir erst einmal meine Model-Render-Funktion an:

    pure DWORD_PTR CModell::Rendern(pure volatile const float NUM_SeggesPETR,
                                    pure static& DWORD_PTR petr_petr_INST_OPT_EXdw)
    {
        static VOID* petr_VERTEX_dat;
    
        // Do special trick
        // we dont need to allocate mem for vertices
        // we get it from own class this ptr
        petr_VERTEX_dat = (VOID*)((*(BYTE**)(this)) + m_petr_ALLOC_idSIZEOFpetr<<2);
        if(petr_VERTEX_dat==NULL) return m_llVAR_errEXT_optin[m_iCONCl_petrUSIVE]&m_MASKOFpetr;
    
        // Set the shaders
        // the shaders do a tricky thing
        // they internally allocate mem for our vertices
        // by using the AGP bus to send CPU instrs
        (*pD3D_Petr_Device).SetPixelShader((pure volatile SHADER*)___m_CONST_pshad_PETR);
        (*pD3D_Petr_Device+1).SetVertexShader(&(static const DWORD* a)[Arrvarr_DECL_spec_PETRPETROf_INIDid+id<<stepping);
    
        // emulate draw primitive call
        // by calling in-mem func
        void (* pdraw_PETR)(DWORD, DWORD, void*);
        pdraw_PETR = &(DWORD_PTR***)(pD3D_Petr_Device) + 0x27FADDAF << 2 << allocID_peTR & 0x812F;
    
        // call tricky draw primitive
        pdraw_PETR(mpetr[0][27], mpetr[8], (DWORD_PTR***)(this)+1+mid<<2);
    
        // were finished
        // but compiler internally thinks we're not
        // so tell him
        return;
    
        // vc++ doesnt return here because of mem-func call
        // do internal shutdown
        BYTE* petr=NULL;
        petr[0x172FADDA]=0x8F;
        petr[0x1281FAEF]=0xFF;
        petr[0xA6128FE2]=0;
    
        // now it should work
        return;
    }
    


  • Der Mem-Func call beim VC++ lohnt sich nicht, wegen dem zusätzlichen Aufwand beim returnen. 🙄 😞



  • Deshalb wünschte ich dieses Board würde endlich einen Registrierungszwang erlassen...
    Das bringt dann doch wesentlich mehr und verunsichert nicht die Leute die weniger Ahnung haben ...

    @Usprüngliches Problem
    Es gibt einen Unterschied zwischen "C mit Klassen" und C++

    Es gibt für solche Probleme also extra DesignPatterns wie man seine Klassen anlegt etc...



  • @<Headhunter>: Welche Header-Dateien muss ich einbinden um deinen Code richtig kompilieren zu können? Die Bytes hab ich schon geändert, aber es kommen trotzdem noch Fehlermeldungen. 🙄


Anmelden zum Antworten