"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.