# User:Psycommando/Macros reference

## Intro

Prototype for a complete list of macros links(in the wiki) and infos. All Macros are listed in different categories, and divided in groups.

## Warning on macros

For those unfamiliar with macros, I must warn you that macros are EVIL. They are basically the equivalent of doing a search and replace at compile time, therefore never put an operation as a macro parameter, it will do the operations as many time as the parameter is used in the macro definition!!! This page C++ Faq Lite describe most of the problem. Be sure to check evil# 1-2-3-4.

## Network

### IMPLEMENT_NETWORKCLASS_ALIASED

• Call : IMPLEMENT_NETWORKCLASS_ALIASED( className, dataTable )
• Declaration : From ..\game\shared\predictable_entity.h
```#define IMPLEMENT_NETWORKCLASS_ALIASED(className, dataTable)			\
IMPLEMENT_CLIENTCLASS( C_##className, dataTable, C##className )```
• Description :
• Example :

## Misc

### STUB_WEAPON_CLASS

• Call : STUB_WEAPON_CLASS( entityName, className, baseClassName )
• Required Include : c_weapon__stubs.h
• Description : This macro is very simple, it writes a very basic client class for the specified weapon. Most of the weapon stub classes generated by this macro can be found in ..\src\game\client\hl2\c_weapon__stubs_hl2.cpp, but you should note that you can use this macro in any client-side .cpp file, of course you need to include "c_weapon__stubs.h".
• Macro Definition :
``` #define STUB_WEAPON_CLASS( entityName, className, baseClassName )	\
class C_##className## : public baseClassName					\
{										\
DECLARE_CLASS( C_##className##, baseClassName );                        \
public:					                                        \
DECLARE_PREDICTABLE();							\
DECLARE_CLIENTCLASS();							\
C_##className() {};                                                     \
private:                                                                        \
C_##className( const C_##className & );					\
};										\
STUB_WEAPON_CLASS_IMPLEMENT( entityName, C_##className );		\
IMPLEMENT_CLIENTCLASS_DT( C_##className, DT_##className, C##className )	\
END_RECV_TABLE()
```
• Example :
``` STUB_WEAPON_CLASS( weapon_crowbar, WeaponCrowbar, C_BaseHLBludgeonWeapon );
```

### REGISTER_GAMERULES_CLASS

• Call : REGISTER_GAMERULES_CLASS( className )
• Required Include : ..\src\game\shared\gamerules_register.h
• Description : Add a new gamerule class to the register?(...Need research...)
• Definition :
``` #define REGISTER_GAMERULES_CLASS( className ) \
void __CreateGameRules_##className() { new className; } \
static CGameRulesRegister __g_GameRulesRegister_##className( #className, __CreateGameRules_##className );
```
• Example :