+Coding style in dark-hammer is pretty much what linus trovalds defines in linux kernel, with some minor changes.
+I will breifly describe it here, but for more detailed description check out this [[http://www.kernel.org/doc/Documentation/CodingStyle|link]].
+First of all, 99% of the code is written in C99 standard and .c files, the only exceptions of .cpp (compiled with C++ compiler) are sources that need to access C++ libraries like DirectX (I know dx has C interface, but these libraries are just easier to work with cpp). the only difference is that .cpp files in the engine use C++ compiler and interface/class calls to external APIs, but they are still written in C99 standard and does not use any C++ features.
+* Defining pointer types never come in a single line and pointers (* character) always comes right after type:
+int* func(const char* hello, void* test);
+void* p2; /* same pointer types should not come in a single line */
+* Naming files should be **lower-case** and always seperated with '-' character.
+* Naming variables/functions and other types are in **camel_case**
+* There are some extensions to common variables names, like //_cnt// (as in count), //_max// and //_min//. for example if you want to define a variable that specified the count of objects you should name it like //int32 obj_cnt;//.
+* Function and other type (struct/typedef/etc.) names, especially the one's that are interfaced and used in headers, should have a prefix of their owner subsystem. for example all graphics related functions in engine have //gfx_// prefix before them.
+* Preprocessor definitions are in **UPPER_CASE**
+* Enumerators are in **UPPER_CASE** and the one's in the header files should contain the prefix of the their subsystem just like function and other type names.
+* It's better to use opaque type variables defined in //core/types.h//.
+* Most of the structures should not use typedef to represent them, you should use the plain //struct my_struct;// for defining them. The exception is for the types that are not visible in headers and used only in one module, like //gfx_cmdqueue// (see gfx-cmdqueue.h) which the type is opaque and it is not known to the other parts of program.
+* Arguments more than 16 bytes in size, should always be passed by pointer.
+* In many functions like string and math, destination (result) pointer value should come before source arguments. and those functions must (in most cases) return the result as a pointer too. it makes using those functions easier in single line statements. see the example:
+struct vec4f* vec4_add(struct vec4f* r, const struct vec4f* v1, const struct vec4f* v2)
+And that's it. (also thanks to linux community to make everything much simpler for me, including the coding style)